From 003c9fed11823ed64ea6a9cfa4d71ca4f3f83cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Tue, 9 Jul 2024 14:57:33 +0200 Subject: [PATCH 01/48] feat: deterministic deployment scripts --- docker/Dockerfile.deploy | 47 + docker/Dockerfile.gen-configs | 53 + docker/config-example.toml | 75 + docker/scripts/build.sh | 26 + docker/scripts/deploy.sh | 46 + docker/scripts/gen-configs.sh | 33 + docker/scripts/push.sh | 24 + docker/templates/balance-checker-config.json | 42 + docker/templates/bridge-history-config.json | 56 + docker/templates/chain-monitor-config.json | 56 + docker/templates/config-contracts.toml | 55 + docker/templates/coordinator-config.json | 30 + docker/templates/genesis.json | 48 + docker/templates/rollup-config.json | 87 ++ foundry.toml | 16 +- package.json | 3 +- scripts/deterministic/Configuration.sol | 216 +++ scripts/deterministic/Constants.sol | 35 + scripts/deterministic/DeployScroll.s.sol | 1272 +++++++++++++++++ .../deterministic/DeterministicDeployment.sol | 226 +++ scripts/deterministic/GenerateConfigs.s.sol | 328 +++++ scripts/deterministic/GenerateGenesis.s.sol | 251 ++++ src/L2/predeploys/L1GasPriceOracle.sol | 3 + 23 files changed, 3024 insertions(+), 4 deletions(-) create mode 100644 docker/Dockerfile.deploy create mode 100644 docker/Dockerfile.gen-configs create mode 100644 docker/config-example.toml create mode 100755 docker/scripts/build.sh create mode 100755 docker/scripts/deploy.sh create mode 100755 docker/scripts/gen-configs.sh create mode 100755 docker/scripts/push.sh create mode 100644 docker/templates/balance-checker-config.json create mode 100644 docker/templates/bridge-history-config.json create mode 100644 docker/templates/chain-monitor-config.json create mode 100644 docker/templates/config-contracts.toml create mode 100644 docker/templates/coordinator-config.json create mode 100644 docker/templates/genesis.json create mode 100644 docker/templates/rollup-config.json create mode 100644 scripts/deterministic/Configuration.sol create mode 100644 scripts/deterministic/Constants.sol create mode 100644 scripts/deterministic/DeployScroll.s.sol create mode 100644 scripts/deterministic/DeterministicDeployment.sol create mode 100644 scripts/deterministic/GenerateConfigs.s.sol create mode 100644 scripts/deterministic/GenerateGenesis.s.sol diff --git a/docker/Dockerfile.deploy b/docker/Dockerfile.deploy new file mode 100644 index 00000000..02301333 --- /dev/null +++ b/docker/Dockerfile.deploy @@ -0,0 +1,47 @@ +# Use the latest node Debian slim base image +# This makes installing yarn dep much easier +FROM node:20-bookworm-slim + +# Switch to bash shell +SHELL ["/bin/bash", "-c"] + +WORKDIR /root + +# Install dependencies +RUN apt update +RUN apt install --yes curl bash coreutils git jq + +# Download and run the Foundry installation script +RUN curl -L https://foundry.paradigm.xyz | bash + +# Set the environment variables to ensure Foundry tools are in the PATH +ENV PATH="/root/.foundry/bin:${PATH}" + +# Run foundryup to update Foundry +RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae + +# copy dependencies +COPY ./lib /contracts/lib +COPY ./node_modules/@openzeppelin /contracts/node_modules/@openzeppelin + +# copy configurations +COPY foundry.toml /contracts/foundry.toml +COPY remappings.txt /contracts/remappings.txt + +# copy source code +COPY ./src /contracts/src +COPY ./scripts /contracts/scripts + +# compile contracts +ENV FOUNDRY_EVM_VERSION="cancun" +ENV FOUNDRY_BYTECODE_HASH="none" + +WORKDIR /contracts +RUN forge build + +# copy script configs +COPY ./docker/templates/config-contracts.toml /contracts/docker/templates/config-contracts.toml + +COPY ./docker/scripts/deploy.sh /contracts/docker/scripts/deploy.sh + +ENTRYPOINT ["/bin/bash", "/contracts/docker/scripts/deploy.sh"] diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs new file mode 100644 index 00000000..6a8ad51f --- /dev/null +++ b/docker/Dockerfile.gen-configs @@ -0,0 +1,53 @@ +# Use the latest node Debian slim base image +# This makes installing yarn dep much easier +FROM node:20-bookworm-slim + +# Switch to bash shell +SHELL ["/bin/bash", "-c"] + +WORKDIR /root + +# Install dependencies +RUN apt update +RUN apt install --yes curl bash coreutils git jq + +# Download and run the Foundry installation script +RUN curl -L https://foundry.paradigm.xyz | bash + +# Set the environment variables to ensure Foundry tools are in the PATH +ENV PATH="/root/.foundry/bin:${PATH}" + +# Run foundryup to update Foundry +RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae + +# copy dependencies +COPY ./lib /contracts/lib +COPY ./node_modules/@openzeppelin /contracts/node_modules/@openzeppelin + +# copy configurations +COPY foundry.toml /contracts/foundry.toml +COPY remappings.txt /contracts/remappings.txt + +# copy source code +COPY ./src /contracts/src +COPY ./scripts /contracts/scripts + +# compile contracts +ENV FOUNDRY_EVM_VERSION="cancun" +ENV FOUNDRY_BYTECODE_HASH="none" + +WORKDIR /contracts +RUN forge build + +# copy script configs +COPY ./docker/templates/balance-checker-config.json /contracts/docker/templates/balance-checker-config.json +COPY ./docker/templates/bridge-history-config.json /contracts/docker/templates/bridge-history-config.json +COPY ./docker/templates/chain-monitor-config.json /contracts/docker/templates/chain-monitor-config.json +COPY ./docker/templates/config-contracts.toml /contracts/docker/templates/config-contracts.toml +COPY ./docker/templates/coordinator-config.json /contracts/docker/templates/coordinator-config.json +COPY ./docker/templates/genesis.json /contracts/docker/templates/genesis.json +COPY ./docker/templates/rollup-config.json /contracts/docker/templates/rollup-config.json + +COPY ./docker/scripts/gen-configs.sh /contracts/docker/scripts/gen-configs.sh + +ENTRYPOINT ["/bin/bash", "/contracts/docker/scripts/gen-configs.sh"] diff --git a/docker/config-example.toml b/docker/config-example.toml new file mode 100644 index 00000000..284236c6 --- /dev/null +++ b/docker/config-example.toml @@ -0,0 +1,75 @@ +[general] + +L1_RPC_ENDPOINT = "http://l1geth:8545" +L2_RPC_ENDPOINT = "http://l2geth:8545" + +CHAIN_ID_L1 = 111111 +CHAIN_ID_L2 = 222222 + +MAX_TX_IN_CHUNK = 100 +MAX_BLOCK_IN_CHUNK = 100 +MAX_L1_MESSAGE_GAS_LIMIT = 10000 + +L1_CONTRACT_DEPLOYMENT_BLOCK = 0 + +TEST_ENV_MOCK_FINALIZE_ENABLED = true +TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 3600 + + +[accounts] + +# note: for now we simply use Anvil's dev accounts + +DEPLOYER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" +OWNER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +L1_COMMIT_SENDER_PRIVATE_KEY = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" +L1_FINALIZE_SENDER_PRIVATE_KEY = "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a" +L1_GAS_ORACLE_SENDER_PRIVATE_KEY = "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6" +L2_GAS_ORACLE_SENDER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" + +DEPLOYER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" +OWNER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + +L1_COMMIT_SENDER_ADDR = "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" +L1_FINALIZE_SENDER_ADDR = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" +L1_GAS_ORACLE_SENDER_ADDR = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" +L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" + +L2GETH_SIGNER_0_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" + +[db] + +SCROLL_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/scroll?sslmode=disable" +CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/chain_monitor?sslmode=disable" +BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/bridge_history?sslmode=disable" + + +[genesis] + +L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" +L2_DEPLOYER_INITIAL_BALANCE = 1000000000000000000 + + +[contracts] + +DEPLOYMENT_SALT = "" + +# contracts deployed outside this script +L1_FEE_VAULT_ADDR = "0x0000000000000000000000000000000000000001" +L1_PLONK_VERIFIER_ADDR = "0x0000000000000000000000000000000000000001" + +[contracts.overrides] + +# L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" + +L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" +L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" +L2_WHITELIST = "0x5300000000000000000000000000000000000003" +L2_WETH = "0x5300000000000000000000000000000000000004" +L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" + + +[coordinator] + +COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" diff --git a/docker/scripts/build.sh b/docker/scripts/build.sh new file mode 100755 index 00000000..93b15de0 --- /dev/null +++ b/docker/scripts/build.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +latest_commit=$(git log -1 --pretty=format:%h) +tag=${latest_commit:0:8} +echo "Using Docker image tag: $tag" +echo "" + +docker build -f docker/Dockerfile.gen-configs -t scrolltech/scroll-stack-contracts:gen-configs-$tag-amd64 --platform linux/amd64 . +echo +echo "built scrolltech/scroll-stack-contracts:gen-configs-$tag-amd64" +echo + +docker build -f docker/Dockerfile.gen-configs -t scrolltech/scroll-stack-contracts:gen-configs-$tag-arm64 --platform linux/arm64 . +echo +echo "built scrolltech/scroll-stack-contracts:gen-configs-$tag-arm64" +echo + +docker build -f docker/Dockerfile.deploy -t scrolltech/scroll-stack-contracts:deploy-$tag-amd64 --platform linux/amd64 . +echo +echo "built scrolltech/scroll-stack-contracts:deploy-$tag-amd64" +echo + +docker build -f docker/Dockerfile.deploy -t scrolltech/scroll-stack-contracts:deploy-$tag-arm64 --platform linux/arm64 . +echo +echo "built scrolltech/scroll-stack-contracts:deploy-$tag-arm64" +echo diff --git a/docker/scripts/deploy.sh b/docker/scripts/deploy.sh new file mode 100755 index 00000000..7a0df77a --- /dev/null +++ b/docker/scripts/deploy.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +export FOUNDRY_EVM_VERSION="cancun" +export FOUNDRY_BYTECODE_HASH="none" + +if [ "${L1_RPC_ENDPOINT}" = "" ]; then + echo "L1_RPC_ENDPOINT is not set" + L1_RPC_ENDPOINT="http://host.docker.internal:8543" +fi + +if [ "$L2_RPC_ENDPOINT" = "" ]; then + echo "L2_RPC_ENDPOINT is not set" + L2_RPC_ENDPOINT="http://host.docker.internal:8545" +fi + +if [ "${L1_RPC_ENDPOINT}" = "" ]; then + echo "L1_RPC_ENDPOINT is not set" + L1_RPC_ENDPOINT="http://host.docker.internal:8543" +fi + +if [ "${BATCH_SIZE}" = "" ]; then + BATCH_SIZE="100" +fi + +echo "using L1_RPC_ENDPOINT = $L1_RPC_ENDPOINT" +echo "using L2_RPC_ENDPOINT = $L2_RPC_ENDPOINT" + +# simulate L1 +echo "" +echo "simulating on L1" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L1_RPC_ENDPOINT" --sig "run(string,string)" "L1" "verify-config" || exit 1 + +# simulate L2 +echo "" +echo "simulating on L2" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --sig "run(string,string)" "L2" "verify-config" --legacy || exit 1 + +# deploy L1 +echo "" +echo "deploying on L1" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L1_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L1" "verify-config" --broadcast || exit 1 + +# deploy L2 +echo "" +echo "deploying on L2" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L2" "verify-config" --broadcast --legacy || exit 1 diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh new file mode 100755 index 00000000..00da4f0b --- /dev/null +++ b/docker/scripts/gen-configs.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +echo "" +echo "generating config-contracts.toml" +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" || exit 1 + +echo "" +echo "generating genesis.json" +forge script scripts/deterministic/GenerateGenesis.s.sol:GenerateGenesis || exit 1 + +echo "" +echo "generating rollup-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupConfig || exit 1 + +echo "" +echo "generating coordinator-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateCoordinatorConfig || exit 1 + +echo "" +echo "generating chain-monitor-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateChainMonitorConfig || exit 1 + +echo "" +echo "generating bridge-history-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 + +echo "" +echo "generating balance-checker-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 + +echo "" +echo "generating .env.frontend" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateFrontendConfig || exit 1 diff --git a/docker/scripts/push.sh b/docker/scripts/push.sh new file mode 100755 index 00000000..da28510e --- /dev/null +++ b/docker/scripts/push.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +latest_commit=$(git log -1 --pretty=format:%h) +tag=${latest_commit:0:8} +echo "Using Docker image tag: $tag" +echo "" + +docker push scrolltech/scroll-stack-contracts:gen-configs-$tag-amd64 +docker push scrolltech/scroll-stack-contracts:gen-configs-$tag-arm64 + +docker manifest create scrolltech/scroll-stack-contracts:gen-configs-$tag \ + --amend scrolltech/scroll-stack-contracts:gen-configs-$tag-amd64 \ + --amend scrolltech/scroll-stack-contracts:gen-configs-$tag-arm64 + +docker manifest push scrolltech/scroll-stack-contracts:gen-configs-$tag + +docker push scrolltech/scroll-stack-contracts:deploy-$tag-amd64 +docker push scrolltech/scroll-stack-contracts:deploy-$tag-arm64 + +docker manifest create scrolltech/scroll-stack-contracts:deploy-$tag \ + --amend scrolltech/scroll-stack-contracts:deploy-$tag-amd64 \ + --amend scrolltech/scroll-stack-contracts:deploy-$tag-arm64 + +docker manifest push scrolltech/scroll-stack-contracts:deploy-$tag diff --git a/docker/templates/balance-checker-config.json b/docker/templates/balance-checker-config.json new file mode 100644 index 00000000..79011d94 --- /dev/null +++ b/docker/templates/balance-checker-config.json @@ -0,0 +1,42 @@ +{ + "addresses": [ + { + "rpc_url": "${SCROLL_L1_RPC}", + "min_balance_ether": "10", + "address": "${L1_COMMIT_SENDER_ADDRESS}", + "name": "L1_COMMIT_SENDER" + }, + { + "rpc_url": "${SCROLL_L1_RPC}", + "min_balance_ether": "10", + "address": "${L1_FINALIZE_SENDER_ADDRESS}", + "name": "L1_FINALIZE_SENDER" + }, + { + "rpc_url": "${SCROLL_L1_RPC}", + "min_balance_ether": "1.1", + "address": "${L1_GAS_ORACLE_SENDER_ADDRESS}", + "name": "L1_GAS_ORACLE_SENDER" + }, + { + "rpc_url": "${SCROLL_L1_RPC}", + "min_balance_ether": "0", + "address": "${L1_SCROLL_FEE_VAULT_ADDRESS}", + "name": "L1_SCROLL_FEE_VAULT" + }, + { + "rpc_url": "${SCROLL_L2_RPC}", + "min_balance_ether": "1.1", + "address": "${L2_GAS_ORACLE_SENDER_ADDRESS}", + "name": "L2_GAS_ORACLE_SENDER" + }, + { + "rpc_url": "${SCROLL_L2_RPC}", + "min_balance_ether": "0", + "address": "${L2_TX_FEE_VAULT_ADDR}", + "name": "L2_TX_FEE_VAULT" + } + ], + "JOB_INTERVAL_SECS": 60, + "BIND_PORT": 8080 +} \ No newline at end of file diff --git a/docker/templates/bridge-history-config.json b/docker/templates/bridge-history-config.json new file mode 100644 index 00000000..de8f0a6c --- /dev/null +++ b/docker/templates/bridge-history-config.json @@ -0,0 +1,56 @@ +{ + "L1": { + "confirmation": 0, + "endpoint": null, + "startHeight": 0, + "blockTime": 12, + "fetchLimit": 16, + "MessageQueueAddr": null, + "MessengerAddr": null, + "ScrollChainAddr": null, + "GatewayRouterAddr": null, + "ETHGatewayAddr": null, + "WETHGatewayAddr": null, + "StandardERC20GatewayAddr": null, + "CustomERC20GatewayAddr": null, + "ERC721GatewayAddr": null, + "ERC1155GatewayAddr": null, + "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", + "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", + "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", + "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" + }, + "L2": { + "confirmation": 0, + "endpoint": null, + "blockTime": 3, + "fetchLimit": 64, + "MessageQueueAddr": null, + "MessengerAddr": null, + "GatewayRouterAddr": null, + "ETHGatewayAddr": null, + "WETHGatewayAddr": null, + "StandardERC20GatewayAddr": null, + "CustomERC20GatewayAddr": null, + "ERC721GatewayAddr": null, + "ERC1155GatewayAddr": null, + "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", + "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", + "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", + "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" + }, + "db": { + "dsn": null, + "driverName": "postgres", + "maxOpenNum": 200, + "maxIdleNum": 20 + }, + "redis": { + "address": "localhost:6379", + "username": "default", + "password": "", + "local": true, + "minIdleConns": 10, + "readTimeoutMs": 500 + } +} diff --git a/docker/templates/chain-monitor-config.json b/docker/templates/chain-monitor-config.json new file mode 100644 index 00000000..09fb89bc --- /dev/null +++ b/docker/templates/chain-monitor-config.json @@ -0,0 +1,56 @@ +{ + "l1_config": { + "l1_url": null, + "confirm": "0x20", + "start_number": null, + "l1_contracts": { + "l1_gateways": { + "eth_gateway": null, + "weth_gateway": null, + "standard_erc20_gateway": null, + "custom_erc20_gateway": null, + "erc721_gateway": null, + "erc1155_gateway": null, + "dai_gateway": "0x0000000000000000000000000000000000000000", + "usdc_gateway": "0x0000000000000000000000000000000000000000", + "lido_gateway": "0x0000000000000000000000000000000000000000", + "puffer_gateway": "0x0000000000000000000000000000000000000000" + }, + "scroll_messenger": null, + "message_queue": null, + "scroll_chain": null + }, + "start_messenger_balance": null + }, + "l2_config": { + "l2_url": null, + "confirm": "0x80", + "l2_contracts": { + "l2_gateways": { + "eth_gateway": null, + "weth_gateway": null, + "standard_erc20_gateway": null, + "custom_erc20_gateway": null, + "erc721_gateway": null, + "erc1155_gateway": null, + "dai_gateway": "0x0000000000000000000000000000000000000000", + "usdc_gateway": "0x0000000000000000000000000000000000000000", + "lido_gateway": "0x0000000000000000000000000000000000000000", + "puffer_gateway": "0x0000000000000000000000000000000000000000" + }, + "scroll_messenger": null, + "message_queue": null + } + }, + "slack_webhook_config": { + "webhook_url": "http://localhost:1234", + "worker_count": 5, + "worker_buffer_size": 1000 + }, + "db_config": { + "driver_name": "postgres", + "dsn": null, + "maxOpenNum": 100, + "maxIdleNum": 20 + } +} diff --git a/docker/templates/config-contracts.toml b/docker/templates/config-contracts.toml new file mode 100644 index 00000000..b0681a0e --- /dev/null +++ b/docker/templates/config-contracts.toml @@ -0,0 +1,55 @@ +L1_WETH_ADDR = "" +L1_PROXY_ADMIN_ADDR = "" +L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L1_WHITELIST_ADDR = "" +L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR = "" +L2_GAS_PRICE_ORACLE_PROXY_ADDR = "" +L1_SCROLL_CHAIN_PROXY_ADDR = "" +L1_SCROLL_MESSENGER_PROXY_ADDR = "" +L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_ZKEVM_VERIFIER_V1_ADDR = "" +L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" +L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" +L1_MESSAGE_QUEUE_PROXY_ADDR = "" +L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L1_GATEWAY_ROUTER_PROXY_ADDR = "" +L1_ETH_GATEWAY_PROXY_ADDR = "" +L1_WETH_GATEWAY_PROXY_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L1_ERC721_GATEWAY_PROXY_ADDR = "" +L1_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_MESSAGE_QUEUE_ADDR = "" +L1_GAS_PRICE_ORACLE_ADDR = "" +L2_WHITELIST_ADDR = "" +L2_WETH_ADDR = "" +L2_TX_FEE_VAULT_ADDR = "" +L2_PROXY_ADMIN_ADDR = "" +L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" +L2_SCROLL_MESSENGER_PROXY_ADDR = "" +L2_ETH_GATEWAY_PROXY_ADDR = "" +L2_WETH_GATEWAY_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = "" +L2_ERC721_GATEWAY_PROXY_ADDR = "" +L2_ERC1155_GATEWAY_PROXY_ADDR = "" +L2_SCROLL_STANDARD_ERC20_ADDR = "" +L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = "" +L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = "" +L2_GATEWAY_ROUTER_PROXY_ADDR = "" +L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = "" +L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = "" diff --git a/docker/templates/coordinator-config.json b/docker/templates/coordinator-config.json new file mode 100644 index 00000000..f495637e --- /dev/null +++ b/docker/templates/coordinator-config.json @@ -0,0 +1,30 @@ +{ + "prover_manager": { + "provers_per_session": 1, + "session_attempts": 100, + "chunk_collection_time_sec": 3600, + "batch_collection_time_sec": 600, + "verifier": { + "fork_name": "bernoulli", + "mock_mode": false, + "params_path": "/verifier/params", + "assets_path": "/verifier/assets" + }, + "max_verifier_workers": 4, + "min_prover_version": "v4.3.41" + }, + "db": { + "driver_name": "postgres", + "dsn": null, + "maxOpenNum": 200, + "maxIdleNum": 20 + }, + "l2": { + "chain_id": null + }, + "auth": { + "secret": null, + "challenge_expire_duration_sec": 10, + "login_expire_duration_sec": 3600 + } +} \ No newline at end of file diff --git a/docker/templates/genesis.json b/docker/templates/genesis.json new file mode 100644 index 00000000..27f86850 --- /dev/null +++ b/docker/templates/genesis.json @@ -0,0 +1,48 @@ +{ + "config": { + "chainId": null, + "homesteadBlock": 0, + "eip150Block": 0, + "eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "eip155Block": 0, + "eip158Block": 0, + "byzantiumBlock": 0, + "constantinopleBlock": 0, + "petersburgBlock": 0, + "istanbulBlock": 0, + "berlinBlock": 0, + "londonBlock": 0, + "archimedesBlock": 0, + "shanghaiBlock": 0, + "bernoulliBlock": 0, + "curieBlock": 0, + "clique": { + "period": 3, + "epoch": 30000 + }, + "scroll": { + "useZktrie": true, + "maxTxPerBlock": null, + "maxTxPayloadBytesPerBlock": 122880, + "feeVaultAddress": null, + "l1Config": { + "l1ChainId": null, + "l1MessageQueueAddress": null, + "scrollChainAddress": null, + "numL1MessagesPerBlock": "10" + } + } + }, + "nonce": "0x0", + "timestamp": null, + "extraData": null, + "gasLimit": "10000000", + "difficulty": "0x1", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "coinbase": "0x0000000000000000000000000000000000000000", + "alloc": {}, + "number": "0x0", + "gasUsed": "0x0", + "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "baseFeePerGas": null +} \ No newline at end of file diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json new file mode 100644 index 00000000..d080925e --- /dev/null +++ b/docker/templates/rollup-config.json @@ -0,0 +1,87 @@ +{ + "l1_config": { + "confirmations": "0x0", + "endpoint": null, + "l1_message_queue_address": null, + "scroll_chain_address": null, + "start_height": 0, + "relayer_config": { + "gas_price_oracle_contract_address": null, + "sender_config": { + "endpoint": null, + "escalate_blocks": 100, + "escalate_multiple_num": 11, + "escalate_multiple_den": 10, + "max_gas_price": 10000000000000, + "tx_type": "LegacyTx", + "check_pending_time": 3, + "confirmations": "0x0" + }, + "gas_oracle_config": { + "min_gas_price": 0, + "gas_price_diff": 50000, + "l1_base_fee_weight": 0.086, + "l1_blob_base_fee_weight": 0.030 + }, + "gas_oracle_sender_private_key": null + } + }, + "l2_config": { + "confirmations": "0x0", + "endpoint": null, + "l2_message_queue_address": null, + "relayer_config": { + "rollup_contract_address": null, + "gas_price_oracle_contract_address": null, + "sender_config": { + "endpoint": null, + "escalate_blocks": 4, + "escalate_multiple_num": 12, + "escalate_multiple_den": 10, + "max_gas_price": 200000000000, + "max_blob_gas_price": 200000000000, + "tx_type": "DynamicFeeTx", + "check_pending_time": 10, + "confirmations": "0x0" + }, + "gas_oracle_config": { + "min_gas_price": 0, + "gas_price_diff": 50000 + }, + "chain_monitor": { + "enabled": true, + "timeout": 3, + "try_times": 5, + "base_url": "http://chain-monitorv2:8080" + }, + "enable_test_env_bypass_features": null, + "finalize_batch_without_proof_timeout_sec": null, + "gas_oracle_sender_private_key": null, + "commit_sender_private_key": null, + "finalize_sender_private_key": null, + "l1_commit_gas_limit_multiplier": 1.2 + }, + "chunk_proposer_config": { + "max_block_num_per_chunk": null, + "max_tx_num_per_chunk": null, + "max_l1_commit_gas_per_chunk": 5000000, + "max_l1_commit_calldata_size_per_chunk": 110000, + "chunk_timeout_sec": 2700, + "max_row_consumption_per_chunk": 1000000, + "gas_cost_increase_multiplier": 1.2 + }, + "batch_proposer_config": { + "max_chunk_num_per_batch": 15, + "max_l1_commit_gas_per_batch": 5000000, + "max_l1_commit_calldata_size_per_batch": 110000, + "batch_timeout_sec": 2700, + "gas_cost_increase_multiplier": 1.2 + } + }, + "db_config": { + "driver_name": "postgres", + "dsn": null, + "maxOpenNum": 50, + "maxIdleNum": 20 + } +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 741b5bbe..cc2cbc0a 100644 --- a/foundry.toml +++ b/foundry.toml @@ -7,15 +7,14 @@ libs = ["lib"] remappings = [] # a list of remappings libraries = [] # a list of deployed libraries to link against cache = true # whether to cache builds or not -force = true # whether to ignore the cache (clean build) -# evm_version = 'london' # the evm version (by hardfork name) +force = false # whether to ignore the cache (clean build) +evm_version = 'cancun' # the evm version (by hardfork name) solc_version = '0.8.24' # override for the solc version (setting this ignores `auto_detect_solc`) optimizer = true # enable or disable the solc optimizer optimizer_runs = 200 # the number of optimizer runs verbosity = 2 # the verbosity of tests ignored_error_codes = [] # a list of ignored solc error codes fuzz_runs = 256 # the number of fuzz runs for tests -ffi = false # whether to enable ffi or not sender = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `msg.sender` in tests tx_origin = '0x00a329c0648769a73afac7f9381e08fb43dbea72' # the address of `tx.origin` in tests initial_balance = '0xffffffffffffffffffffffff' # the initial balance of the test contract @@ -28,3 +27,14 @@ block_timestamp = 0 # the value of `bl block_difficulty = 0 # the value of `block.difficulty` in tests gas_reports = ["L2GasPriceOracle"] + +# remove bytecode hash for reliable deterministic addresses +bytecode_hash = 'none' + +# file system permissions +ffi = true + +fs_permissions = [ + { access='read', path='./docker' }, + { access='read-write', path='./volume' }, +] diff --git a/package.json b/package.json index a555a811..34152675 100644 --- a/package.json +++ b/package.json @@ -68,5 +68,6 @@ }, "engines": { "node": ">=10.4.0" - } + }, + "packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72" } diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol new file mode 100644 index 00000000..cf5b62a0 --- /dev/null +++ b/scripts/deterministic/Configuration.sol @@ -0,0 +1,216 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {Script} from "forge-std/Script.sol"; +import {VmSafe} from "forge-std/Vm.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {CONFIG_PATH, CONFIG_CONTRACTS_PATH, CONFIG_CONTRACTS_TEMPLATE_PATH} from "./Constants.sol"; + +/// @notice Configuration allows inheriting contracts to read the TOML configuration file. +abstract contract Configuration is Script { + using stdToml for string; + + /******************* + * State variables * + *******************/ + + string internal cfg; + string internal contractsCfg; + + /**************************** + * Configuration parameters * + ****************************/ + + // general + string internal L1_RPC_ENDPOINT; + string internal L2_RPC_ENDPOINT; + + uint64 internal CHAIN_ID_L1; + uint64 internal CHAIN_ID_L2; + + uint256 internal MAX_TX_IN_CHUNK; + uint256 internal MAX_BLOCK_IN_CHUNK; + uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; + + uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; + + bool internal TEST_ENV_MOCK_FINALIZE_ENABLED; + uint256 internal TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC; + + // accounts + uint256 internal DEPLOYER_PRIVATE_KEY; + uint256 internal L1_COMMIT_SENDER_PRIVATE_KEY; + uint256 internal L1_FINALIZE_SENDER_PRIVATE_KEY; + uint256 internal L1_GAS_ORACLE_SENDER_PRIVATE_KEY; + uint256 internal L2_GAS_ORACLE_SENDER_PRIVATE_KEY; + + address internal DEPLOYER_ADDR; + address internal L1_COMMIT_SENDER_ADDR; + address internal L1_FINALIZE_SENDER_ADDR; + address internal L1_GAS_ORACLE_SENDER_ADDR; + address internal L2_GAS_ORACLE_SENDER_ADDR; + + address internal OWNER_ADDR; + + address internal L2GETH_SIGNER_0_ADDRESS; + + // db + string internal SCROLL_DB_CONNECTION_STRING; + string internal CHAIN_MONITOR_DB_CONNECTION_STRING; + string internal BRIDGE_HISTORY_DB_CONNECTION_STRING; + + // genesis + uint256 internal L2_MAX_ETH_SUPPLY; + uint256 internal L2_DEPLOYER_INITIAL_BALANCE; + uint256 internal L2_SCROLL_MESSENGER_INITIAL_BALANCE; + + // contracts + string internal DEPLOYMENT_SALT; + + address internal L1_FEE_VAULT_ADDR; + address internal L1_PLONK_VERIFIER_ADDR; + + // coordinator + string internal COORDINATOR_JWT_SECRET_KEY; + + /*************** + * Constructor * + ***************/ + + constructor() { + if (!vm.exists(CONFIG_CONTRACTS_PATH)) { + string memory template = vm.readFile(CONFIG_CONTRACTS_TEMPLATE_PATH); + vm.writeFile(CONFIG_CONTRACTS_PATH, template); + } + + cfg = vm.readFile(CONFIG_PATH); + contractsCfg = vm.readFile(CONFIG_CONTRACTS_PATH); + + L1_RPC_ENDPOINT = cfg.readString(".general.L1_RPC_ENDPOINT"); + L2_RPC_ENDPOINT = cfg.readString(".general.L2_RPC_ENDPOINT"); + + CHAIN_ID_L1 = uint64(cfg.readUint(".general.CHAIN_ID_L1")); + CHAIN_ID_L2 = uint64(cfg.readUint(".general.CHAIN_ID_L2")); + + MAX_TX_IN_CHUNK = cfg.readUint(".general.MAX_TX_IN_CHUNK"); + MAX_BLOCK_IN_CHUNK = cfg.readUint(".general.MAX_BLOCK_IN_CHUNK"); + MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".general.MAX_L1_MESSAGE_GAS_LIMIT"); + + L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); + + TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".general.TEST_ENV_MOCK_FINALIZE_ENABLED"); + TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".general.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); + + DEPLOYER_PRIVATE_KEY = cfg.readUint(".accounts.DEPLOYER_PRIVATE_KEY"); + L1_COMMIT_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_COMMIT_SENDER_PRIVATE_KEY"); + L1_FINALIZE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_FINALIZE_SENDER_PRIVATE_KEY"); + L1_GAS_ORACLE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_GAS_ORACLE_SENDER_PRIVATE_KEY"); + L2_GAS_ORACLE_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L2_GAS_ORACLE_SENDER_PRIVATE_KEY"); + + DEPLOYER_ADDR = cfg.readAddress(".accounts.DEPLOYER_ADDR"); + L1_COMMIT_SENDER_ADDR = cfg.readAddress(".accounts.L1_COMMIT_SENDER_ADDR"); + L1_FINALIZE_SENDER_ADDR = cfg.readAddress(".accounts.L1_FINALIZE_SENDER_ADDR"); + L1_GAS_ORACLE_SENDER_ADDR = cfg.readAddress(".accounts.L1_GAS_ORACLE_SENDER_ADDR"); + L2_GAS_ORACLE_SENDER_ADDR = cfg.readAddress(".accounts.L2_GAS_ORACLE_SENDER_ADDR"); + + OWNER_ADDR = cfg.readAddress(".accounts.OWNER_ADDR"); + + L2GETH_SIGNER_0_ADDRESS = cfg.readAddress(".accounts.L2GETH_SIGNER_0_ADDRESS"); + + SCROLL_DB_CONNECTION_STRING = cfg.readString(".db.SCROLL_DB_CONNECTION_STRING"); + CHAIN_MONITOR_DB_CONNECTION_STRING = cfg.readString(".db.CHAIN_MONITOR_DB_CONNECTION_STRING"); + BRIDGE_HISTORY_DB_CONNECTION_STRING = cfg.readString(".db.BRIDGE_HISTORY_DB_CONNECTION_STRING"); + + L2_MAX_ETH_SUPPLY = cfg.readUint(".genesis.L2_MAX_ETH_SUPPLY"); + L2_DEPLOYER_INITIAL_BALANCE = cfg.readUint(".genesis.L2_DEPLOYER_INITIAL_BALANCE"); + L2_SCROLL_MESSENGER_INITIAL_BALANCE = L2_MAX_ETH_SUPPLY - L2_DEPLOYER_INITIAL_BALANCE; + + DEPLOYMENT_SALT = cfg.readString(".contracts.DEPLOYMENT_SALT"); + + L1_FEE_VAULT_ADDR = cfg.readAddress(".contracts.L1_FEE_VAULT_ADDR"); + L1_PLONK_VERIFIER_ADDR = cfg.readAddress(".contracts.L1_PLONK_VERIFIER_ADDR"); + + COORDINATOR_JWT_SECRET_KEY = cfg.readString(".coordinator.COORDINATOR_JWT_SECRET_KEY"); + + runSanityCheck(); + } + + /********************** + * Internal interface * + **********************/ + + /// @dev Ensure that `addr` is not the zero address. + /// This helps catch bugs arising from incorrect deployment order. + function notnull(address addr) internal pure returns (address) { + require(addr != address(0), "null address"); + return addr; + } + + function tryGetOverride(string memory name) internal returns (address) { + address addr; + string memory key = string(abi.encodePacked(".contracts.overrides.", name)); + + if (!vm.keyExistsToml(cfg, key)) { + return address(0); + } + + addr = cfg.readAddress(key); + + if (addr.code.length == 0) { + (VmSafe.CallerMode callerMode, , ) = vm.readCallers(); + + // if we're ready to start broadcasting transactions, then we + // must ensure that the override contract has been deployed. + if (callerMode == VmSafe.CallerMode.Broadcast || callerMode == VmSafe.CallerMode.RecurrentBroadcast) { + revert( + string( + abi.encodePacked( + "[ERROR] override ", + name, + " = ", + vm.toString(addr), + " not deployed in broadcast mode" + ) + ) + ); + } + } + + return addr; + } + + /********************* + * Private functions * + *********************/ + + function runSanityCheck() private view { + verifyAccount("DEPLOYER", DEPLOYER_PRIVATE_KEY, DEPLOYER_ADDR); + verifyAccount("L1_COMMIT_SENDER", L1_COMMIT_SENDER_PRIVATE_KEY, L1_COMMIT_SENDER_ADDR); + verifyAccount("L1_FINALIZE_SENDER", L1_FINALIZE_SENDER_PRIVATE_KEY, L1_FINALIZE_SENDER_ADDR); + verifyAccount("L1_GAS_ORACLE_SENDER", L1_GAS_ORACLE_SENDER_PRIVATE_KEY, L1_GAS_ORACLE_SENDER_ADDR); + verifyAccount("L2_GAS_ORACLE_SENDER", L2_GAS_ORACLE_SENDER_PRIVATE_KEY, L2_GAS_ORACLE_SENDER_ADDR); + } + + function verifyAccount( + string memory name, + uint256 privateKey, + address addr + ) private pure { + if (vm.addr(privateKey) != addr) { + revert( + string( + abi.encodePacked( + "[ERROR] ", + name, + "_ADDR (", + vm.toString(addr), + ") does not match ", + name, + "_PRIVATE_KEY" + ) + ) + ); + } + } +} diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol new file mode 100644 index 00000000..ff02d60c --- /dev/null +++ b/scripts/deterministic/Constants.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +/// @dev The default deterministic deployment salt prefix. +string constant DEFAULT_DEPLOYMENT_SALT = "ScrollStack"; + +/// @dev The address of DeterministicDeploymentProxy. +/// See https://github.com/Arachnid/deterministic-deployment-proxy. +address constant DETERMINISTIC_DEPLOYMENT_PROXY_ADDR = 0x4e59b44847b379578588920cA78FbF26c0B4956C; + +/// @dev The default minimum withdraw amount configured on L2TxFeeVault. +uint256 constant FEE_VAULT_MIN_WITHDRAW_AMOUNT = 1 ether; + +// template files +string constant CONFIG_CONTRACTS_TEMPLATE_PATH = "./docker/templates/config-contracts.toml"; +string constant GENESIS_JSON_TEMPLATE_PATH = "./docker/templates/genesis.json"; +string constant ROLLUP_CONFIG_TEMPLATE_PATH = "./docker/templates/rollup-config.json"; +string constant COORDINATOR_CONFIG_TEMPLATE_PATH = "./docker/templates/coordinator-config.json"; +string constant CHAIN_MONITOR_CONFIG_TEMPLATE_PATH = "./docker/templates/chain-monitor-config.json"; +string constant BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH = "./docker/templates/bridge-history-config.json"; +string constant BALANCE_CHECKER_CONFIG_TEMPLATE_PATH = "./docker/templates/balance-checker-config.json"; + +// input files +string constant CONFIG_PATH = "./volume/config.toml"; + +// output files +string constant CONFIG_CONTRACTS_PATH = "./volume/config-contracts.toml"; +string constant GENESIS_ALLOC_JSON_PATH = "./volume/__genesis-alloc.json"; +string constant GENESIS_JSON_PATH = "./volume/genesis.json"; +string constant ROLLUP_CONFIG_PATH = "./volume/rollup-config.json"; +string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.json"; +string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json"; +string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; +string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; +string constant FRONTEND_ENV_PATH = "./volume/.env.frontend"; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol new file mode 100644 index 00000000..3aa72463 --- /dev/null +++ b/scripts/deterministic/DeployScroll.s.sol @@ -0,0 +1,1272 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; + +import {EmptyContract} from "../../src/misc/EmptyContract.sol"; + +import {EnforcedTxGateway} from "../../src/L1/gateways/EnforcedTxGateway.sol"; +import {L1CustomERC20Gateway} from "../../src/L1/gateways/L1CustomERC20Gateway.sol"; +import {L1ERC1155Gateway} from "../../src/L1/gateways/L1ERC1155Gateway.sol"; +import {L1ERC721Gateway} from "../../src/L1/gateways/L1ERC721Gateway.sol"; +import {L1ETHGateway} from "../../src/L1/gateways/L1ETHGateway.sol"; +import {L1GatewayRouter} from "../../src/L1/gateways/L1GatewayRouter.sol"; +import {L1MessageQueueWithGasPriceOracle} from "../../src/L1/rollup/L1MessageQueueWithGasPriceOracle.sol"; +import {L1ScrollMessenger} from "../../src/L1/L1ScrollMessenger.sol"; +import {L1StandardERC20Gateway} from "../../src/L1/gateways/L1StandardERC20Gateway.sol"; +import {L1WETHGateway} from "../../src/L1/gateways/L1WETHGateway.sol"; +import {L2GasPriceOracle} from "../../src/L1/rollup/L2GasPriceOracle.sol"; +import {MultipleVersionRollupVerifier} from "../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; +import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol"; +import {ZkEvmVerifierV1} from "../../src/libraries/verifier/ZkEvmVerifierV1.sol"; + +import {L2CustomERC20Gateway} from "../../src/L2/gateways/L2CustomERC20Gateway.sol"; +import {L2ERC1155Gateway} from "../../src/L2/gateways/L2ERC1155Gateway.sol"; +import {L2ERC721Gateway} from "../../src/L2/gateways/L2ERC721Gateway.sol"; +import {L2ETHGateway} from "../../src/L2/gateways/L2ETHGateway.sol"; +import {L2GatewayRouter} from "../../src/L2/gateways/L2GatewayRouter.sol"; +import {L2ScrollMessenger} from "../../src/L2/L2ScrollMessenger.sol"; +import {L2StandardERC20Gateway} from "../../src/L2/gateways/L2StandardERC20Gateway.sol"; +import {L2WETHGateway} from "../../src/L2/gateways/L2WETHGateway.sol"; +import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; +import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; +import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; +import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; +import {ScrollStandardERC20} from "../../src/libraries/token/ScrollStandardERC20.sol"; +import {ScrollStandardERC20Factory} from "../../src/libraries/token/ScrollStandardERC20Factory.sol"; + +import {ScrollChainMockFinalize} from "../../src/mocks/ScrollChainMockFinalize.sol"; + +import "./Constants.sol"; +import "./Configuration.sol"; +import "./DeterministicDeployment.sol"; + +/// @dev The minimum deployer account balance. +uint256 constant MINIMUM_DEPLOYER_BALANCE = 0.1 ether; + +contract ProxyAdminSetOwner is ProxyAdmin { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner) { + _transferOwnership(owner); + } +} + +contract MultipleVersionRollupVerifierSetOwner is MultipleVersionRollupVerifier { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor( + address owner, + uint256[] memory _versions, + address[] memory _verifiers + ) MultipleVersionRollupVerifier(_versions, _verifiers) { + _transferOwnership(owner); + } +} + +contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner, address _implementation) ScrollStandardERC20Factory(_implementation) { + _transferOwnership(owner); + } +} + +contract DeployScroll is DeterminsticDeployment { + /********* + * Types * + *********/ + + enum Layer { + None, + L1, + L2 + } + + /******************* + * State variables * + *******************/ + + // general configurations + Layer private broadcastLayer = Layer.None; + + /*********************** + * Contracts to deploy * + ***********************/ + + // L1 addresses + address internal L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR; + address internal L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ENFORCED_TX_GATEWAY_PROXY_ADDR; + address internal L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ERC1155_GATEWAY_PROXY_ADDR; + address internal L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ERC721_GATEWAY_PROXY_ADDR; + address internal L1_ETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_ETH_GATEWAY_PROXY_ADDR; + address internal L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR; + address internal L1_GATEWAY_ROUTER_PROXY_ADDR; + address internal L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR; + address internal L1_MESSAGE_QUEUE_PROXY_ADDR; + address internal L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR; + address internal L1_PROXY_ADMIN_ADDR; + address internal L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR; + address internal L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR; + address internal L1_SCROLL_CHAIN_PROXY_ADDR; + address internal L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR; + address internal L1_SCROLL_MESSENGER_PROXY_ADDR; + address internal L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR; + address internal L1_WETH_ADDR; + address internal L1_WETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_WETH_GATEWAY_PROXY_ADDR; + address internal L1_WHITELIST_ADDR; + address internal L1_ZKEVM_VERIFIER_V1_ADDR; + address internal L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR; + address internal L2_GAS_PRICE_ORACLE_PROXY_ADDR; + + // L2 addresses + address internal L1_GAS_PRICE_ORACLE_ADDR; + address internal L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR; + address internal L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ERC1155_GATEWAY_PROXY_ADDR; + address internal L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ERC721_GATEWAY_PROXY_ADDR; + address internal L2_ETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_ETH_GATEWAY_PROXY_ADDR; + address internal L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR; + address internal L2_GATEWAY_ROUTER_PROXY_ADDR; + address internal L2_MESSAGE_QUEUE_ADDR; + address internal L2_PROXY_ADMIN_ADDR; + address internal L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR; + address internal L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR; + address internal L2_SCROLL_MESSENGER_PROXY_ADDR; + address internal L2_SCROLL_STANDARD_ERC20_ADDR; + address internal L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR; + address internal L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR; + address internal L2_TX_FEE_VAULT_ADDR; + address internal L2_WETH_ADDR; + address internal L2_WETH_GATEWAY_IMPLEMENTATION_ADDR; + address internal L2_WETH_GATEWAY_PROXY_ADDR; + address internal L2_WHITELIST_ADDR; + + /************* + * Utilities * + *************/ + + /// @dev Only broadcast code block if we run the script on the specified layer. + modifier broadcast(Layer layer) { + if (broadcastLayer == layer) { + vm.startBroadcast(DEPLOYER_PRIVATE_KEY); + } else { + // make sure we use the correct sender in simulation + vm.startPrank(DEPLOYER_ADDR); + } + + _; + + if (broadcastLayer == layer) { + vm.stopBroadcast(); + } else { + vm.stopPrank(); + } + } + + /// @dev Only execute block if we run the script on the specified layer. + modifier only(Layer layer) { + if (broadcastLayer != layer) { + return; + } + _; + } + + /*************** + * Entry point * + ***************/ + + function run(string memory layer, string memory scriptMode) public { + broadcastLayer = parseLayer(layer); + setScriptMode(scriptMode); + + checkDeployerBalance(); + deployAllContracts(); + initializeL1Contracts(); + initializeL2Contracts(); + } + + /********************** + * Internal interface * + **********************/ + + function predictAllContracts() internal { + skipDeployment(); + deployAllContracts(); + } + + /********************* + * Private functions * + *********************/ + + function parseLayer(string memory raw) private pure returns (Layer) { + if (keccak256(bytes(raw)) == keccak256(bytes("L1"))) { + return Layer.L1; + } else if (keccak256(bytes(raw)) == keccak256(bytes("L2"))) { + return Layer.L2; + } else { + return Layer.None; + } + } + + function checkDeployerBalance() private view { + // ignore balance during simulation + if (broadcastLayer == Layer.None) { + return; + } + + if (DEPLOYER_ADDR.balance < MINIMUM_DEPLOYER_BALANCE) { + revert( + string( + abi.encodePacked( + "[ERROR] insufficient funds on deployer account (", + vm.toString(DEPLOYER_ADDR), + ")" + ) + ) + ); + } + } + + function deployAllContracts() private { + deployL1Contracts1stPass(); + deployL2Contracts1stPass(); + deployL1Contracts2ndPass(); + deployL2Contracts2ndPass(); + } + + // @notice deployL1Contracts1stPass deploys L1 contracts whose initialization does not depend on any L2 addresses. + function deployL1Contracts1stPass() private broadcast(Layer.L1) { + deployL1Weth(); + deployL1ProxyAdmin(); + deployL1PlaceHolder(); + deployL1Whitelist(); + deployL2GasPriceOracle(); + deployL1ScrollChainProxy(); + deployL1ScrollMessengerProxy(); + deployL1EnforcedTxGateway(); + deployL1ZkEvmVerifierV1(); + deployL1MultipleVersionRollupVerifier(); + deployL1MessageQueue(); + deployL1ScrollChain(); + deployL1GatewayRouter(); + deployL1ETHGatewayProxy(); + deployL1WETHGatewayProxy(); + deployL1StandardERC20GatewayProxy(); + deployL1CustomERC20GatewayProxy(); + deployL1ERC721GatewayProxy(); + deployL1ERC1155GatewayProxy(); + } + + // @notice deployL2Contracts1stPass deploys L2 contracts whose initialization does not depend on any L1 addresses. + function deployL2Contracts1stPass() private broadcast(Layer.L2) { + deployL2MessageQueue(); + deployL1GasPriceOracle(); + deployL2Whitelist(); + deployL2Weth(); + deployTxFeeVault(); + deployL2ProxyAdmin(); + deployL2PlaceHolder(); + deployL2ScrollMessengerProxy(); + deployL2ETHGatewayProxy(); + deployL2WETHGatewayProxy(); + deployL2StandardERC20GatewayProxy(); + deployL2CustomERC20GatewayProxy(); + deployL2ERC721GatewayProxy(); + deployL2ERC1155GatewayProxy(); + deployScrollStandardERC20Factory(); + } + + // @notice deployL1Contracts2ndPass deploys L1 contracts whose initialization depends on some L2 addresses. + function deployL1Contracts2ndPass() private broadcast(Layer.L1) { + deployL1ScrollMessenger(); + deployL1StandardERC20Gateway(); + deployL1ETHGateway(); + deployL1WETHGateway(); + deployL1CustomERC20Gateway(); + deployL1ERC721Gateway(); + deployL1ERC1155Gateway(); + } + + // @notice deployL2Contracts2ndPass deploys L2 contracts whose initialization depends on some L1 addresses. + function deployL2Contracts2ndPass() private broadcast(Layer.L2) { + // upgradable + deployL2ScrollMessenger(); + deployL2GatewayRouter(); + deployL2StandardERC20Gateway(); + deployL2ETHGateway(); + deployL2WETHGateway(); + deployL2CustomERC20Gateway(); + deployL2ERC721Gateway(); + deployL2ERC1155Gateway(); + } + + // @notice initializeL1Contracts initializes contracts deployed on L1. + function initializeL1Contracts() private broadcast(Layer.L1) only(Layer.L1) { + initializeScrollChain(); + initializeL2GasPriceOracle(); + initializeL1MessageQueue(); + initializeL1ScrollMessenger(); + initializeEnforcedTxGateway(); + initializeL1GatewayRouter(); + initializeL1CustomERC20Gateway(); + initializeL1ERC1155Gateway(); + initializeL1ERC721Gateway(); + initializeL1ETHGateway(); + initializeL1StandardERC20Gateway(); + initializeL1WETHGateway(); + initializeL1Whitelist(); + + transferL1ContractOwnership(); + } + + // @notice initializeL2Contracts initializes contracts deployed on L2. + function initializeL2Contracts() private broadcast(Layer.L2) only(Layer.L2) { + initializeL2MessageQueue(); + initializeL2TxFeeVault(); + initializeL1GasPriceOracle(); + initializeL2ScrollMessenger(); + initializeL2GatewayRouter(); + initializeL2CustomERC20Gateway(); + initializeL2ERC1155Gateway(); + initializeL2ERC721Gateway(); + initializeL2ETHGateway(); + initializeL2StandardERC20Gateway(); + initializeL2WETHGateway(); + initializeScrollStandardERC20Factory(); + initializeL2Whitelist(); + + transferL2ContractOwnership(); + } + + /*************************** + * L1: 1st pass deployment * + ***************************/ + + function deployL1Weth() private { + L1_WETH_ADDR = deploy("L1_WETH", type(WrappedEther).creationCode); + } + + function deployL1ProxyAdmin() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L1_PROXY_ADMIN_ADDR = deploy("L1_PROXY_ADMIN", type(ProxyAdminSetOwner).creationCode, args); + } + + function deployL1PlaceHolder() private { + L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = deploy( + "L1_PROXY_IMPLEMENTATION_PLACEHOLDER", + type(EmptyContract).creationCode + ); + } + + function deployL1Whitelist() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L1_WHITELIST_ADDR = deploy("L1_WHITELIST", type(Whitelist).creationCode, args); + } + + function deployL2GasPriceOracle() private { + L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR = deploy( + "L2_GAS_PRICE_ORACLE_IMPLEMENTATION", + type(L2GasPriceOracle).creationCode + ); + + bytes memory args = abi.encode( + notnull(L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_GAS_PRICE_ORACLE_PROXY_ADDR = deploy( + "L2_GAS_PRICE_ORACLE_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ScrollChainProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_SCROLL_CHAIN_PROXY_ADDR = deploy( + "L1_SCROLL_CHAIN_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ScrollMessengerProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_SCROLL_MESSENGER_PROXY_ADDR = deploy( + "L1_SCROLL_MESSENGER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1EnforcedTxGateway() private { + L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION", + type(EnforcedTxGateway).creationCode + ); + + bytes memory args = abi.encode( + notnull(L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = deploy( + "L1_ENFORCED_TX_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ZkEvmVerifierV1() private { + bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR)); + L1_ZKEVM_VERIFIER_V1_ADDR = deploy("L1_ZKEVM_VERIFIER_V1", type(ZkEvmVerifierV1).creationCode, args); + } + + function deployL1MultipleVersionRollupVerifier() private { + uint256[] memory _versions = new uint256[](1); + address[] memory _verifiers = new address[](1); + _versions[0] = 1; + _verifiers[0] = notnull(L1_ZKEVM_VERIFIER_V1_ADDR); + + bytes memory args = abi.encode(DEPLOYER_ADDR, _versions, _verifiers); + + L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = deploy( + "L1_MULTIPLE_VERSION_ROLLUP_VERIFIER", + type(MultipleVersionRollupVerifierSetOwner).creationCode, + args + ); + } + + function deployL1MessageQueue() private { + bytes memory args = abi.encode( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) + ); + + L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = deploy( + "L1_MESSAGE_QUEUE_IMPLEMENTATION", + type(L1MessageQueueWithGasPriceOracle).creationCode, + args + ); + + bytes memory args2 = abi.encode( + notnull(L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_MESSAGE_QUEUE_PROXY_ADDR = deploy( + "L1_MESSAGE_QUEUE_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args2 + ); + } + + function deployL1ScrollChain() private { + bytes memory args = abi.encode( + CHAIN_ID_L2, + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR) + ); + + bytes memory creationCode = type(ScrollChain).creationCode; + + if (TEST_ENV_MOCK_FINALIZE_ENABLED) { + creationCode = type(ScrollChainMockFinalize).creationCode; + } + + L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR = deploy("L1_SCROLL_CHAIN_IMPLEMENTATION", creationCode, args); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_SCROLL_CHAIN_PROXY_ADDR, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + } + + function deployL1GatewayRouter() private { + L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = deploy( + "L1_GATEWAY_ROUTER_IMPLEMENTATION", + type(L1GatewayRouter).creationCode + ); + + bytes memory args = abi.encode( + notnull(L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_GATEWAY_ROUTER_PROXY_ADDR = deploy( + "L1_GATEWAY_ROUTER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ETH_GATEWAY_PROXY_ADDR = deploy( + "L1_ETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1WETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_WETH_GATEWAY_PROXY_ADDR = deploy( + "L1_WETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1StandardERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L1_STANDARD_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1CustomERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L1_CUSTOM_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ERC721GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ERC721_GATEWAY_PROXY_ADDR = deploy( + "L1_ERC721_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL1ERC1155GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_ERC1155_GATEWAY_PROXY_ADDR = deploy( + "L1_ERC1155_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + /*************************** + * L2: 1st pass deployment * + ***************************/ + + function deployL2MessageQueue() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_MESSAGE_QUEUE_ADDR = deploy("L2_MESSAGE_QUEUE", type(L2MessageQueue).creationCode, args); + } + + function deployL1GasPriceOracle() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L1_GAS_PRICE_ORACLE_ADDR = deploy("L1_GAS_PRICE_ORACLE", type(L1GasPriceOracle).creationCode, args); + } + + function deployL2Whitelist() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_WHITELIST_ADDR = deploy("L2_WHITELIST", type(Whitelist).creationCode, args); + } + + function deployL2Weth() private { + L2_WETH_ADDR = deploy("L2_WETH", type(WrappedEther).creationCode); + } + + function deployTxFeeVault() private { + bytes memory args = abi.encode(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVault).creationCode, args); + } + + function deployL2ProxyAdmin() private { + bytes memory args = abi.encode(DEPLOYER_ADDR); + L2_PROXY_ADMIN_ADDR = deploy("L2_PROXY_ADMIN", type(ProxyAdminSetOwner).creationCode, args); + } + + function deployL2PlaceHolder() private { + L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = deploy( + "L2_PROXY_IMPLEMENTATION_PLACEHOLDER", + type(EmptyContract).creationCode + ); + } + + function deployL2ScrollMessengerProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_SCROLL_MESSENGER_PROXY_ADDR = deploy( + "L2_SCROLL_MESSENGER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2StandardERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L2_STANDARD_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ETH_GATEWAY_PROXY_ADDR = deploy( + "L2_ETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2WETHGatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_WETH_GATEWAY_PROXY_ADDR = deploy( + "L2_WETH_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2CustomERC20GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = deploy( + "L2_CUSTOM_ERC20_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ERC721GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ERC721_GATEWAY_PROXY_ADDR = deploy( + "L2_ERC721_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2ERC1155GatewayProxy() private { + bytes memory args = abi.encode( + notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_ERC1155_GATEWAY_PROXY_ADDR = deploy( + "L2_ERC1155_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployScrollStandardERC20Factory() private { + L2_SCROLL_STANDARD_ERC20_ADDR = deploy("L2_SCROLL_STANDARD_ERC20", type(ScrollStandardERC20).creationCode); + bytes memory args = abi.encode(DEPLOYER_ADDR, notnull(L2_SCROLL_STANDARD_ERC20_ADDR)); + + L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR = deploy( + "L2_SCROLL_STANDARD_ERC20_FACTORY", + type(ScrollStandardERC20FactorySetOwner).creationCode, + args + ); + } + + /*************************** + * L1: 2nd pass deployment * + ***************************/ + + function deployL1ScrollMessenger() private { + bytes memory args = abi.encode( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) + ); + + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L1_SCROLL_MESSENGER_IMPLEMENTATION", + type(L1ScrollMessenger).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + } + + function deployL1ETHGateway() private { + bytes memory args = abi.encode( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_ETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ETH_GATEWAY_IMPLEMENTATION", + type(L1ETHGateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ETH_GATEWAY_PROXY_ADDR, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1WETHGateway() private { + bytes memory args = abi.encode( + notnull(L1_WETH_ADDR), + notnull(L2_WETH_ADDR), + notnull(L2_WETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_WETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_WETH_GATEWAY_IMPLEMENTATION", + type(L1WETHGateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_WETH_GATEWAY_PROXY_ADDR, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1StandardERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + + L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION", + type(L1StandardERC20Gateway).creationCode, + args + ); + + upgrade( + L1_PROXY_ADMIN_ADDR, + L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR, + L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR + ); + } + + function deployL1CustomERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION", + type(L1CustomERC20Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1ERC721Gateway() private { + bytes memory args = abi.encode(notnull(L2_ERC721_GATEWAY_PROXY_ADDR), notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + + L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ERC721_GATEWAY_IMPLEMENTATION", + type(L1ERC721Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC721_GATEWAY_PROXY_ADDR, L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1ERC1155Gateway() private { + bytes memory args = abi.encode(notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + + L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_ERC1155_GATEWAY_IMPLEMENTATION", + type(L1ERC1155Gateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC1155_GATEWAY_PROXY_ADDR, L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + } + + /*************************** + * L2: 2nd pass deployment * + ***************************/ + + function deployL2ScrollMessenger() private { + bytes memory args = abi.encode(notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), notnull(L2_MESSAGE_QUEUE_ADDR)); + + L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L2_SCROLL_MESSENGER_IMPLEMENTATION", + type(L2ScrollMessenger).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_SCROLL_MESSENGER_PROXY_ADDR, L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + } + + function deployL2GatewayRouter() private { + L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR = deploy( + "L2_GATEWAY_ROUTER_IMPLEMENTATION", + type(L2GatewayRouter).creationCode + ); + + bytes memory args = abi.encode( + notnull(L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR), + notnull(L2_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L2_GATEWAY_ROUTER_PROXY_ADDR = deploy( + "L2_GATEWAY_ROUTER_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + + function deployL2StandardERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + + L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION", + type(L2StandardERC20Gateway).creationCode, + args + ); + + upgrade( + L2_PROXY_ADMIN_ADDR, + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR, + L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR + ); + } + + function deployL2ETHGateway() private { + bytes memory args = abi.encode( + notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_ETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ETH_GATEWAY_IMPLEMENTATION", + type(L2ETHGateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ETH_GATEWAY_PROXY_ADDR, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2WETHGateway() private { + bytes memory args = abi.encode( + notnull(L2_WETH_ADDR), + notnull(L1_WETH_ADDR), + notnull(L1_WETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_WETH_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_WETH_GATEWAY_IMPLEMENTATION", + type(L2WETHGateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_WETH_GATEWAY_PROXY_ADDR, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2CustomERC20Gateway() private { + bytes memory args = abi.encode( + notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION", + type(L2CustomERC20Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2ERC721Gateway() private { + bytes memory args = abi.encode(notnull(L1_ERC721_GATEWAY_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + + L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ERC721_GATEWAY_IMPLEMENTATION", + type(L2ERC721Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ERC721_GATEWAY_PROXY_ADDR, L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL2ERC1155Gateway() private { + bytes memory args = abi.encode(notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + + L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L2_ERC1155_GATEWAY_IMPLEMENTATION", + type(L2ERC1155Gateway).creationCode, + args + ); + + upgrade(L2_PROXY_ADMIN_ADDR, L2_ERC1155_GATEWAY_PROXY_ADDR, L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + } + + /********************** + * L1: initialization * + **********************/ + + function initializeScrollChain() private { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).initialize( + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR), + MAX_TX_IN_CHUNK + ); + + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDR); + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDR); + } + + function initializeL2GasPriceOracle() private { + L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).initialize( + 21000, // _txGas + 53000, // _txGasContractCreation + 4, // _zeroGas + 16 // _nonZeroGas + ); + + L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR); + } + + function initializeL1MessageQueue() private { + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initialize( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR), + notnull(L2_GAS_PRICE_ORACLE_PROXY_ADDR), + MAX_L1_MESSAGE_GAS_LIMIT + ); + + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); + } + + function initializeL1ScrollMessenger() private { + L1ScrollMessenger(payable(L1_SCROLL_MESSENGER_PROXY_ADDR)).initialize( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_FEE_VAULT_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) + ); + } + + function initializeEnforcedTxGateway() private { + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize( + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), + notnull(L1_FEE_VAULT_ADDR) + ); + + // disable gateway + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true); + } + + function initializeL1GatewayRouter() private { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + + function initializeL1CustomERC20Gateway() private { + L1CustomERC20Gateway(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL1ERC1155Gateway() private { + L1ERC1155Gateway(L1_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL1ERC721Gateway() private { + L1ERC721Gateway(L1_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC721_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL1ETHGateway() private { + L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL1StandardERC20Gateway() private { + L1StandardERC20Gateway(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } + + function initializeL1WETHGateway() private { + L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L2_WETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + // set WETH gateway in router + { + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L1_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L1_WETH_GATEWAY_PROXY_ADDR); + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } + } + + function initializeL1Whitelist() private { + address[] memory accounts = new address[](1); + accounts[0] = L1_GAS_ORACLE_SENDER_ADDR; + Whitelist(L1_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } + + function transferL1ContractOwnership() private { + if (DEPLOYER_ADDR == OWNER_ADDR) { + return; + } + + Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L1_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); + } + + /********************** + * L2: initialization * + **********************/ + + function initializeL2MessageQueue() private { + L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).initialize(notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + } + + function initializeL2TxFeeVault() private { + L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).updateMessenger(notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + } + + function initializeL1GasPriceOracle() private { + L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).updateWhitelist(notnull(L2_WHITELIST_ADDR)); + } + + function initializeL2ScrollMessenger() private { + L2ScrollMessenger(payable(L2_SCROLL_MESSENGER_PROXY_ADDR)).initialize(notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + } + + function initializeL2GatewayRouter() private { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + + function initializeL2CustomERC20Gateway() private { + L2CustomERC20Gateway(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL2ERC1155Gateway() private { + L2ERC1155Gateway(L2_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL2ERC721Gateway() private { + L2ERC721Gateway(L2_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC721_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL2ETHGateway() private { + L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } + + function initializeL2StandardERC20Gateway() private { + L2StandardERC20Gateway(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } + + function initializeL2WETHGateway() private { + L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L1_WETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + + // set WETH gateway in router + { + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L2_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L2_WETH_GATEWAY_PROXY_ADDR); + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } + } + + function initializeScrollStandardERC20Factory() private { + ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).transferOwnership( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } + + function initializeL2Whitelist() private { + address[] memory accounts = new address[](1); + accounts[0] = L2_GAS_ORACLE_SENDER_ADDR; + Whitelist(L2_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } + + function transferL2ContractOwnership() private { + if (DEPLOYER_ADDR == OWNER_ADDR) { + return; + } + + Ownable(L1_GAS_PRICE_ORACLE_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_MESSAGE_QUEUE_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_TX_FEE_VAULT_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); + Ownable(L2_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); + } +} diff --git a/scripts/deterministic/DeterministicDeployment.sol b/scripts/deterministic/DeterministicDeployment.sol new file mode 100644 index 00000000..4bc8d117 --- /dev/null +++ b/scripts/deterministic/DeterministicDeployment.sol @@ -0,0 +1,226 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {console} from "forge-std/Script.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {CONFIG_CONTRACTS_PATH, DEFAULT_DEPLOYMENT_SALT, DETERMINISTIC_DEPLOYMENT_PROXY_ADDR} from "./Constants.sol"; +import {Configuration} from "./Configuration.sol"; + +/// @notice DeterminsticDeployment provides utilities for deterministic contract deployments. +abstract contract DeterminsticDeployment is Configuration { + using stdToml for string; + + /********* + * Types * + *********/ + + enum ScriptMode { + None, + LogAddresses, + WriteConfig, + VerifyConfig + } + + /******************* + * State variables * + *******************/ + + ScriptMode private mode; + string private saltPrefix; + bool private skipDeploy; + + /*************** + * Constructor * + ***************/ + + constructor() { + mode = ScriptMode.None; + skipDeploy = false; + + // salt prefix used for deterministic deployments + if (bytes(DEPLOYMENT_SALT).length != 0) { + saltPrefix = DEPLOYMENT_SALT; + } else { + saltPrefix = DEFAULT_DEPLOYMENT_SALT; + } + + // sanity check: make sure DeterministicDeploymentProxy exists + if (DETERMINISTIC_DEPLOYMENT_PROXY_ADDR.code.length == 0) { + revert( + string( + abi.encodePacked( + "[ERROR] DeterministicDeploymentProxy (", + vm.toString(DETERMINISTIC_DEPLOYMENT_PROXY_ADDR), + ") is not available" + ) + ) + ); + } + } + + /********************** + * Internal interface * + **********************/ + + function setScriptMode(ScriptMode scriptMode) internal { + mode = scriptMode; + } + + function setScriptMode(string memory scriptMode) internal { + if (keccak256(bytes(scriptMode)) == keccak256(bytes("log-addresses"))) { + mode = ScriptMode.WriteConfig; + } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("write-config"))) { + mode = ScriptMode.WriteConfig; + } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("verify-config"))) { + mode = ScriptMode.VerifyConfig; + } else { + mode = ScriptMode.None; + } + } + + function skipDeployment() internal { + skipDeploy = true; + } + + function deploy(string memory name, bytes memory codeWithArgs) internal returns (address) { + return _deploy(name, codeWithArgs); + } + + function deploy( + string memory name, + bytes memory code, + bytes memory args + ) internal returns (address) { + return _deploy(name, abi.encodePacked(code, args)); + } + + function predict(string memory name, bytes memory codeWithArgs) internal view returns (address) { + return _predict(name, codeWithArgs); + } + + function predict( + string memory name, + bytes memory code, + bytes memory args + ) internal view returns (address) { + return _predict(name, abi.encodePacked(code, args)); + } + + function upgrade( + address proxyAdminAddr, + address proxyAddr, + address implAddr + ) internal { + if (!skipDeploy) { + ProxyAdmin(notnull(proxyAdminAddr)).upgrade( + ITransparentUpgradeableProxy(notnull(proxyAddr)), + notnull(implAddr) + ); + } + } + + /********************* + * Private functions * + *********************/ + + function _getSalt(string memory name) internal view returns (bytes32) { + return keccak256(abi.encodePacked(saltPrefix, name)); + } + + function _deploy(string memory name, bytes memory codeWithArgs) private returns (address) { + // check override (mainly used with predeploys) + address addr = tryGetOverride(name); + + if (addr != address(0)) { + _label(name, addr); + return addr; + } + + // predict determinstic deployment address + addr = _predict(name, codeWithArgs); + _label(name, addr); + + if (skipDeploy) { + return addr; + } + + // revert if the contract is already deployed + if (addr.code.length > 0) { + revert( + string(abi.encodePacked("[ERROR] contract ", name, " (", vm.toString(addr), ") is already deployed")) + ); + } + + // deploy contract + bytes32 salt = _getSalt(name); + bytes memory data = abi.encodePacked(salt, codeWithArgs); + (bool success, ) = DETERMINISTIC_DEPLOYMENT_PROXY_ADDR.call(data); + require(success, "call failed"); + require(addr.code.length != 0, "deployment address mismatch"); + + return addr; + } + + function _predict(string memory name, bytes memory codeWithArgs) private view returns (address) { + bytes32 salt = _getSalt(name); + + return + address( + uint160( + uint256( + keccak256( + abi.encodePacked( + bytes1(0xff), + DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, + salt, + keccak256(codeWithArgs) + ) + ) + ) + ) + ); + } + + function _label(string memory name, address addr) internal { + vm.label(addr, name); + + if (mode == ScriptMode.None) { + return; + } + + if (mode == ScriptMode.LogAddresses) { + console.log(string(abi.encodePacked(name, "_ADDR=", vm.toString(address(addr))))); + return; + } + + string memory tomlPath = string(abi.encodePacked(".", name, "_ADDR")); + + if (mode == ScriptMode.WriteConfig) { + vm.writeToml(vm.toString(addr), CONFIG_CONTRACTS_PATH, tomlPath); + return; + } + + if (mode == ScriptMode.VerifyConfig) { + address expectedAddr = contractsCfg.readAddress(tomlPath); + + if (addr != expectedAddr) { + revert( + string( + abi.encodePacked( + "[ERROR] unexpected address for ", + name, + ", expected = ", + vm.toString(expectedAddr), + " (from toml config), got = ", + vm.toString(addr) + ) + ) + ); + } + } + } +} diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol new file mode 100644 index 00000000..5b225daf --- /dev/null +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -0,0 +1,328 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; +import {DeployScroll} from "./DeployScroll.s.sol"; + +contract GenerateRollupConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateRollupConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateRollupConfig() private { + // initialize template file + if (vm.exists(ROLLUP_CONFIG_PATH)) { + vm.removeFile(ROLLUP_CONFIG_PATH); + } + + string memory template = vm.readFile(ROLLUP_CONFIG_TEMPLATE_PATH); + vm.writeFile(ROLLUP_CONFIG_PATH, template); + + // endpoints + vm.writeJson(L1_RPC_ENDPOINT, ROLLUP_CONFIG_PATH, ".l1_config.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.sender_config.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, ROLLUP_CONFIG_PATH, ".l2_config.endpoint"); + vm.writeJson(L1_RPC_ENDPOINT, ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.sender_config.endpoint"); + + // contracts + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.l1_message_queue_address"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.scroll_chain_address"); + vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.l2_message_queue_address"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.rollup_contract_address"); + vm.writeJson(vm.toString(L2_GAS_PRICE_ORACLE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_price_oracle_contract_address"); + + // private keys + vm.writeJson(vm.toString(bytes32(L1_GAS_ORACLE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_sender_private_key"); + vm.writeJson(vm.toString(bytes32(L1_COMMIT_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.commit_sender_private_key"); + vm.writeJson(vm.toString(bytes32(L1_FINALIZE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_sender_private_key"); + vm.writeJson(vm.toString(bytes32(L2_GAS_ORACLE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_sender_private_key"); + + // other + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_ENABLED), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.enable_test_env_bypass_features"); + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_batch_without_proof_timeout_sec"); + + vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); + vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); + + vm.writeJson(SCROLL_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); + } +} + +contract GenerateCoordinatorConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateCoordinatorConfig(); + } + + /********************* + * Private functions * + *********************/ + + function generateCoordinatorConfig() private { + // initialize template file + if (vm.exists(COORDINATOR_CONFIG_PATH)) { + vm.removeFile(COORDINATOR_CONFIG_PATH); + } + + string memory template = vm.readFile(COORDINATOR_CONFIG_TEMPLATE_PATH); + vm.writeFile(COORDINATOR_CONFIG_PATH, template); + + vm.writeJson(vm.toString(CHAIN_ID_L2), COORDINATOR_CONFIG_PATH, ".l2.chain_id"); + vm.writeJson(SCROLL_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); + vm.writeJson(COORDINATOR_JWT_SECRET_KEY, COORDINATOR_CONFIG_PATH, ".auth.secret"); + } +} + +contract GenerateChainMonitorConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateChainMonitorConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateChainMonitorConfig() private { + // initialize template file + if (vm.exists(CHAIN_MONITOR_CONFIG_PATH)) { + vm.removeFile(CHAIN_MONITOR_CONFIG_PATH); + } + + string memory template = vm.readFile(CHAIN_MONITOR_CONFIG_TEMPLATE_PATH); + vm.writeFile(CHAIN_MONITOR_CONFIG_PATH, template); + + // L1 + vm.writeJson(L1_RPC_ENDPOINT, CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_url"); + vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.start_number"); + vm.writeJson(vm.toString(L1_ETH_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.eth_gateway"); + vm.writeJson(vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.weth_gateway"); + vm.writeJson(vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.standard_erc20_gateway"); + vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.custom_erc20_gateway"); + vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.erc721_gateway"); + vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.erc1155_gateway"); + vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.scroll_messenger"); + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.message_queue"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.scroll_chain"); + vm.writeJson(vm.toString(L2_DEPLOYER_INITIAL_BALANCE), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.start_messenger_balance"); + + // L2 + vm.writeJson(L2_RPC_ENDPOINT, CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_url"); + vm.writeJson(vm.toString(L2_ETH_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.eth_gateway"); + vm.writeJson(vm.toString(L2_WETH_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.weth_gateway"); + vm.writeJson(vm.toString(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.standard_erc20_gateway"); + vm.writeJson(vm.toString(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.custom_erc20_gateway"); + vm.writeJson(vm.toString(L2_ERC721_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.erc721_gateway"); + vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.erc1155_gateway"); + vm.writeJson(vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.scroll_messenger"); + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.message_queue"); + + // misc + vm.writeJson(CHAIN_MONITOR_DB_CONNECTION_STRING, CHAIN_MONITOR_CONFIG_PATH, ".db_config.dsn"); + } +} + +contract GenerateBridgeHistoryConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateBridgeHistoryConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateBridgeHistoryConfig() private { + // initialize template file + if (vm.exists(BRIDGE_HISTORY_CONFIG_PATH)) { + vm.removeFile(BRIDGE_HISTORY_CONFIG_PATH); + } + + string memory template = vm.readFile(BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH); + vm.writeFile(BRIDGE_HISTORY_CONFIG_PATH, template); + + // L1 contracts + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.MessageQueueAddr"); + vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.MessengerAddr"); + vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ScrollChainAddr"); + vm.writeJson(vm.toString(L1_GATEWAY_ROUTER_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.GatewayRouterAddr"); + vm.writeJson(vm.toString(L1_ETH_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ETHGatewayAddr"); + vm.writeJson(vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.WETHGatewayAddr"); + vm.writeJson(vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.StandardERC20GatewayAddr"); + vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.CustomERC20GatewayAddr"); + vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ERC721GatewayAddr"); + vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ERC1155GatewayAddr"); + + // L2 contracts + vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.MessageQueueAddr"); + vm.writeJson(vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.MessengerAddr"); + vm.writeJson(vm.toString(L2_GATEWAY_ROUTER_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.GatewayRouterAddr"); + vm.writeJson(vm.toString(L2_ETH_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.ETHGatewayAddr"); + vm.writeJson(vm.toString(L2_WETH_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.WETHGatewayAddr"); + vm.writeJson(vm.toString(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.StandardERC20GatewayAddr"); + vm.writeJson(vm.toString(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.CustomERC20GatewayAddr"); + vm.writeJson(vm.toString(L2_ERC721_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.ERC721GatewayAddr"); + vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.ERC1155GatewayAddr"); + + // endpoints + vm.writeJson(L1_RPC_ENDPOINT, BRIDGE_HISTORY_CONFIG_PATH, ".L1.endpoint"); + vm.writeJson(L2_RPC_ENDPOINT, BRIDGE_HISTORY_CONFIG_PATH, ".L2.endpoint"); + + // others + vm.writeJson(BRIDGE_HISTORY_DB_CONNECTION_STRING, BRIDGE_HISTORY_CONFIG_PATH, ".db.dsn"); + } +} + +contract GenerateBalanceCheckerConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateBalanceCheckerConfig(); + } + + /********************* + * Private functions * + *********************/ + + function generateBalanceCheckerConfig() private { + // initialize template file + if (vm.exists(BALANCE_CHECKER_CONFIG_PATH)) { + vm.removeFile(BALANCE_CHECKER_CONFIG_PATH); + } + + string memory template = vm.readFile(BALANCE_CHECKER_CONFIG_TEMPLATE_PATH); + vm.writeFile(BALANCE_CHECKER_CONFIG_PATH, template); + + vm.writeJson(L1_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[0].rpc_url"); + vm.writeJson(vm.toString(L1_COMMIT_SENDER_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[0].address"); + + vm.writeJson(L1_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[1].rpc_url"); + vm.writeJson(vm.toString(L1_FINALIZE_SENDER_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[1].address"); + + vm.writeJson(L1_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[2].rpc_url"); + vm.writeJson(vm.toString(L1_GAS_ORACLE_SENDER_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[2].address"); + + vm.writeJson(L1_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[3].rpc_url"); + vm.writeJson(vm.toString(L1_FEE_VAULT_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[3].address"); + + vm.writeJson(L2_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[4].rpc_url"); + vm.writeJson(vm.toString(L2_GAS_ORACLE_SENDER_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[4].address"); + + vm.writeJson(L2_RPC_ENDPOINT, BALANCE_CHECKER_CONFIG_PATH, ".addresses[5].rpc_url"); + vm.writeJson(vm.toString(L2_TX_FEE_VAULT_ADDR), BALANCE_CHECKER_CONFIG_PATH, ".addresses[5].address"); + } +} + +contract GenerateFrontendConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateFrontendConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateFrontendConfig() private { + // use writeFile to start a new file + vm.writeFile(FRONTEND_ENV_PATH, "REACT_APP_ETH_SYMBOL = \"ETH\"\n"); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BASE_CHAIN = \"Ethereum\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUP = \"Scroll Stack\""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L1 = \"", vm.toString(CHAIN_ID_L1), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L2 = \"", vm.toString(CHAIN_ID_L2), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_CONNECT_WALLET_PROJECT_ID = \"14efbaafcf5232a47d93a68229b71028\""); + + // API endpoints + vm.writeLine(FRONTEND_ENV_PATH, ""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_RPC_URI_L1 = \"http://l1-devnet.scrollsdk\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_RPC_URI_L2 = \"http://l2-rpc.scrollsdk\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BRIDGE_API_URI = \"http://bridge-history-api.scrollsdk/api\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUPSCAN_API_URI = \"https://rollup-explorer-backend.scrollsdk/api\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_EXPLORER_URI_L1 = \"http://l1-explorer.scrollsdk\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_EXPLORER_URI_L2 = \"http://blockscout.scrollsdk\""); + + // L1 contracts + vm.writeLine(FRONTEND_ENV_PATH, ""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_ETH_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_ETH_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_GAS_PRICE_ORACLE = \"", vm.toString(L1_GAS_PRICE_ORACLE_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_GATEWAY_ROUTER_PROXY_ADDR = \"", vm.toString(L1_GATEWAY_ROUTER_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_MESSAGE_QUEUE = \"", vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_MESSAGE_QUEUE_WITH_GAS_PRICE_ORACLE = \"", vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_SCROLL_MESSENGER = \"", vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_WETH_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_SCROLL_CHAIN = \"", vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), "\"")); + + // L2 contracts + vm.writeLine(FRONTEND_ENV_PATH, ""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR = \"", vm.toString(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_ETH_GATEWAY_PROXY_ADDR = \"", vm.toString(L2_ETH_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_GATEWAY_ROUTER_PROXY_ADDR = \"", vm.toString(L2_GATEWAY_ROUTER_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_SCROLL_MESSENGER = \"", vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR = \"", vm.toString(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L2_WETH_GATEWAY_PROXY_ADDR = \"", vm.toString(L2_WETH_GATEWAY_PROXY_ADDR), "\"")); + + // custom token gateways (currently not set) + vm.writeLine(FRONTEND_ENV_PATH, ""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_USDC_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L2_USDC_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_DAI_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L2_DAI_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_LIDO_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L2_LIDO_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_PUFFER_GATEWAY_PROXY_ADDR = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L2_PUFFER_GATEWAY_PROXY_ADDR = \"\""); + + // misc + vm.writeLine(FRONTEND_ENV_PATH, ""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_SCROLL_ORIGINS_NFT = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_SCROLL_ORIGINS_NFT_V2 = \"\""); + vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_BATCH_BRIDGE_GATEWAY_PROXY_ADDR = \"\""); + } +} diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol new file mode 100644 index 00000000..32efc7b5 --- /dev/null +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -0,0 +1,251 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; +import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; +import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; +import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; + +import {DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, GENESIS_JSON_TEMPLATE_PATH} from "./Constants.sol"; +import {DeployScroll} from "./DeployScroll.s.sol"; + +contract GenerateGenesis is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateGenesisAlloc(); + generateGenesisJson(); + + // clean up temporary files + vm.removeFile(GENESIS_ALLOC_JSON_PATH); + } + + /********************* + * Private functions * + *********************/ + + function generateGenesisAlloc() private { + if (vm.exists(GENESIS_ALLOC_JSON_PATH)) { + vm.removeFile(GENESIS_ALLOC_JSON_PATH); + } + + // Scroll predeploys + setL2MessageQueue(); + setL1GasPriceOracle(); + setL2Whitelist(); + setL2Weth(); + setL2FeeVault(); + + // other predeploys + setDeterministicDeploymentProxy(); + + // reset sender + vm.resetNonce(msg.sender); + + // prefunded accounts + setL2ScrollMessenger(); + setL2Deployer(); + + // write to file + vm.dumpState(GENESIS_ALLOC_JSON_PATH); + sortJsonByKeys(GENESIS_ALLOC_JSON_PATH); + } + + function setL2MessageQueue() internal { + address predeployAddr = tryGetOverride("L2_MESSAGE_QUEUE"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + L2MessageQueue _queue = new L2MessageQueue(OWNER_ADDR); + vm.etch(predeployAddr, address(_queue).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000052"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_queue), _ownerSlot)); + + // reset so its not included state dump + vm.etch(address(_queue), ""); + vm.resetNonce(address(_queue)); + } + + function setL1GasPriceOracle() internal { + address predeployAddr = tryGetOverride("L1_GAS_PRICE_ORACLE"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + L1GasPriceOracle _oracle = new L1GasPriceOracle(OWNER_ADDR); + vm.etch(predeployAddr, address(_oracle).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_oracle), _ownerSlot)); + + bytes32 _isCurieSlot = hex"0000000000000000000000000000000000000000000000000000000000000008"; + vm.store(predeployAddr, _isCurieSlot, bytes32(uint256(1))); + + // reset so its not included state dump + vm.etch(address(_oracle), ""); + vm.resetNonce(address(_oracle)); + } + + function setL2Whitelist() internal { + address predeployAddr = tryGetOverride("L2_WHITELIST"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + Whitelist _whitelist = new Whitelist(OWNER_ADDR); + vm.etch(predeployAddr, address(_whitelist).code); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_whitelist), _ownerSlot)); + + // reset so its not included state dump + vm.etch(address(_whitelist), ""); + vm.resetNonce(address(_whitelist)); + } + + function setL2Weth() internal { + address predeployAddr = tryGetOverride("L2_WETH"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + WrappedEther _weth = new WrappedEther(); + vm.etch(predeployAddr, address(_weth).code); + + // set storage + bytes32 _nameSlot = hex"0000000000000000000000000000000000000000000000000000000000000003"; + vm.store(predeployAddr, _nameSlot, vm.load(address(_weth), _nameSlot)); + + bytes32 _symbolSlot = hex"0000000000000000000000000000000000000000000000000000000000000004"; + vm.store(predeployAddr, _symbolSlot, vm.load(address(_weth), _symbolSlot)); + + // reset so its not included state dump + vm.etch(address(_weth), ""); + vm.resetNonce(address(_weth)); + } + + function setL2FeeVault() internal { + address predeployAddr = tryGetOverride("L2_TX_FEE_VAULT"); + + if (predeployAddr == address(0)) { + return; + } + + // set code + L2TxFeeVault _vault = new L2TxFeeVault(OWNER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + vm.etch(predeployAddr, address(_vault).code); + + vm.prank(OWNER_ADDR); + _vault.updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + + // set storage + bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; + vm.store(predeployAddr, _ownerSlot, vm.load(address(_vault), _ownerSlot)); + + bytes32 _minWithdrawAmountSlot = hex"0000000000000000000000000000000000000000000000000000000000000001"; + vm.store(predeployAddr, _minWithdrawAmountSlot, vm.load(address(_vault), _minWithdrawAmountSlot)); + + bytes32 _messengerSlot = hex"0000000000000000000000000000000000000000000000000000000000000002"; + vm.store(predeployAddr, _messengerSlot, vm.load(address(_vault), _messengerSlot)); + + bytes32 _recipientSlot = hex"0000000000000000000000000000000000000000000000000000000000000003"; + vm.store(predeployAddr, _recipientSlot, vm.load(address(_vault), _recipientSlot)); + + // reset so its not included state dump + vm.etch(address(_vault), ""); + vm.resetNonce(address(_vault)); + } + + function setDeterministicDeploymentProxy() internal { + bytes + memory code = hex"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3"; + vm.etch(DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, code); + } + + function setL2ScrollMessenger() internal { + vm.deal(L2_SCROLL_MESSENGER_PROXY_ADDR, L2_SCROLL_MESSENGER_INITIAL_BALANCE); + } + + function setL2Deployer() internal { + vm.deal(OWNER_ADDR, L2_DEPLOYER_INITIAL_BALANCE); + } + + function generateGenesisJson() private { + // initialize template file + if (vm.exists(GENESIS_JSON_PATH)) { + vm.removeFile(GENESIS_JSON_PATH); + } + + string memory template = vm.readFile(GENESIS_JSON_TEMPLATE_PATH); + vm.writeFile(GENESIS_JSON_PATH, template); + + // general config + vm.writeJson(vm.toString(CHAIN_ID_L2), GENESIS_JSON_PATH, ".config.chainId"); + + uint256 timestamp = vm.unixTime() / 1000; + vm.writeJson(vm.toString(bytes32(timestamp)), GENESIS_JSON_PATH, ".timestamp"); + + string memory extraData = string( + abi.encodePacked( + "0x0000000000000000000000000000000000000000000000000000000000000000", + vm.replace(vm.toString(L2GETH_SIGNER_0_ADDRESS), "0x", ""), + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ) + ); + + vm.writeJson(extraData, GENESIS_JSON_PATH, ".extraData"); + + // scroll-specific config + vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), GENESIS_JSON_PATH, ".config.scroll.maxTxPerBlock"); + vm.writeJson(vm.toString(L2_TX_FEE_VAULT_ADDR), GENESIS_JSON_PATH, ".config.scroll.feeVaultAddress"); + + // serialize explicitly as string, otherwise foundry will serialize it as number + string memory l1ChainId = string(abi.encodePacked('"', vm.toString(CHAIN_ID_L1), '"')); + vm.writeJson(l1ChainId, GENESIS_JSON_PATH, ".config.scroll.l1Config.l1ChainId"); + + vm.writeJson( + vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.scroll.l1Config.l1MessageQueueAddress" + ); + + vm.writeJson( + vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), + GENESIS_JSON_PATH, + ".config.scroll.l1Config.scrollChainAddress" + ); + + // predeploys and prefunded accounts + string memory alloc = vm.readFile(GENESIS_ALLOC_JSON_PATH); + vm.writeJson(alloc, GENESIS_JSON_PATH, ".alloc"); + } + + /// @notice Sorts the allocs by address + // source: https://github.com/ethereum-optimism/optimism/blob/develop/packages/contracts-bedrock/scripts/L2Genesis.s.sol + function sortJsonByKeys(string memory _path) private { + string[] memory commands = new string[](3); + commands[0] = "/bin/bash"; + commands[1] = "-c"; + commands[2] = string.concat("cat <<< $(jq -S '.' ", _path, ") > ", _path); + vm.ffi(commands); + } +} diff --git a/src/L2/predeploys/L1GasPriceOracle.sol b/src/L2/predeploys/L1GasPriceOracle.sol index 6d535328..de03d9da 100644 --- a/src/L2/predeploys/L1GasPriceOracle.sol +++ b/src/L2/predeploys/L1GasPriceOracle.sol @@ -113,6 +113,9 @@ contract L1GasPriceOracle is OwnableBase, IL1GasPriceOracle { constructor(address _owner) { _transferOwnership(_owner); + + // by default we enable Curie from genesis + isCurie = true; } /************************* From 0d9b852e320572db0e0a95487dac5f754825dd74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 10 Jul 2024 16:44:13 +0200 Subject: [PATCH 02/48] install ca-certificates --- docker/Dockerfile.deploy | 2 +- docker/Dockerfile.gen-configs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/Dockerfile.deploy b/docker/Dockerfile.deploy index 02301333..9e9136b0 100644 --- a/docker/Dockerfile.deploy +++ b/docker/Dockerfile.deploy @@ -9,7 +9,7 @@ WORKDIR /root # Install dependencies RUN apt update -RUN apt install --yes curl bash coreutils git jq +RUN apt install --yes curl bash coreutils git jq ca-certificates # Download and run the Foundry installation script RUN curl -L https://foundry.paradigm.xyz | bash diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs index 6a8ad51f..95f0c86c 100644 --- a/docker/Dockerfile.gen-configs +++ b/docker/Dockerfile.gen-configs @@ -9,7 +9,7 @@ WORKDIR /root # Install dependencies RUN apt update -RUN apt install --yes curl bash coreutils git jq +RUN apt install --yes curl bash coreutils git jq ca-certificates # Download and run the Foundry installation script RUN curl -L https://foundry.paradigm.xyz | bash From 0277a66e7ff8bcd9b8bc65f8ab567bdf109cfdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 10 Jul 2024 16:47:49 +0200 Subject: [PATCH 03/48] make isCurie configurable --- scripts/deterministic/DeployScroll.s.sol | 2 +- scripts/deterministic/GenerateGenesis.s.sol | 2 +- scripts/foundry/DeployL2BridgeContracts.s.sol | 2 +- src/L2/predeploys/L1GasPriceOracle.sol | 5 ++--- src/test/L1GasPriceOracle.t.sol | 2 +- src/test/L2GatewayTestBase.t.sol | 2 +- src/test/L2ScrollMessenger.t.sol | 2 +- 7 files changed, 8 insertions(+), 9 deletions(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 3aa72463..197e42f0 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -621,7 +621,7 @@ contract DeployScroll is DeterminsticDeployment { } function deployL1GasPriceOracle() private { - bytes memory args = abi.encode(DEPLOYER_ADDR); + bytes memory args = abi.encode(DEPLOYER_ADDR, true); L1_GAS_PRICE_ORACLE_ADDR = deploy("L1_GAS_PRICE_ORACLE", type(L1GasPriceOracle).creationCode, args); } diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 32efc7b5..f51e374c 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -85,7 +85,7 @@ contract GenerateGenesis is DeployScroll { } // set code - L1GasPriceOracle _oracle = new L1GasPriceOracle(OWNER_ADDR); + L1GasPriceOracle _oracle = new L1GasPriceOracle(OWNER_ADDR, true); vm.etch(predeployAddr, address(_oracle).code); // set storage diff --git a/scripts/foundry/DeployL2BridgeContracts.s.sol b/scripts/foundry/DeployL2BridgeContracts.s.sol index 5ea90770..eba79808 100644 --- a/scripts/foundry/DeployL2BridgeContracts.s.sol +++ b/scripts/foundry/DeployL2BridgeContracts.s.sol @@ -92,7 +92,7 @@ contract DeployL2BridgeContracts is Script { } address owner = vm.addr(L2_DEPLOYER_PRIVATE_KEY); - oracle = new L1GasPriceOracle(owner); + oracle = new L1GasPriceOracle(owner, true); logAddress("L1_GAS_PRICE_ORACLE_ADDR", address(oracle)); } diff --git a/src/L2/predeploys/L1GasPriceOracle.sol b/src/L2/predeploys/L1GasPriceOracle.sol index de03d9da..4d19e5e3 100644 --- a/src/L2/predeploys/L1GasPriceOracle.sol +++ b/src/L2/predeploys/L1GasPriceOracle.sol @@ -111,11 +111,10 @@ contract L1GasPriceOracle is OwnableBase, IL1GasPriceOracle { * Constructor * ***************/ - constructor(address _owner) { + constructor(address _owner, bool _isCurie) { _transferOwnership(_owner); - // by default we enable Curie from genesis - isCurie = true; + isCurie = _isCurie; } /************************* diff --git a/src/test/L1GasPriceOracle.t.sol b/src/test/L1GasPriceOracle.t.sol index 3d845ad9..d4497e35 100644 --- a/src/test/L1GasPriceOracle.t.sol +++ b/src/test/L1GasPriceOracle.t.sol @@ -19,7 +19,7 @@ contract L1GasPriceOracleTest is DSTestPlus { function setUp() public { whitelist = new Whitelist(address(this)); - oracle = new L1GasPriceOracle(address(this)); + oracle = new L1GasPriceOracle(address(this), false); oracle.updateWhitelist(address(whitelist)); address[] memory _accounts = new address[](1); diff --git a/src/test/L2GatewayTestBase.t.sol b/src/test/L2GatewayTestBase.t.sol index 180fba2b..56372677 100644 --- a/src/test/L2GatewayTestBase.t.sol +++ b/src/test/L2GatewayTestBase.t.sol @@ -69,7 +69,7 @@ abstract contract L2GatewayTestBase is DSTestPlus { whitelist = new Whitelist(address(this)); l1BlockContainer = new L1BlockContainer(address(this)); l2MessageQueue = new L2MessageQueue(address(this)); - l1GasOracle = new L1GasPriceOracle(address(this)); + l1GasOracle = new L1GasPriceOracle(address(this), false); l2Messenger = L2ScrollMessenger(payable(_deployProxy(address(0)))); // Upgrade the L2ScrollMessenger implementation and initialize diff --git a/src/test/L2ScrollMessenger.t.sol b/src/test/L2ScrollMessenger.t.sol index 6dea30ed..313e96a6 100644 --- a/src/test/L2ScrollMessenger.t.sol +++ b/src/test/L2ScrollMessenger.t.sol @@ -34,7 +34,7 @@ contract L2ScrollMessengerTest is DSTestPlus { whitelist = new Whitelist(address(this)); l1BlockContainer = new L1BlockContainer(address(this)); l2MessageQueue = new L2MessageQueue(address(this)); - l1GasOracle = new L1GasPriceOracle(address(this)); + l1GasOracle = new L1GasPriceOracle(address(this), false); l2Messenger = L2ScrollMessenger( payable( new ERC1967Proxy( From 01f2db0624d10448989ca1833e6fc9e818eecf9d Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:11:00 +0800 Subject: [PATCH 04/48] fix: add rollup config fields (#7) --- docker/templates/rollup-config.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index d080925e..5fc6aeb3 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -68,14 +68,16 @@ "max_l1_commit_calldata_size_per_chunk": 110000, "chunk_timeout_sec": 2700, "max_row_consumption_per_chunk": 1000000, - "gas_cost_increase_multiplier": 1.2 + "gas_cost_increase_multiplier": 1.2, + "max_uncompressed_batch_bytes_size": 634880 }, "batch_proposer_config": { "max_chunk_num_per_batch": 15, "max_l1_commit_gas_per_batch": 5000000, "max_l1_commit_calldata_size_per_batch": 110000, "batch_timeout_sec": 2700, - "gas_cost_increase_multiplier": 1.2 + "gas_cost_increase_multiplier": 1.2, + "max_uncompressed_batch_bytes_size": 634880 } }, "db_config": { From 54d9b7564e42861af48fd622419e843b14696eec Mon Sep 17 00:00:00 2001 From: sbaizet <74511063+sbaizet-ledger@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:38:45 +0200 Subject: [PATCH 05/48] feat: add workflow to deploy docker images with github action (#8) --- .github/workflows/docker-release.yml | 69 ++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 .github/workflows/docker-release.yml diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml new file mode 100644 index 00000000..56111774 --- /dev/null +++ b/.github/workflows/docker-release.yml @@ -0,0 +1,69 @@ +name: Build and publish scroll-alpine image + +on: + push: + tags: + - 'v*.*.*' +jobs: + build: + name: Clone, Build, Publish + runs-on: ubuntu-latest + steps: + + - name: Check out repository + uses: actions/checkout@v3 + with: + submodules: true + + - name: Update submodules recursively + run: git submodule update --init --recursive + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version: '21' + + - name: Install dependencies + run: npm install + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to Dockerhub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build deploy image + id: build_deploy_image + env: + REGISTRY: ${{ steps.login-ecr.outputs.registry }} + REPOSITORY: scrolltech/scroll-stack-contracts + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm64 + push: true + context: . + file: docker/Dockerfile.deploy + tags: | + ${{ env.REPOSITORY }}:deploy-${{ github.ref_name }} + ${{ env.REPOSITORY }}:latest + + - name: Build gen image + id: build_gen_image + env: + REGISTRY: ${{ steps.login-ecr.outputs.registry }} + REPOSITORY: scrolltech/scroll-stack-contracts + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm64 + push: true + context: . + file: docker/Dockerfile.gen-configs + tags: | + ${{ env.REPOSITORY }}:gen-configs-${{ github.ref_name }} + ${{ env.REPOSITORY }}:latest From ffa830b9ba4170c495371eba1b4fd65d7660d055 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 18 Jul 2024 18:22:53 +0800 Subject: [PATCH 06/48] fix: make env.frontend fields generate from config (#9) --- docker/config-example.toml | 9 +++++++++ scripts/deterministic/Configuration.sol | 15 +++++++++++++++ scripts/deterministic/GenerateConfigs.s.sol | 12 ++++++------ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index 284236c6..06786a68 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -73,3 +73,12 @@ L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" [coordinator] COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" + +[frontend] + +EXTERNAL_RPC_URI_L1 ="http://l1-devnet.scrollsdk" +EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" +BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" +ROLLUPSCAN_API_URI = "https://rollup-explorer-backend.scrollsdk/api" +EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" +EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" \ No newline at end of file diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index cf5b62a0..8473beda 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -74,6 +74,14 @@ abstract contract Configuration is Script { // coordinator string internal COORDINATOR_JWT_SECRET_KEY; + // frontend + string internal EXTERNAL_RPC_URI_L1; + string internal EXTERNAL_RPC_URI_L2; + string internal BRIDGE_API_URI; + string internal ROLLUPSCAN_API_URI; + string internal EXTERNAL_EXPLORER_URI_L1; + string internal EXTERNAL_EXPLORER_URI_L2; + /*************** * Constructor * ***************/ @@ -133,6 +141,13 @@ abstract contract Configuration is Script { COORDINATOR_JWT_SECRET_KEY = cfg.readString(".coordinator.COORDINATOR_JWT_SECRET_KEY"); + EXTERNAL_RPC_URI_L1 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L1"); + EXTERNAL_RPC_URI_L2 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L2"); + BRIDGE_API_URI = cfg.readString(".frontend.BRIDGE_API_URI"); + ROLLUPSCAN_API_URI = cfg.readString(".frontend.ROLLUPSCAN_API_URI"); + EXTERNAL_EXPLORER_URI_L1 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L1"); + EXTERNAL_EXPLORER_URI_L2 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L2"); + runSanityCheck(); } diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 5b225daf..3cb921ce 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -279,12 +279,12 @@ contract GenerateFrontendConfig is DeployScroll { // API endpoints vm.writeLine(FRONTEND_ENV_PATH, ""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_RPC_URI_L1 = \"http://l1-devnet.scrollsdk\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_RPC_URI_L2 = \"http://l2-rpc.scrollsdk\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BRIDGE_API_URI = \"http://bridge-history-api.scrollsdk/api\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUPSCAN_API_URI = \"https://rollup-explorer-backend.scrollsdk/api\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_EXPLORER_URI_L1 = \"http://l1-explorer.scrollsdk\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_EXTERNAL_EXPLORER_URI_L2 = \"http://blockscout.scrollsdk\""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_RPC_URI_L1 = \"", EXTERNAL_RPC_URI_L1, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_RPC_URI_L2 = \"", EXTERNAL_RPC_URI_L2, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_BRIDGE_API_URI = \"", BRIDGE_API_URI, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_ROLLUPSCAN_API_URI = \"", ROLLUPSCAN_API_URI, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_EXPLORER_URI_L1 = \"", EXTERNAL_EXPLORER_URI_L1, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_EXPLORER_URI_L2 = \"", EXTERNAL_EXPLORER_URI_L2, "\"")); // L1 contracts vm.writeLine(FRONTEND_ENV_PATH, ""); From 7b0b840f7ed12dc49039ce6beb4c0b230bf48d18 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 25 Jul 2024 02:10:29 +0800 Subject: [PATCH 07/48] fix: log addresses script mode (#15) --- scripts/deterministic/DeterministicDeployment.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/DeterministicDeployment.sol b/scripts/deterministic/DeterministicDeployment.sol index 4bc8d117..adae4185 100644 --- a/scripts/deterministic/DeterministicDeployment.sol +++ b/scripts/deterministic/DeterministicDeployment.sol @@ -72,7 +72,7 @@ abstract contract DeterminsticDeployment is Configuration { function setScriptMode(string memory scriptMode) internal { if (keccak256(bytes(scriptMode)) == keccak256(bytes("log-addresses"))) { - mode = ScriptMode.WriteConfig; + mode = ScriptMode.LogAddresses; } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("write-config"))) { mode = ScriptMode.WriteConfig; } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("verify-config"))) { From cdc9db123f0dcc3dcfffdd1b395456f260cef9e3 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 25 Jul 2024 18:27:49 +0800 Subject: [PATCH 08/48] feat: generate rollup explorer backend config (#14) --- docker/config-example.toml | 1 + docker/scripts/gen-configs.sh | 4 +++ .../rollup-explorer-backend-config.json | 5 +++ scripts/deterministic/Configuration.sol | 2 ++ scripts/deterministic/Constants.sol | 2 ++ scripts/deterministic/GenerateConfigs.s.sol | 32 ++++++++++++++++++- 6 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 docker/templates/rollup-explorer-backend-config.json diff --git a/docker/config-example.toml b/docker/config-example.toml index 06786a68..85a27435 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -43,6 +43,7 @@ L2GETH_SIGNER_0_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" SCROLL_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/scroll?sslmode=disable" CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/chain_monitor?sslmode=disable" BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/bridge_history?sslmode=disable" +ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/rollup_explorer?sslmode=disable" [genesis] diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index 00da4f0b..0a42c787 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -31,3 +31,7 @@ forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerC echo "" echo "generating .env.frontend" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateFrontendConfig || exit 1 + +echo "" +echo "generating rollup-explorer-backend-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupExplorerBackendConfig || exit 1 diff --git a/docker/templates/rollup-explorer-backend-config.json b/docker/templates/rollup-explorer-backend-config.json new file mode 100644 index 00000000..a8ec2499 --- /dev/null +++ b/docker/templates/rollup-explorer-backend-config.json @@ -0,0 +1,5 @@ +{ + "db_url": null, + "open_api_addr": "/rollupscan", + "max_per_page": 500 +} \ No newline at end of file diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 8473beda..a39f6828 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -59,6 +59,7 @@ abstract contract Configuration is Script { string internal SCROLL_DB_CONNECTION_STRING; string internal CHAIN_MONITOR_DB_CONNECTION_STRING; string internal BRIDGE_HISTORY_DB_CONNECTION_STRING; + string internal ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING; // genesis uint256 internal L2_MAX_ETH_SUPPLY; @@ -129,6 +130,7 @@ abstract contract Configuration is Script { SCROLL_DB_CONNECTION_STRING = cfg.readString(".db.SCROLL_DB_CONNECTION_STRING"); CHAIN_MONITOR_DB_CONNECTION_STRING = cfg.readString(".db.CHAIN_MONITOR_DB_CONNECTION_STRING"); BRIDGE_HISTORY_DB_CONNECTION_STRING = cfg.readString(".db.BRIDGE_HISTORY_DB_CONNECTION_STRING"); + ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); L2_MAX_ETH_SUPPLY = cfg.readUint(".genesis.L2_MAX_ETH_SUPPLY"); L2_DEPLOYER_INITIAL_BALANCE = cfg.readUint(".genesis.L2_DEPLOYER_INITIAL_BALANCE"); diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index ff02d60c..58395a57 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -19,6 +19,7 @@ string constant COORDINATOR_CONFIG_TEMPLATE_PATH = "./docker/templates/coordinat string constant CHAIN_MONITOR_CONFIG_TEMPLATE_PATH = "./docker/templates/chain-monitor-config.json"; string constant BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH = "./docker/templates/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_TEMPLATE_PATH = "./docker/templates/balance-checker-config.json"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH = "./docker/templates/rollup-explorer-backend-config.json"; // input files string constant CONFIG_PATH = "./volume/config.toml"; @@ -33,3 +34,4 @@ string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json" string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; string constant FRONTEND_ENV_PATH = "./volume/.env.frontend"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 3cb921ce..bb1fc900 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; -import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; +import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; contract GenerateRollupConfig is DeployScroll { @@ -326,3 +326,33 @@ contract GenerateFrontendConfig is DeployScroll { vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_L1_BATCH_BRIDGE_GATEWAY_PROXY_ADDR = \"\""); } } + +contract GenerateRollupExplorerBackendConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + setScriptMode(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateRollupExplorerBackendConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateRollupExplorerBackendConfig() private { + // initialize template file + if (vm.exists(ROLLUP_EXPLORER_BACKEND_CONFIG_PATH)) { + vm.removeFile(ROLLUP_EXPLORER_BACKEND_CONFIG_PATH); + } + + string memory template = vm.readFile(ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH); + vm.writeFile(ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, template); + + vm.writeJson(ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ".db_url"); + } +} From f18a59af72ba06f6b1d7feb6b4b12cb101e52b74 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Mon, 29 Jul 2024 18:32:38 +0800 Subject: [PATCH 09/48] feat: robust deployment script (#16) --- .gitignore | 2 + scripts/deterministic/DeployScroll.s.sol | 411 +++++++++++------- .../deterministic/DeterministicDeployment.sol | 25 +- 3 files changed, 286 insertions(+), 152 deletions(-) diff --git a/.gitignore b/.gitignore index 88e59a65..ecf447b4 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ broadcast # Visual Studio Code .vscode + +volume \ No newline at end of file diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 197e42f0..528cb7f8 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1011,111 +1011,145 @@ contract DeployScroll is DeterminsticDeployment { **********************/ function initializeScrollChain() private { - ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).initialize( - notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), - notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR), - MAX_TX_IN_CHUNK - ); + if (getInitializeCount(L1_SCROLL_CHAIN_PROXY_ADDR) == 0) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).initialize( + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), + notnull(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR), + MAX_TX_IN_CHUNK + ); + } - ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDR); - ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDR); + if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isSequencer(L1_COMMIT_SENDER_ADDR)) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDR); + } + if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isProver(L1_FINALIZE_SENDER_ADDR)) { + ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDR); + } } function initializeL2GasPriceOracle() private { - L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).initialize( - 21000, // _txGas - 53000, // _txGasContractCreation - 4, // _zeroGas - 16 // _nonZeroGas - ); - - L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR); + if (getInitializeCount(L2_GAS_PRICE_ORACLE_PROXY_ADDR) == 0) { + L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).initialize( + 21000, // _txGas + 53000, // _txGasContractCreation + 4, // _zeroGas + 16 // _nonZeroGas + ); + } + if (L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).whitelist() != L1_WHITELIST_ADDR) { + L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR); + } } function initializeL1MessageQueue() private { - L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initialize( - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), - notnull(L1_SCROLL_CHAIN_PROXY_ADDR), - notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR), - notnull(L2_GAS_PRICE_ORACLE_PROXY_ADDR), - MAX_L1_MESSAGE_GAS_LIMIT - ); - - L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); + if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 0) { + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initialize( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR), + notnull(L2_GAS_PRICE_ORACLE_PROXY_ADDR), + MAX_L1_MESSAGE_GAS_LIMIT + ); + } + if ( + getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 0 || getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 1 + ) { + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); + } } function initializeL1ScrollMessenger() private { - L1ScrollMessenger(payable(L1_SCROLL_MESSENGER_PROXY_ADDR)).initialize( - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), - notnull(L1_FEE_VAULT_ADDR), - notnull(L1_SCROLL_CHAIN_PROXY_ADDR), - notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) - ); + if (getInitializeCount(L1_SCROLL_MESSENGER_PROXY_ADDR) == 0) { + L1ScrollMessenger(payable(L1_SCROLL_MESSENGER_PROXY_ADDR)).initialize( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_FEE_VAULT_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) + ); + } } function initializeEnforcedTxGateway() private { - EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize( - notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), - notnull(L1_FEE_VAULT_ADDR) - ); + if (getInitializeCount(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) == 0) { + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).initialize( + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR), + notnull(L1_FEE_VAULT_ADDR) + ); + } // disable gateway - EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true); + if (!EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).paused()) { + EnforcedTxGateway(payable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR)).setPause(true); + } } function initializeL1GatewayRouter() private { - L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( - notnull(L1_ETH_GATEWAY_PROXY_ADDR), - notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) - ); + if (getInitializeCount(L1_GATEWAY_ROUTER_PROXY_ADDR) == 0) { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } } function initializeL1CustomERC20Gateway() private { - L1CustomERC20Gateway(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( - notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), - notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L1CustomERC20Gateway(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL1ERC1155Gateway() private { - L1ERC1155Gateway(L1_ERC1155_GATEWAY_PROXY_ADDR).initialize( - notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L1_ERC1155_GATEWAY_PROXY_ADDR) == 0) { + L1ERC1155Gateway(L1_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL1ERC721Gateway() private { - L1ERC721Gateway(L1_ERC721_GATEWAY_PROXY_ADDR).initialize( - notnull(L2_ERC721_GATEWAY_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L1_ERC721_GATEWAY_PROXY_ADDR) == 0) { + L1ERC721Gateway(L1_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ERC721_GATEWAY_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL1ETHGateway() private { - L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize( - notnull(L2_ETH_GATEWAY_PROXY_ADDR), - notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L1_ETH_GATEWAY_PROXY_ADDR) == 0) { + L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL1StandardERC20Gateway() private { - L1StandardERC20Gateway(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( - notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), - notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), - notnull(L2_SCROLL_STANDARD_ERC20_ADDR), - notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) - ); + if (getInitializeCount(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L1StandardERC20Gateway(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } } function initializeL1WETHGateway() private { - L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize( - notnull(L2_WETH_GATEWAY_PROXY_ADDR), - notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L1_WETH_GATEWAY_PROXY_ADDR) == 0) { + L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L2_WETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } // set WETH gateway in router { @@ -1123,36 +1157,66 @@ contract DeployScroll is DeterminsticDeployment { _tokens[0] = notnull(L1_WETH_ADDR); address[] memory _gateways = new address[](1); _gateways[0] = notnull(L1_WETH_GATEWAY_PROXY_ADDR); - L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + if (L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } } } function initializeL1Whitelist() private { address[] memory accounts = new address[](1); accounts[0] = L1_GAS_ORACLE_SENDER_ADDR; - Whitelist(L1_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + if (!Whitelist(L1_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { + Whitelist(L1_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } } function transferL1ContractOwnership() private { - if (DEPLOYER_ADDR == OWNER_ADDR) { - return; + if (Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_PROXY_ADMIN_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L1_WHITELIST_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); } - - Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L1_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); } /********************** @@ -1160,73 +1224,97 @@ contract DeployScroll is DeterminsticDeployment { **********************/ function initializeL2MessageQueue() private { - L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).initialize(notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + if (L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)) { + L2MessageQueue(L2_MESSAGE_QUEUE_ADDR).initialize(L2_SCROLL_MESSENGER_PROXY_ADDR); + } } function initializeL2TxFeeVault() private { - L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).updateMessenger(notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)); + if (L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)) { + L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + } } function initializeL1GasPriceOracle() private { - L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).updateWhitelist(notnull(L2_WHITELIST_ADDR)); + if (address(L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).whitelist()) != notnull(L2_WHITELIST_ADDR)) { + L1GasPriceOracle(L1_GAS_PRICE_ORACLE_ADDR).updateWhitelist(L2_WHITELIST_ADDR); + } } function initializeL2ScrollMessenger() private { - L2ScrollMessenger(payable(L2_SCROLL_MESSENGER_PROXY_ADDR)).initialize(notnull(L1_SCROLL_MESSENGER_PROXY_ADDR)); + if (getInitializeCount(L2_SCROLL_MESSENGER_PROXY_ADDR) == 0) { + L2ScrollMessenger(payable(L2_SCROLL_MESSENGER_PROXY_ADDR)).initialize( + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL2GatewayRouter() private { - L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).initialize( - notnull(L2_ETH_GATEWAY_PROXY_ADDR), - notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) - ); + if (getInitializeCount(L2_GATEWAY_ROUTER_PROXY_ADDR) == 0) { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).initialize( + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) + ); + } } function initializeL2CustomERC20Gateway() private { - L2CustomERC20Gateway(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), - notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L2CustomERC20Gateway(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL2ERC1155Gateway() private { - L2ERC1155Gateway(L2_ERC1155_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L2_ERC1155_GATEWAY_PROXY_ADDR) == 0) { + L2ERC1155Gateway(L2_ERC1155_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC1155_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL2ERC721Gateway() private { - L2ERC721Gateway(L2_ERC721_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_ERC721_GATEWAY_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L2_ERC721_GATEWAY_PROXY_ADDR) == 0) { + L2ERC721Gateway(L2_ERC721_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ERC721_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL2ETHGateway() private { - L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_ETH_GATEWAY_PROXY_ADDR), - notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L2_ETH_GATEWAY_PROXY_ADDR) == 0) { + L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } } function initializeL2StandardERC20Gateway() private { - L2StandardERC20Gateway(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), - notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), - notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) - ); + if (getInitializeCount(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) == 0) { + L2StandardERC20Gateway(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).initialize( + notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) + ); + } } function initializeL2WETHGateway() private { - L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize( - notnull(L1_WETH_GATEWAY_PROXY_ADDR), - notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) - ); + if (getInitializeCount(L2_WETH_GATEWAY_PROXY_ADDR) == 0) { + L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize( + notnull(L1_WETH_GATEWAY_PROXY_ADDR), + notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ); + } // set WETH gateway in router { @@ -1234,39 +1322,70 @@ contract DeployScroll is DeterminsticDeployment { _tokens[0] = notnull(L2_WETH_ADDR); address[] memory _gateways = new address[](1); _gateways[0] = notnull(L2_WETH_GATEWAY_PROXY_ADDR); - L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + if (L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); + } } } function initializeScrollStandardERC20Factory() private { - ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).transferOwnership( + if ( + ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).owner() != notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) - ); + ) { + ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).transferOwnership( + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR + ); + } } function initializeL2Whitelist() private { address[] memory accounts = new address[](1); accounts[0] = L2_GAS_ORACLE_SENDER_ADDR; - Whitelist(L2_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + if (!Whitelist(L2_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { + Whitelist(L2_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); + } } function transferL2ContractOwnership() private { - if (DEPLOYER_ADDR == OWNER_ADDR) { - return; + if (Ownable(L1_GAS_PRICE_ORACLE_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_GAS_PRICE_ORACLE_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_MESSAGE_QUEUE_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_MESSAGE_QUEUE_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_TX_FEE_VAULT_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_TX_FEE_VAULT_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_PROXY_ADMIN_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); + } + if (Ownable(L2_WHITELIST_ADDR).owner() != OWNER_ADDR) { + Ownable(L2_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); } - - Ownable(L1_GAS_PRICE_ORACLE_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_MESSAGE_QUEUE_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_TX_FEE_VAULT_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); - Ownable(L2_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); } } diff --git a/scripts/deterministic/DeterministicDeployment.sol b/scripts/deterministic/DeterministicDeployment.sol index adae4185..bd309cf5 100644 --- a/scripts/deterministic/DeterministicDeployment.sol +++ b/scripts/deterministic/DeterministicDeployment.sol @@ -6,6 +6,7 @@ import {stdToml} from "forge-std/StdToml.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ERC1967Upgrade} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol"; import {CONFIG_CONTRACTS_PATH, DEFAULT_DEPLOYMENT_SALT, DETERMINISTIC_DEPLOYMENT_PROXY_ADDR} from "./Constants.sol"; import {Configuration} from "./Configuration.sol"; @@ -115,7 +116,9 @@ abstract contract DeterminsticDeployment is Configuration { address proxyAddr, address implAddr ) internal { - if (!skipDeploy) { + address addr = _getImplementation(proxyAddr); + + if (!skipDeploy && addr != implAddr) { ProxyAdmin(notnull(proxyAdminAddr)).upgrade( ITransparentUpgradeableProxy(notnull(proxyAddr)), notnull(implAddr) @@ -123,11 +126,16 @@ abstract contract DeterminsticDeployment is Configuration { } } + function getInitializeCount(address contractAddr) internal view returns (uint8) { + bytes32 slotValue = vm.load(address(contractAddr), bytes32(uint256(0))); + return uint8(uint256(slotValue)); + } + /********************* * Private functions * *********************/ - function _getSalt(string memory name) internal view returns (bytes32) { + function _getSalt(string memory name) private view returns (bytes32) { return keccak256(abi.encodePacked(saltPrefix, name)); } @@ -148,11 +156,9 @@ abstract contract DeterminsticDeployment is Configuration { return addr; } - // revert if the contract is already deployed + // skip if the contract is already deployed if (addr.code.length > 0) { - revert( - string(abi.encodePacked("[ERROR] contract ", name, " (", vm.toString(addr), ") is already deployed")) - ); + return addr; } // deploy contract @@ -223,4 +229,11 @@ abstract contract DeterminsticDeployment is Configuration { } } } + + function _getImplementation(address proxyAddr) private view returns (address) { + // ERC1967Upgrade implementation slot + bytes32 _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + // get implementation address + return address(uint160(uint256(vm.load(address(proxyAddr), _IMPLEMENTATION_SLOT)))); + } } From 45bcd6cc1ad50a020e31bf48b6e215257d3b2e2e Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Mon, 29 Jul 2024 22:52:57 +0800 Subject: [PATCH 10/48] docs: manual deployment document (#17) --- docker/config-example.toml | 2 +- docs/manual-deployment.md | 86 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 docs/manual-deployment.md diff --git a/docker/config-example.toml b/docker/config-example.toml index 85a27435..8998aa53 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -8,7 +8,7 @@ CHAIN_ID_L2 = 222222 MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 -MAX_L1_MESSAGE_GAS_LIMIT = 10000 +MAX_L1_MESSAGE_GAS_LIMIT = 10000000 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 diff --git a/docs/manual-deployment.md b/docs/manual-deployment.md new file mode 100644 index 00000000..e33164bf --- /dev/null +++ b/docs/manual-deployment.md @@ -0,0 +1,86 @@ +# Manual Deployment @scroll-tech/scroll-contracts + +## Overview + +This document will guide you through manually deploying Scroll contracts to both layer 1 and layer 2 networks. + +### Requirements + +This repository requires `node` version>=20.12.2, `yarn` and `foundry` to be previously installed. + +- **Node.js:** https://nodejs.org/en/download/package-manager +- **Yarn:** https://www.npmjs.com/package/yarn +- **Foundry:** https://book.getfoundry.sh/getting-started/installation + +### Config + +1. Create directory `volume` on the root directory of the repo (all config file will be put or generated under this directory) + +```bash +mkdir volume +``` + +2. Create config file, and copy config variables from example file `./docker/config-example.toml` + +```bash +cp ./docker/config-example.toml ./volume/config.toml +``` + +If you've previously launched Scroll chain cocomponents using Scroll-SDK, you may already have a config.toml file. If so directly copy it to `./volume/config.toml`. +**Important Note: If you are launching a scroll chain through scroll-sdk, make sure this config.toml file stay same as the one used in scroll-sdk.** + +Details about the some important variables you may want to change: + +| Configuration Variable | Description | +| -------------------------------- | ---------------------------------------------------------------------------------------- | +| L1_RPC_ENDPOINT | The RPC endpoint for the layer 1 network | +| L2_RPC_ENDPOINT | The RPC endpoint for the layer 2 network | +| CHAIN_ID_L1 | The chain ID of the layer 1 network | +| CHAIN_ID_L2 | The chain ID of the layer 2 network | +| DEPLOYER_PRIVATE_KEY | The private key of the deployer on both layer 1 and layer 2 | +| OWNER_PRIVATE_KEY | The private key of the owner of Scroll contracts on both layer 1 and layer 2 | +| L1_COMMIT_SENDER_PRIVATE_KEY | The private key of the commit sender (sequencer) on layer 1 | +| L1_FINALIZE_SENDER_PRIVATE_KEY | The private key of the finalize sender (prover) on layer 1 | +| L1_GAS_ORACLE_SENDER_PRIVATE_KEY | The private key of the gas oracle sender on layer 1 | +| L2_GAS_ORACLE_SENDER_PRIVATE_KEY | The private key of the gas oracle sender on layer 2 | +| DEPLOYER_ADDR | The address of the deployer on both layer 1 and layer 2 | +| OWNER_ADDR | The address of the owner of Scroll contracts on both layer 1 and layer 2 | +| L1_COMMIT_SENDER_ADDR | The address of the commit sender (sequencer) on layer 1 | +| L1_FINALIZE_SENDER_ADDR | The address of the finalize sender (prover) on layer 1 | +| L1_GAS_ORACLE_SENDER_ADDR | The address of the gas oracle sender on layer 1 | +| L2_GAS_ORACLE_SENDER_ADDR | The address of the gas oracle sender on layer 2 | +| DEPLOYMENT_SALT | The salt used to deploy contracts, make it unique to prevent contract address collisions | +| L1_CONTRACT_DEPLOYMENT_BLOCK | The block that l2-sequencer and bridge-history-fetcher start to sync contracts event | + +### Deploy + +1. Install packages + +```bash +yarn install +``` + +2. Initialize git submodules. + +```bash +git submodule update --init --recursive +``` + +3. Set and export environment variables (Change the RPCs to the one you are using) + +```bash +export L1_RPC_ENDPOINT=http://l1-devnet.scrollsdk +export L2_RPC_ENDPOINT=http://l2-rpc.scrollsdk +``` + +4. Generate predicted contract addresses (This step required mainly because we are checking if every contracts deployed as we expected) + +```bash +forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" +``` + +5. Deploy contracts on both layer1 and layer2 (Deployment may be interrupted by errors. Rerun the command to resume in such cases.) + +```bash +./docker/scripts/deploy.sh +``` From 51f99175480a9f92109fcac0fe51a0b205eace4c Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Tue, 30 Jul 2024 00:24:49 +0800 Subject: [PATCH 11/48] fix: generate startHeight for bridge-history config (#18) --- docker/templates/bridge-history-config.json | 2 +- scripts/deterministic/GenerateConfigs.s.sol | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docker/templates/bridge-history-config.json b/docker/templates/bridge-history-config.json index de8f0a6c..5ae1a9ea 100644 --- a/docker/templates/bridge-history-config.json +++ b/docker/templates/bridge-history-config.json @@ -2,7 +2,7 @@ "L1": { "confirmation": 0, "endpoint": null, - "startHeight": 0, + "startHeight": null, "blockTime": 12, "fetchLimit": 16, "MessageQueueAddr": null, diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index bb1fc900..f437f481 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -203,6 +203,7 @@ contract GenerateBridgeHistoryConfig is DeployScroll { // others vm.writeJson(BRIDGE_HISTORY_DB_CONNECTION_STRING, BRIDGE_HISTORY_CONFIG_PATH, ".db.dsn"); + vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), BRIDGE_HISTORY_CONFIG_PATH, ".L1.startHeight"); } } From cc9b57908fa4286301e88eda655e259d1822db10 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 31 Jul 2024 04:45:45 +0800 Subject: [PATCH 12/48] fix: rollup config file --- docker/templates/rollup-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 5fc6aeb3..ef7dd38f 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -52,7 +52,7 @@ "enabled": true, "timeout": 3, "try_times": 5, - "base_url": "http://chain-monitorv2:8080" + "base_url": "http://chain-monitor:8080" }, "enable_test_env_bypass_features": null, "finalize_batch_without_proof_timeout_sec": null, From 1da60676cf770319cb86191aa8042b1e71faddf1 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 31 Jul 2024 23:07:58 +0800 Subject: [PATCH 13/48] fix: dockerfile gen-config --- docker/Dockerfile.gen-configs | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs index 95f0c86c..b9c5e63b 100644 --- a/docker/Dockerfile.gen-configs +++ b/docker/Dockerfile.gen-configs @@ -47,6 +47,7 @@ COPY ./docker/templates/config-contracts.toml /contracts/docker/templates/config COPY ./docker/templates/coordinator-config.json /contracts/docker/templates/coordinator-config.json COPY ./docker/templates/genesis.json /contracts/docker/templates/genesis.json COPY ./docker/templates/rollup-config.json /contracts/docker/templates/rollup-config.json +COPY ./docker/templates/rollup-explorer-backend-config.json /contracts/docker/templates/rollup-explorer-backend-config.json COPY ./docker/scripts/gen-configs.sh /contracts/docker/scripts/gen-configs.sh From 2fc37bdd9faa989ff1298acffc17446d2acb52fa Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 1 Aug 2024 17:30:03 +0800 Subject: [PATCH 14/48] feat: read max_chunks_per_batch from config.toml --- docker/config-example.toml | 1 + docker/templates/rollup-config.json | 4 ++-- scripts/deterministic/Configuration.sol | 2 ++ scripts/deterministic/GenerateConfigs.s.sol | 1 + 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index 8998aa53..0d57e662 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -8,6 +8,7 @@ CHAIN_ID_L2 = 222222 MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 +MAX_CHUNK_IN_BATCH = 15 MAX_L1_MESSAGE_GAS_LIMIT = 10000000 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index ef7dd38f..54ee2733 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -49,7 +49,7 @@ "gas_price_diff": 50000 }, "chain_monitor": { - "enabled": true, + "enabled": false, "timeout": 3, "try_times": 5, "base_url": "http://chain-monitor:8080" @@ -72,7 +72,7 @@ "max_uncompressed_batch_bytes_size": 634880 }, "batch_proposer_config": { - "max_chunk_num_per_batch": 15, + "max_chunk_num_per_batch": null, "max_l1_commit_gas_per_batch": 5000000, "max_l1_commit_calldata_size_per_batch": 110000, "batch_timeout_sec": 2700, diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index a39f6828..8d7fbe5e 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -31,6 +31,7 @@ abstract contract Configuration is Script { uint256 internal MAX_TX_IN_CHUNK; uint256 internal MAX_BLOCK_IN_CHUNK; + uint256 internal MAX_CHUNK_IN_BATCH; uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; @@ -104,6 +105,7 @@ abstract contract Configuration is Script { MAX_TX_IN_CHUNK = cfg.readUint(".general.MAX_TX_IN_CHUNK"); MAX_BLOCK_IN_CHUNK = cfg.readUint(".general.MAX_BLOCK_IN_CHUNK"); + MAX_CHUNK_IN_BATCH = cfg.readUint(".general.MAX_CHUNK_IN_BATCH"); MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".general.MAX_L1_MESSAGE_GAS_LIMIT"); L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index f437f481..5e055de4 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -56,6 +56,7 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); + vm.writeJson(vm.toString(MAX_CHUNK_IN_BATCH), ROLLUP_CONFIG_PATH, ".l2_config.batch_proposer_config.max_chunk_num_per_batch"); vm.writeJson(SCROLL_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); } From 1f9cdd7e38de85d0a0995fef1935a9a8c0b9ea33 Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 1 Aug 2024 19:40:24 +0800 Subject: [PATCH 15/48] feat: log broadcast files --- docker/scripts/deploy.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docker/scripts/deploy.sh b/docker/scripts/deploy.sh index 7a0df77a..6441b2be 100755 --- a/docker/scripts/deploy.sh +++ b/docker/scripts/deploy.sh @@ -44,3 +44,14 @@ forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L echo "" echo "deploying on L2" forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$L2_RPC_ENDPOINT" --batch-size "$BATCH_SIZE" --sig "run(string,string)" "L2" "verify-config" --broadcast --legacy || exit 1 + +# log broadcast files +echo "" +echo "Broadcast files:" +for file in broadcast/DeployScroll.s.sol/*/*; do + if [ -f "$file" ]; then + echo "$file:" + cat "$file" + echo "" + fi +done \ No newline at end of file From 244dc4fe200592c07518cbf190ea364e32813a7c Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 7 Aug 2024 20:38:26 +0800 Subject: [PATCH 16/48] feat: change name and placement of env.frontend --- scripts/deterministic/Constants.sol | 5 ++++- scripts/deterministic/GenerateConfigs.s.sol | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 58395a57..0e8a9492 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -33,5 +33,8 @@ string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.json"; string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json"; string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; -string constant FRONTEND_ENV_PATH = "./volume/.env.frontend"; +string constant FRONTEND_ENV_PATH = "./volume/configs/frontends.env"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; + +// config directory +string constant CONFIG_DIR_PATH = "./volume/configs"; diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 5e055de4..d7c25a43 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; -import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; +import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH, CONFIG_DIR_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; contract GenerateRollupConfig is DeployScroll { @@ -272,6 +272,7 @@ contract GenerateFrontendConfig is DeployScroll { // prettier-ignore function generateFrontendConfig() private { // use writeFile to start a new file + vm.createDir(CONFIG_DIR_PATH, true); vm.writeFile(FRONTEND_ENV_PATH, "REACT_APP_ETH_SYMBOL = \"ETH\"\n"); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BASE_CHAIN = \"Ethereum\""); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUP = \"Scroll Stack\""); From b08cdc584485613a0ab097d44602321d002e393f Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 15 Aug 2024 07:03:15 +0800 Subject: [PATCH 17/48] Revert "feat: change name and placement of env.frontend" --- scripts/deterministic/Constants.sol | 5 +---- scripts/deterministic/GenerateConfigs.s.sol | 3 +-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 0e8a9492..58395a57 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -33,8 +33,5 @@ string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.json"; string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json"; string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; -string constant FRONTEND_ENV_PATH = "./volume/configs/frontends.env"; +string constant FRONTEND_ENV_PATH = "./volume/.env.frontend"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; - -// config directory -string constant CONFIG_DIR_PATH = "./volume/configs"; diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index d7c25a43..5e055de4 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; -import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH, CONFIG_DIR_PATH} from "./Constants.sol"; +import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; contract GenerateRollupConfig is DeployScroll { @@ -272,7 +272,6 @@ contract GenerateFrontendConfig is DeployScroll { // prettier-ignore function generateFrontendConfig() private { // use writeFile to start a new file - vm.createDir(CONFIG_DIR_PATH, true); vm.writeFile(FRONTEND_ENV_PATH, "REACT_APP_ETH_SYMBOL = \"ETH\"\n"); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BASE_CHAIN = \"Ethereum\""); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUP = \"Scroll Stack\""); From 4ca3a3cb017858bd2cfe96ad1a0d573e4b64ef67 Mon Sep 17 00:00:00 2001 From: Morty Date: Tue, 20 Aug 2024 20:32:17 +0800 Subject: [PATCH 18/48] fix: set l2 deployer balance in genesis --- scripts/deterministic/GenerateGenesis.s.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index f51e374c..04dc917f 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -186,7 +186,7 @@ contract GenerateGenesis is DeployScroll { } function setL2Deployer() internal { - vm.deal(OWNER_ADDR, L2_DEPLOYER_INITIAL_BALANCE); + vm.deal(DEPLOYER_ADDR, L2_DEPLOYER_INITIAL_BALANCE); } function generateGenesisJson() private { From 65c5b4ea62758afd5f86aaeb68260aad4c0d5012 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 21 Aug 2024 01:15:04 +0800 Subject: [PATCH 19/48] feat: alternative gas token (#20) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: zimpha Co-authored-by: Péter Garamvölgyi --- docker/config-example.toml | 4 + docker/scripts/deploy.sh | 5 - docker/scripts/gen-configs.sh | 19 +- docker/templates/bridge-history-config.json | 4 +- docker/templates/chain-monitor-config.json | 8 +- docker/templates/config-contracts.toml | 4 + docker/templates/rollup-config.json | 2 +- scripts/deterministic/Configuration.sol | 4 + scripts/deterministic/DeployScroll.s.sol | 284 +++++++++- scripts/deterministic/GenerateConfigs.s.sol | 8 + src/L1/L1ScrollMessenger.sol | 172 ++++--- src/L1/gateways/L1ETHGateway.sol | 2 +- src/alternative-gas-token/GasTokenExample.sol | 24 + .../L1GasTokenGateway.sol | 186 +++++++ .../L1ScrollMessengerNonETH.sol | 243 +++++++++ .../L1WrappedTokenGateway.sol | 100 ++++ .../AlternativeGasTokenTestBase.t.sol | 272 ++++++++++ .../GasTokenDecimalGateway.t.sol | 481 +++++++++++++++++ .../L1ScrollMessengerNonETH.t.sol | 486 ++++++++++++++++++ .../L1WrappedTokenGateway.t.sol | 106 ++++ 20 files changed, 2300 insertions(+), 114 deletions(-) create mode 100644 src/alternative-gas-token/GasTokenExample.sol create mode 100644 src/alternative-gas-token/L1GasTokenGateway.sol create mode 100644 src/alternative-gas-token/L1ScrollMessengerNonETH.sol create mode 100644 src/alternative-gas-token/L1WrappedTokenGateway.sol create mode 100644 src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol create mode 100644 src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol create mode 100644 src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol create mode 100644 src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol diff --git a/docker/config-example.toml b/docker/config-example.toml index 0d57e662..09df81db 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -13,6 +13,9 @@ MAX_L1_MESSAGE_GAS_LIMIT = 10000000 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 +ALTERNATIVE_GAS_TOKEN_ENABLED = true +# EXAMPLE_GAS_TOKEN_DECIMAL = 6 + TEST_ENV_MOCK_FINALIZE_ENABLED = true TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 3600 @@ -64,6 +67,7 @@ L1_PLONK_VERIFIER_ADDR = "0x0000000000000000000000000000000000000001" [contracts.overrides] # L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" +# L1_GAS_TOKEN = "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" diff --git a/docker/scripts/deploy.sh b/docker/scripts/deploy.sh index 6441b2be..286dcd17 100755 --- a/docker/scripts/deploy.sh +++ b/docker/scripts/deploy.sh @@ -13,11 +13,6 @@ if [ "$L2_RPC_ENDPOINT" = "" ]; then L2_RPC_ENDPOINT="http://host.docker.internal:8545" fi -if [ "${L1_RPC_ENDPOINT}" = "" ]; then - echo "L1_RPC_ENDPOINT is not set" - L1_RPC_ENDPOINT="http://host.docker.internal:8543" -fi - if [ "${BATCH_SIZE}" = "" ]; then BATCH_SIZE="100" fi diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index 0a42c787..43167a64 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -1,8 +1,25 @@ #!/bin/bash +# the deployment of the L1GasTokenGateway implementation necessitates fetching the gas token decimal +# in this case it requires the context of layer 1 +gen_config_contracts_toml() { + config_file="./volume/config.toml" + gas_token_addr=$(grep -E "^L1_GAS_TOKEN =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) + gas_token_enabled=$(grep -E "^ALTERNATIVE_GAS_TOKEN_ENABLED =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) + l1_rpc_url=$(grep -E "^L1_RPC_ENDPOINT =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | sed 's/"//g') + + if [[ "$gas_token_enabled" == "true" && "$gas_token_addr" != "" && "$gas_token_addr" != "0x0000000000000000000000000000000000000000" ]]; then + echo "gas token enabled and address provided" + forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --rpc-url "$l1_rpc_url" --sig "run(string,string)" "none" "write-config" || exit 1 + else + echo "gas token disabled or address not provided" + forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" || exit 1 + fi +} + echo "" echo "generating config-contracts.toml" -forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" || exit 1 +gen_config_contracts_toml echo "" echo "generating genesis.json" diff --git a/docker/templates/bridge-history-config.json b/docker/templates/bridge-history-config.json index 5ae1a9ea..f625a310 100644 --- a/docker/templates/bridge-history-config.json +++ b/docker/templates/bridge-history-config.json @@ -18,7 +18,9 @@ "USDCGatewayAddr": "0x0000000000000000000000000000000000000000", "LIDOGatewayAddr": "0x0000000000000000000000000000000000000000", "DAIGatewayAddr": "0x0000000000000000000000000000000000000000", - "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" + "PufferGatewayAddr": "0x0000000000000000000000000000000000000000", + "GasTokenGatewayAddr": null, + "WrappedTokenGatewayAddr": null }, "L2": { "confirmation": 0, diff --git a/docker/templates/chain-monitor-config.json b/docker/templates/chain-monitor-config.json index 09fb89bc..1bc7fba8 100644 --- a/docker/templates/chain-monitor-config.json +++ b/docker/templates/chain-monitor-config.json @@ -14,13 +14,15 @@ "dai_gateway": "0x0000000000000000000000000000000000000000", "usdc_gateway": "0x0000000000000000000000000000000000000000", "lido_gateway": "0x0000000000000000000000000000000000000000", - "puffer_gateway": "0x0000000000000000000000000000000000000000" + "puffer_gateway": "0x0000000000000000000000000000000000000000", + "gas_token_gateway": null }, "scroll_messenger": null, "message_queue": null, - "scroll_chain": null + "scroll_chain": null, + "gas_token": null }, - "start_messenger_balance": null + "start_messenger_balance": 0 }, "l2_config": { "l2_url": null, diff --git a/docker/templates/config-contracts.toml b/docker/templates/config-contracts.toml index b0681a0e..998003c7 100644 --- a/docker/templates/config-contracts.toml +++ b/docker/templates/config-contracts.toml @@ -23,6 +23,10 @@ L1_ERC721_GATEWAY_PROXY_ADDR = "" L1_ERC1155_GATEWAY_PROXY_ADDR = "" L2_MESSAGE_QUEUE_ADDR = "" L1_GAS_PRICE_ORACLE_ADDR = "" +L1_GAS_TOKEN_ADDR = "" +L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = "" +L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = "" +L1_WRAPPED_TOKEN_GATEWAY_ADDR = "" L2_WHITELIST_ADDR = "" L2_WETH_ADDR = "" L2_TX_FEE_VAULT_ADDR = "" diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 54ee2733..9c093bb2 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -49,7 +49,7 @@ "gas_price_diff": 50000 }, "chain_monitor": { - "enabled": false, + "enabled": true, "timeout": 3, "try_times": 5, "base_url": "http://chain-monitor:8080" diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 8d7fbe5e..ab72a7ed 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -36,6 +36,8 @@ abstract contract Configuration is Script { uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; + bool internal ALTERNATIVE_GAS_TOKEN_ENABLED; + bool internal TEST_ENV_MOCK_FINALIZE_ENABLED; uint256 internal TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC; @@ -110,6 +112,8 @@ abstract contract Configuration is Script { L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); + ALTERNATIVE_GAS_TOKEN_ENABLED = cfg.readBool(".general.ALTERNATIVE_GAS_TOKEN_ENABLED"); + TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".general.TEST_ENV_MOCK_FINALIZE_ENABLED"); TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".general.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 528cb7f8..fac74df2 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1,6 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; +import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; @@ -21,6 +22,10 @@ import {L2GasPriceOracle} from "../../src/L1/rollup/L2GasPriceOracle.sol"; import {MultipleVersionRollupVerifier} from "../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol"; import {ZkEvmVerifierV1} from "../../src/libraries/verifier/ZkEvmVerifierV1.sol"; +import {GasTokenExample} from "../../src/alternative-gas-token/GasTokenExample.sol"; +import {L1ScrollMessengerNonETH} from "../../src/alternative-gas-token/L1ScrollMessengerNonETH.sol"; +import {L1GasTokenGateway} from "../../src/alternative-gas-token/L1GasTokenGateway.sol"; +import {L1WrappedTokenGateway} from "../../src/alternative-gas-token/L1WrappedTokenGateway.sol"; import {L2CustomERC20Gateway} from "../../src/L2/gateways/L2CustomERC20Gateway.sol"; import {L2ERC1155Gateway} from "../../src/L2/gateways/L2ERC1155Gateway.sol"; @@ -76,6 +81,8 @@ contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { } contract DeployScroll is DeterminsticDeployment { + using stdToml for string; + /********* * Types * *********/ @@ -128,6 +135,10 @@ contract DeployScroll is DeterminsticDeployment { address internal L1_ZKEVM_VERIFIER_V1_ADDR; address internal L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR; address internal L2_GAS_PRICE_ORACLE_PROXY_ADDR; + address internal L1_GAS_TOKEN_ADDR; + address internal L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR; + address internal L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; + address internal L1_WRAPPED_TOKEN_GATEWAY_ADDR; // L2 addresses address internal L1_GAS_PRICE_ORACLE_ADDR; @@ -186,6 +197,14 @@ contract DeployScroll is DeterminsticDeployment { _; } + /// @dev Only execute block if it's requied by alternative gas token mode. + modifier gasToken(bool gasTokenRequire) { + if (ALTERNATIVE_GAS_TOKEN_ENABLED != gasTokenRequire) { + return; + } + _; + } + /*************** * Entry point * ***************/ @@ -223,23 +242,88 @@ contract DeployScroll is DeterminsticDeployment { } } - function checkDeployerBalance() private view { + function checkDeployerBalance() private { // ignore balance during simulation if (broadcastLayer == Layer.None) { return; } + // check funds for deployment (L1 & L2) if (DEPLOYER_ADDR.balance < MINIMUM_DEPLOYER_BALANCE) { revert( string( abi.encodePacked( - "[ERROR] insufficient funds on deployer account (", + "[ERROR] insufficient funds on deployer account for contract deployment (", vm.toString(DEPLOYER_ADDR), - ")" + ") minimum ETH balance (in wei): ", + vm.toString(MINIMUM_DEPLOYER_BALANCE) ) ) ); } + + // check funds for initial deposit (L1, ETH as gas token) + if (broadcastLayer == Layer.L1 && !ALTERNATIVE_GAS_TOKEN_ENABLED) { + uint256 l1MessengerBalance = address(L1_SCROLL_MESSENGER_PROXY_ADDR).balance; + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE; + + uint256 amountToSend = 0; + if (l1MessengerBalance < amountToLock) { + amountToSend = amountToLock - l1MessengerBalance; + } + + uint256 minBalance = MINIMUM_DEPLOYER_BALANCE + amountToSend; + + if (DEPLOYER_ADDR.balance < minBalance) { + revert( + string( + abi.encodePacked( + "[ERROR] insufficient funds on deployer account for initial deposit (", + vm.toString(DEPLOYER_ADDR), + ") minimum ETH balance (in wei): ", + vm.toString(minBalance) + ) + ) + ); + } + } + + // check funds for initial deposit (L1, alternative gas token) + // skip it if L1_GAS_TOKEN is not configured in the config file + address gasTokenAddr = tryGetOverride("L1_GAS_TOKEN"); + if (broadcastLayer == Layer.L1 && ALTERNATIVE_GAS_TOKEN_ENABLED && gasTokenAddr != address(0)) { + uint256 l1GasTokenGatewayBalance = IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf( + L1_GAS_TOKEN_GATEWAY_PROXY_ADDR + ); + + uint256 scale = 10**(18 - IERC20Metadata(L1_GAS_TOKEN_ADDR).decimals()); + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE / scale; + if (L2_DEPLOYER_INITIAL_BALANCE % scale != 0) { + amountToLock += 1; + } + + uint256 amountToSend = 0; + if (l1GasTokenGatewayBalance < amountToLock) { + amountToSend = amountToLock - l1GasTokenGatewayBalance; + } + + uint256 minBalance = amountToSend; + + if (IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf(DEPLOYER_ADDR) < minBalance) { + revert( + string( + abi.encodePacked( + "[ERROR] insufficient funds on deployer account for initial deposit (", + vm.toString(DEPLOYER_ADDR), + ") minimum ", + IERC20Metadata(L1_GAS_TOKEN_ADDR).symbol(), + " balance (in min token unit): ", + vm.toString(minBalance) + ) + ) + ); + } + } } function deployAllContracts() private { @@ -270,6 +354,10 @@ contract DeployScroll is DeterminsticDeployment { deployL1CustomERC20GatewayProxy(); deployL1ERC721GatewayProxy(); deployL1ERC1155GatewayProxy(); + + // alternative gas token contracts + deployGasToken(); + deployL1GasTokenGatewayProxy(); } // @notice deployL2Contracts1stPass deploys L2 contracts whose initialization does not depend on any L1 addresses. @@ -300,6 +388,10 @@ contract DeployScroll is DeterminsticDeployment { deployL1CustomERC20Gateway(); deployL1ERC721Gateway(); deployL1ERC1155Gateway(); + + // alternative gas token contracts + deployL1GasTokenGateway(); + deployL1WrappedTokenGateway(); } // @notice deployL2Contracts2ndPass deploys L2 contracts whose initialization depends on some L1 addresses. @@ -331,6 +423,14 @@ contract DeployScroll is DeterminsticDeployment { initializeL1WETHGateway(); initializeL1Whitelist(); + // alternative gas token contracts + initializeL1GasTokenGateway(); + + // lock tokens on L1 to ensure bridge parity, + // we lock ETH in L1ScrollMessenger or GAS_TOKEN in L1GasTokenGateway + // note: this can only be done before transferring ownership + lockTokensOnL1(); + transferL1ContractOwnership(); } @@ -527,7 +627,7 @@ contract DeployScroll is DeterminsticDeployment { ); } - function deployL1ETHGatewayProxy() private { + function deployL1ETHGatewayProxy() private gasToken(false) { bytes memory args = abi.encode( notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), notnull(L1_PROXY_ADMIN_ADDR), @@ -541,7 +641,7 @@ contract DeployScroll is DeterminsticDeployment { ); } - function deployL1WETHGatewayProxy() private { + function deployL1WETHGatewayProxy() private gasToken(false) { bytes memory args = abi.encode( notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), notnull(L1_PROXY_ADMIN_ADDR), @@ -611,6 +711,38 @@ contract DeployScroll is DeterminsticDeployment { ); } + function deployGasToken() private gasToken(true) { + uint8 decimal = 18; + string memory key = ".general.EXAMPLE_GAS_TOKEN_DECIMAL"; + if (vm.keyExistsToml(cfg, key)) { + decimal = uint8(cfg.readUint(key)); + } + + bytes memory args = abi.encode( + "ScrollGasToken", // _name + "GasToken", // _symbol + decimal, // _decimals + DEPLOYER_ADDR, // _recipient + 10**28 // _amount + ); + + L1_GAS_TOKEN_ADDR = deploy("L1_GAS_TOKEN", type(GasTokenExample).creationCode, args); + } + + function deployL1GasTokenGatewayProxy() private gasToken(true) { + bytes memory args = abi.encode( + notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), + notnull(L1_PROXY_ADMIN_ADDR), + new bytes(0) + ); + + L1_GAS_TOKEN_GATEWAY_PROXY_ADDR = deploy( + "L1_GAS_TOKEN_GATEWAY_PROXY", + type(TransparentUpgradeableProxy).creationCode, + args + ); + } + /*************************** * L2: 1st pass deployment * ***************************/ @@ -693,7 +825,7 @@ contract DeployScroll is DeterminsticDeployment { ); } - function deployL2WETHGatewayProxy() private { + function deployL2WETHGatewayProxy() private gasToken(false) { bytes memory args = abi.encode( notnull(L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), notnull(L2_PROXY_ADMIN_ADDR), @@ -765,22 +897,37 @@ contract DeployScroll is DeterminsticDeployment { ***************************/ function deployL1ScrollMessenger() private { - bytes memory args = abi.encode( - notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), - notnull(L1_SCROLL_CHAIN_PROXY_ADDR), - notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) - ); + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { + bytes memory args = abi.encode( + notnull(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR), + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) + ); - L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( - "L1_SCROLL_MESSENGER_IMPLEMENTATION", - type(L1ScrollMessenger).creationCode, - args - ); + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L1_SCROLL_MESSENGER_IMPLEMENTATION", + type(L1ScrollMessengerNonETH).creationCode, + args + ); + } else { + bytes memory args = abi.encode( + notnull(L2_SCROLL_MESSENGER_PROXY_ADDR), + notnull(L1_SCROLL_CHAIN_PROXY_ADDR), + notnull(L1_MESSAGE_QUEUE_PROXY_ADDR) + ); + + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR = deploy( + "L1_SCROLL_MESSENGER_IMPLEMENTATION", + type(L1ScrollMessenger).creationCode, + args + ); + } upgrade(L1_PROXY_ADMIN_ADDR, L1_SCROLL_MESSENGER_PROXY_ADDR, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); } - function deployL1ETHGateway() private { + function deployL1ETHGateway() private gasToken(false) { bytes memory args = abi.encode( notnull(L2_ETH_GATEWAY_PROXY_ADDR), notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), @@ -796,7 +943,7 @@ contract DeployScroll is DeterminsticDeployment { upgrade(L1_PROXY_ADMIN_ADDR, L1_ETH_GATEWAY_PROXY_ADDR, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); } - function deployL1WETHGateway() private { + function deployL1WETHGateway() private gasToken(false) { bytes memory args = abi.encode( notnull(L1_WETH_ADDR), notnull(L2_WETH_ADDR), @@ -876,6 +1023,33 @@ contract DeployScroll is DeterminsticDeployment { upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC1155_GATEWAY_PROXY_ADDR, L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); } + function deployL1GasTokenGateway() private gasToken(true) { + bytes memory args = abi.encode( + notnull(L1_GAS_TOKEN_ADDR), + notnull(L2_ETH_GATEWAY_PROXY_ADDR), + notnull(L1_GATEWAY_ROUTER_PROXY_ADDR), + notnull(L1_SCROLL_MESSENGER_PROXY_ADDR) + ); + + L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR = deploy( + "L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION", + type(L1GasTokenGateway).creationCode, + args + ); + + upgrade(L1_PROXY_ADMIN_ADDR, L1_GAS_TOKEN_GATEWAY_PROXY_ADDR, L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR); + } + + function deployL1WrappedTokenGateway() private gasToken(true) { + bytes memory args = abi.encode(notnull(L1_WETH_ADDR), notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR)); + + L1_WRAPPED_TOKEN_GATEWAY_ADDR = deploy( + "L1_WRAPPED_TOKEN_GATEWAY", + type(L1WrappedTokenGateway).creationCode, + args + ); + } + /*************************** * L2: 2nd pass deployment * ***************************/ @@ -933,8 +1107,14 @@ contract DeployScroll is DeterminsticDeployment { } function deployL2ETHGateway() private { + address COUNTERPART; + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { + COUNTERPART = L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; + } else { + COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + } bytes memory args = abi.encode( - notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(COUNTERPART), notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) ); @@ -948,7 +1128,7 @@ contract DeployScroll is DeterminsticDeployment { upgrade(L2_PROXY_ADMIN_ADDR, L2_ETH_GATEWAY_PROXY_ADDR, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); } - function deployL2WETHGateway() private { + function deployL2WETHGateway() private gasToken(false) { bytes memory args = abi.encode( notnull(L2_WETH_ADDR), notnull(L1_WETH_ADDR), @@ -1084,9 +1264,15 @@ contract DeployScroll is DeterminsticDeployment { } function initializeL1GatewayRouter() private { + address L2_ETH_GATEWAY_COUNTERPART; + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { + L2_ETH_GATEWAY_COUNTERPART = L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; + } else { + L2_ETH_GATEWAY_COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + } if (getInitializeCount(L1_GATEWAY_ROUTER_PROXY_ADDR) == 0) { L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( - notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(L2_ETH_GATEWAY_COUNTERPART), notnull(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) ); } @@ -1120,7 +1306,7 @@ contract DeployScroll is DeterminsticDeployment { } } - function initializeL1ETHGateway() private { + function initializeL1ETHGateway() private gasToken(false) { if (getInitializeCount(L1_ETH_GATEWAY_PROXY_ADDR) == 0) { L1ETHGateway(L1_ETH_GATEWAY_PROXY_ADDR).initialize( notnull(L2_ETH_GATEWAY_PROXY_ADDR), @@ -1142,7 +1328,7 @@ contract DeployScroll is DeterminsticDeployment { } } - function initializeL1WETHGateway() private { + function initializeL1WETHGateway() private gasToken(false) { if (getInitializeCount(L1_WETH_GATEWAY_PROXY_ADDR) == 0) { L1WETHGateway(payable(L1_WETH_GATEWAY_PROXY_ADDR)).initialize( notnull(L2_WETH_GATEWAY_PROXY_ADDR), @@ -1171,6 +1357,39 @@ contract DeployScroll is DeterminsticDeployment { } } + function initializeL1GasTokenGateway() private gasToken(true) { + if (getInitializeCount(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR) == 0) { + L1GasTokenGateway(payable(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR)).initialize(); + } + } + + function lockTokensOnL1() private { + if (!ALTERNATIVE_GAS_TOKEN_ENABLED) { + uint256 l1MessengerBalance = address(L1_SCROLL_MESSENGER_PROXY_ADDR).balance; + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE; + + if (l1MessengerBalance < amountToLock) { + uint256 amountToSend = amountToLock - l1MessengerBalance; + payable(L1_SCROLL_MESSENGER_PROXY_ADDR).transfer(amountToSend); + } + } else { + uint256 l1GasTokenGatewayBalance = IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf( + L1_GAS_TOKEN_GATEWAY_PROXY_ADDR + ); + + uint256 scale = 10**(18 - IERC20Metadata(L1_GAS_TOKEN_ADDR).decimals()); + uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE / scale; + if (L2_DEPLOYER_INITIAL_BALANCE % scale != 0) { + amountToLock += 1; + } + + if (l1GasTokenGatewayBalance < amountToLock) { + uint256 amountTosend = amountToLock - l1GasTokenGatewayBalance; + IERC20Metadata(L1_GAS_TOKEN_ADDR).transfer(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR, amountTosend); + } + } + } + function transferL1ContractOwnership() private { if (Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); @@ -1184,7 +1403,7 @@ contract DeployScroll is DeterminsticDeployment { if (Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); } - if (Ownable(L1_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L1_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); } if (Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).owner() != OWNER_ADDR) { @@ -1199,7 +1418,7 @@ contract DeployScroll is DeterminsticDeployment { if (Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); } - if (Ownable(L1_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L1_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); } if (Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).owner() != OWNER_ADDR) { @@ -1217,6 +1436,9 @@ contract DeployScroll is DeterminsticDeployment { if (Ownable(L1_WHITELIST_ADDR).owner() != OWNER_ADDR) { Ownable(L1_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); } + if (ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + Ownable(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + } } /********************** @@ -1287,9 +1509,15 @@ contract DeployScroll is DeterminsticDeployment { } function initializeL2ETHGateway() private { + address COUNTERPART; + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { + COUNTERPART = L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; + } else { + COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; + } if (getInitializeCount(L2_ETH_GATEWAY_PROXY_ADDR) == 0) { L2ETHGateway(L2_ETH_GATEWAY_PROXY_ADDR).initialize( - notnull(L1_ETH_GATEWAY_PROXY_ADDR), + notnull(COUNTERPART), notnull(L2_GATEWAY_ROUTER_PROXY_ADDR), notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) ); @@ -1307,7 +1535,7 @@ contract DeployScroll is DeterminsticDeployment { } } - function initializeL2WETHGateway() private { + function initializeL2WETHGateway() private gasToken(false) { if (getInitializeCount(L2_WETH_GATEWAY_PROXY_ADDR) == 0) { L2WETHGateway(payable(L2_WETH_GATEWAY_PROXY_ADDR)).initialize( notnull(L1_WETH_GATEWAY_PROXY_ADDR), @@ -1378,7 +1606,7 @@ contract DeployScroll is DeterminsticDeployment { if (Ownable(L2_TX_FEE_VAULT_ADDR).owner() != OWNER_ADDR) { Ownable(L2_TX_FEE_VAULT_ADDR).transferOwnership(OWNER_ADDR); } - if (Ownable(L2_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { + if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L2_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { Ownable(L2_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); } if (Ownable(L2_PROXY_ADMIN_ADDR).owner() != OWNER_ADDR) { diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 5e055de4..68d9f4b4 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -128,9 +128,11 @@ contract GenerateChainMonitorConfig is DeployScroll { vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.custom_erc20_gateway"); vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.erc721_gateway"); vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.erc1155_gateway"); + vm.writeJson(vm.toString(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.l1_gateways.gas_token_gateway"); vm.writeJson(vm.toString(L1_SCROLL_MESSENGER_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.scroll_messenger"); vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.message_queue"); vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.scroll_chain"); + vm.writeJson(vm.toString(L1_GAS_TOKEN_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.l1_contracts.gas_token"); vm.writeJson(vm.toString(L2_DEPLOYER_INITIAL_BALANCE), CHAIN_MONITOR_CONFIG_PATH, ".l1_config.start_messenger_balance"); // L2 @@ -186,6 +188,8 @@ contract GenerateBridgeHistoryConfig is DeployScroll { vm.writeJson(vm.toString(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.CustomERC20GatewayAddr"); vm.writeJson(vm.toString(L1_ERC721_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ERC721GatewayAddr"); vm.writeJson(vm.toString(L1_ERC1155_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.ERC1155GatewayAddr"); + vm.writeJson(vm.toString(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.GasTokenGatewayAddr"); + vm.writeJson(vm.toString(L1_WRAPPED_TOKEN_GATEWAY_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L1.WrappedTokenGatewayAddr"); // L2 contracts vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), BRIDGE_HISTORY_CONFIG_PATH, ".L2.MessageQueueAddr"); @@ -300,6 +304,10 @@ contract GenerateFrontendConfig is DeployScroll { vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR), "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_WETH_GATEWAY_PROXY_ADDR = \"", vm.toString(L1_WETH_GATEWAY_PROXY_ADDR), "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_SCROLL_CHAIN = \"", vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_GAS_TOKEN_GATEWAY = \"", vm.toString(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_WRAPPED_TOKEN_GATEWAY = \"", vm.toString(L1_WRAPPED_TOKEN_GATEWAY_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_GAS_TOKEN_ADDR = \"", vm.toString(L1_GAS_TOKEN_ADDR), "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_L1_WETH_ADDR = \"", vm.toString(L1_WETH_ADDR), "\"")); // L2 contracts vm.writeLine(FRONTEND_ENV_PATH, ""); diff --git a/src/L1/L1ScrollMessenger.sol b/src/L1/L1ScrollMessenger.sol index 544beb2b..498757ab 100644 --- a/src/L1/L1ScrollMessenger.sol +++ b/src/L1/L1ScrollMessenger.sol @@ -118,7 +118,7 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { address _feeVault, address _rollup, address _messageQueue - ) public initializer { + ) external initializer { ScrollMessengerBase.__ScrollMessengerBase_init(_counterpart, _feeVault); __rollup = _rollup; @@ -162,36 +162,7 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { bytes memory _message, L2MessageProof memory _proof ) external override whenNotPaused notInExecution { - bytes32 _xDomainCalldataHash = keccak256(_encodeXDomainCalldata(_from, _to, _value, _nonce, _message)); - require(!isL2MessageExecuted[_xDomainCalldataHash], "Message was already successfully executed"); - - { - require(IScrollChain(rollup).isBatchFinalized(_proof.batchIndex), "Batch is not finalized"); - bytes32 _messageRoot = IScrollChain(rollup).withdrawRoots(_proof.batchIndex); - require( - WithdrawTrieVerifier.verifyMerkleProof(_messageRoot, _xDomainCalldataHash, _nonce, _proof.merkleProof), - "Invalid proof" - ); - } - - // @note check more `_to` address to avoid attack in the future when we add more gateways. - require(_to != messageQueue, "Forbid to call message queue"); - _validateTargetAddress(_to); - - // @note This usually will never happen, just in case. - require(_from != xDomainMessageSender, "Invalid message sender"); - - xDomainMessageSender = _from; - (bool success, ) = _to.call{value: _value}(_message); - // reset value to refund gas. - xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; - - if (success) { - isL2MessageExecuted[_xDomainCalldataHash] = true; - emit RelayedMessage(_xDomainCalldataHash); - } else { - emit FailedRelayedMessage(_xDomainCalldataHash); - } + _relayMessageWithProof(_from, _to, _value, _nonce, _message, _proof); } /// @inheritdoc IL1ScrollMessenger @@ -266,48 +237,7 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { uint256 _messageNonce, bytes memory _message ) external override whenNotPaused notInExecution { - // The criteria for dropping a message: - // 1. The message is a L1 message. - // 2. The message has not been dropped before. - // 3. the message and all of its replacement are finalized in L1. - // 4. the message and all of its replacement are skipped. - // - // Possible denial of service attack: - // + replayMessage is called every time someone want to drop the message. - // + replayMessage is called so many times for a skipped message, thus results a long list. - // - // We limit the number of `replayMessage` calls of each message, which may solve the above problem. - - // check message exists - bytes memory _xDomainCalldata = _encodeXDomainCalldata(_from, _to, _value, _messageNonce, _message); - bytes32 _xDomainCalldataHash = keccak256(_xDomainCalldata); - require(messageSendTimestamp[_xDomainCalldataHash] > 0, "Provided message has not been enqueued"); - - // check message not dropped - require(!isL1MessageDropped[_xDomainCalldataHash], "Message already dropped"); - - // check message is finalized - uint256 _lastIndex = replayStates[_xDomainCalldataHash].lastIndex; - if (_lastIndex == 0) _lastIndex = _messageNonce; - - // check message is skipped and drop it. - // @note If the list is very long, the message may never be dropped. - while (true) { - IL1MessageQueue(messageQueue).dropCrossDomainMessage(_lastIndex); - _lastIndex = prevReplayIndex[_lastIndex]; - if (_lastIndex == 0) break; - unchecked { - _lastIndex = _lastIndex - 1; - } - } - - isL1MessageDropped[_xDomainCalldataHash] = true; - - // set execution context - xDomainMessageSender = ScrollConstants.DROP_XDOMAIN_MESSAGE_SENDER; - IMessageDropCallback(_from).onDropMessage{value: _value}(_message); - // clear execution context - xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + _dropMessage(_from, _to, _value, _messageNonce, _message); } /************************ @@ -328,13 +258,14 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { * Internal Functions * **********************/ + /// @dev Internal function to do `sendMessage` function call. function _sendMessage( address _to, uint256 _value, bytes memory _message, uint256 _gasLimit, address _refundAddress - ) internal nonReentrant { + ) internal virtual nonReentrant { // compute the actual cross domain message calldata. uint256 _messageNonce = IL1MessageQueue(messageQueue).nextCrossDomainMessageIndex(); bytes memory _xDomainCalldata = _encodeXDomainCalldata(_msgSender(), _to, _value, _messageNonce, _message); @@ -368,4 +299,97 @@ contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { } } } + + /// @dev Internal function to do `relayMessageWithProof` function call. + function _relayMessageWithProof( + address _from, + address _to, + uint256 _value, + uint256 _nonce, + bytes memory _message, + L2MessageProof memory _proof + ) internal virtual { + bytes32 _xDomainCalldataHash = keccak256(_encodeXDomainCalldata(_from, _to, _value, _nonce, _message)); + require(!isL2MessageExecuted[_xDomainCalldataHash], "Message was already successfully executed"); + + { + require(IScrollChain(rollup).isBatchFinalized(_proof.batchIndex), "Batch is not finalized"); + bytes32 _messageRoot = IScrollChain(rollup).withdrawRoots(_proof.batchIndex); + require( + WithdrawTrieVerifier.verifyMerkleProof(_messageRoot, _xDomainCalldataHash, _nonce, _proof.merkleProof), + "Invalid proof" + ); + } + + // @note check more `_to` address to avoid attack in the future when we add more gateways. + require(_to != messageQueue, "Forbid to call message queue"); + _validateTargetAddress(_to); + + // @note This usually will never happen, just in case. + require(_from != xDomainMessageSender, "Invalid message sender"); + + xDomainMessageSender = _from; + (bool success, ) = _to.call{value: _value}(_message); + // reset value to refund gas. + xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + + if (success) { + isL2MessageExecuted[_xDomainCalldataHash] = true; + emit RelayedMessage(_xDomainCalldataHash); + } else { + emit FailedRelayedMessage(_xDomainCalldataHash); + } + } + + /// @dev Internal function to do `dropMessage` function call. + function _dropMessage( + address _from, + address _to, + uint256 _value, + uint256 _messageNonce, + bytes memory _message + ) internal virtual { + // The criteria for dropping a message: + // 1. The message is a L1 message. + // 2. The message has not been dropped before. + // 3. the message and all of its replacement are finalized in L1. + // 4. the message and all of its replacement are skipped. + // + // Possible denial of service attack: + // + replayMessage is called every time someone want to drop the message. + // + replayMessage is called so many times for a skipped message, thus results a long list. + // + // We limit the number of `replayMessage` calls of each message, which may solve the above problem. + + // check message exists + bytes memory _xDomainCalldata = _encodeXDomainCalldata(_from, _to, _value, _messageNonce, _message); + bytes32 _xDomainCalldataHash = keccak256(_xDomainCalldata); + require(messageSendTimestamp[_xDomainCalldataHash] > 0, "Provided message has not been enqueued"); + + // check message not dropped + require(!isL1MessageDropped[_xDomainCalldataHash], "Message already dropped"); + + // check message is finalized + uint256 _lastIndex = replayStates[_xDomainCalldataHash].lastIndex; + if (_lastIndex == 0) _lastIndex = _messageNonce; + + // check message is skipped and drop it. + // @note If the list is very long, the message may never be dropped. + while (true) { + IL1MessageQueue(messageQueue).dropCrossDomainMessage(_lastIndex); + _lastIndex = prevReplayIndex[_lastIndex]; + if (_lastIndex == 0) break; + unchecked { + _lastIndex = _lastIndex - 1; + } + } + + isL1MessageDropped[_xDomainCalldataHash] = true; + + // set execution context + xDomainMessageSender = ScrollConstants.DROP_XDOMAIN_MESSAGE_SENDER; + IMessageDropCallback(_from).onDropMessage{value: _value}(_message); + // clear execution context + xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + } } diff --git a/src/L1/gateways/L1ETHGateway.sol b/src/L1/gateways/L1ETHGateway.sol index c268a1ba..a522f2bf 100644 --- a/src/L1/gateways/L1ETHGateway.sol +++ b/src/L1/gateways/L1ETHGateway.sol @@ -14,7 +14,7 @@ import {ScrollGatewayBase} from "../../libraries/gateway/ScrollGatewayBase.sol"; /// @title L1ETHGateway /// @notice The `L1ETHGateway` is used to deposit ETH on layer 1 and /// finalize withdraw ETH from layer 2. -/// @dev The deposited ETH tokens are held in this gateway. On finalizing withdraw, the corresponding +/// @dev The deposited ETH tokens are held in `L1ScrollMessenger`. On finalizing withdraw, the corresponding /// ETH will be transfer to the recipient directly. contract L1ETHGateway is ScrollGatewayBase, IL1ETHGateway, IMessageDropCallback { /*************** diff --git a/src/alternative-gas-token/GasTokenExample.sol b/src/alternative-gas-token/GasTokenExample.sol new file mode 100644 index 00000000..dff43afa --- /dev/null +++ b/src/alternative-gas-token/GasTokenExample.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol"; + +contract GasTokenExample is ERC20 { + uint8 private decimals_; + + constructor( + string memory _name, + string memory _symbol, + uint8 _decimals, + address _recipient, + uint256 _amount + ) ERC20(_name, _symbol) { + decimals_ = _decimals; + _mint(_recipient, _amount); + } + + function decimals() public view virtual override returns (uint8) { + return decimals_; + } +} diff --git a/src/alternative-gas-token/L1GasTokenGateway.sol b/src/alternative-gas-token/L1GasTokenGateway.sol new file mode 100644 index 00000000..c571ee31 --- /dev/null +++ b/src/alternative-gas-token/L1GasTokenGateway.sol @@ -0,0 +1,186 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {IERC20MetadataUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol"; +import {SafeERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/utils/SafeERC20Upgradeable.sol"; +import {IERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; + +import {IL1ETHGateway} from "../L1/gateways/IL1ETHGateway.sol"; +import {IL1ScrollMessenger} from "../L1/IL1ScrollMessenger.sol"; +import {IL2ETHGateway} from "../L2/gateways/IL2ETHGateway.sol"; + +import {IMessageDropCallback} from "../libraries/callbacks/IMessageDropCallback.sol"; +import {ScrollGatewayBase} from "../libraries/gateway/ScrollGatewayBase.sol"; + +// solhint-disable avoid-low-level-calls + +/// @title L1GasTokenGateway +/// @notice The `L1GasTokenGateway` is used to deposit gas token on layer 1 and +/// finalize withdraw gas token from layer 2. +/// @dev The deposited gas tokens are held in this gateway. On finalizing withdraw, the corresponding +/// gas token will be transfer to the recipient directly. +contract L1GasTokenGateway is ScrollGatewayBase, IL1ETHGateway, IMessageDropCallback { + using SafeERC20Upgradeable for IERC20Upgradeable; + + /********** + * Errors * + **********/ + + /// @dev Thrown when `msg.value` is not zero. + error ErrorNonZeroMsgValue(); + + /// @dev Thrown when the selector is invalid during `onDropMessage`. + error ErrorInvalidSelector(); + + /// @dev Thrown when the deposit amount is zero. + error ErrorDepositZeroGasToken(); + + /************* + * Constants * + *************/ + + /// @dev The address of gas token. + address public immutable gasToken; + + /// @dev The scalar to scale the gas token decimals to 18. + uint256 public immutable scale; + + /*************** + * Constructor * + ***************/ + + /// @notice Constructor for `L1GasTokenGateway` implementation contract. + /// + /// @param _gasToken The address of gas token in L1. + /// @param _counterpart The address of `L2ETHGateway` contract in L2. + /// @param _router The address of `L1GatewayRouter` contract in L1. + /// @param _messenger The address of `L1ScrollMessenger` contract in L1. + constructor( + address _gasToken, + address _counterpart, + address _router, + address _messenger + ) ScrollGatewayBase(_counterpart, _router, _messenger) { + if (_gasToken == address(0) || _router == address(0)) revert ErrorZeroAddress(); + + _disableInitializers(); + + gasToken = _gasToken; + scale = 10**(18 - IERC20MetadataUpgradeable(_gasToken).decimals()); + } + + /// @notice Initialize the storage of L1GasTokenGateway. + function initialize() external initializer { + ScrollGatewayBase._initialize(address(0), address(0), address(0)); + } + + /***************************** + * Public Mutating Functions * + *****************************/ + + /// @inheritdoc IL1ETHGateway + function depositETH(uint256 _amount, uint256 _gasLimit) external payable override { + _deposit(_msgSender(), _amount, new bytes(0), _gasLimit); + } + + /// @inheritdoc IL1ETHGateway + function depositETH( + address _to, + uint256 _amount, + uint256 _gasLimit + ) external payable override { + _deposit(_to, _amount, new bytes(0), _gasLimit); + } + + /// @inheritdoc IL1ETHGateway + function depositETHAndCall( + address _to, + uint256 _amount, + bytes calldata _data, + uint256 _gasLimit + ) external payable override { + _deposit(_to, _amount, _data, _gasLimit); + } + + /// @inheritdoc IL1ETHGateway + function finalizeWithdrawETH( + address _from, + address _to, + uint256 _amount, + bytes calldata _data + ) external payable override onlyCallByCounterpart nonReentrant { + if (msg.value > 0) { + revert ErrorNonZeroMsgValue(); + } + + uint256 downScaledAmount = _amount / scale; + IERC20Upgradeable(gasToken).safeTransfer(_to, downScaledAmount); + _doCallback(_to, _data); + + emit FinalizeWithdrawETH(_from, _to, downScaledAmount, _data); + } + + /// @inheritdoc IMessageDropCallback + function onDropMessage(bytes calldata _message) external payable virtual onlyInDropContext nonReentrant { + // _message should start with 0x232e8748 => finalizeDepositETH(address,address,uint256,bytes) + if (bytes4(_message[0:4]) != IL2ETHGateway.finalizeDepositETH.selector) { + revert ErrorInvalidSelector(); + } + + // decode (receiver, amount) + (address _receiver, , uint256 _amount, ) = abi.decode(_message[4:], (address, address, uint256, bytes)); + uint256 downScaledAmount = _amount / scale; + + IERC20Upgradeable(gasToken).safeTransfer(_receiver, downScaledAmount); + + emit RefundETH(_receiver, downScaledAmount); + } + + /********************** + * Internal Functions * + **********************/ + + /// @dev The internal ETH deposit implementation. + /// @param _to The address of recipient's account on L2. + /// @param _amount The amount of ETH to be deposited. + /// @param _data Optional data to forward to recipient's account. + /// @param _gasLimit Gas limit required to complete the deposit on L2. + function _deposit( + address _to, + uint256 _amount, + bytes memory _data, + uint256 _gasLimit + ) internal virtual nonReentrant { + // 1. Extract real sender if this call is from L1GatewayRouter. + address _from = _msgSender(); + + if (router == _from) { + (_from, _data) = abi.decode(_data, (address, bytes)); + } + + // 2. transfer gas token from caller + uint256 _before = IERC20Upgradeable(gasToken).balanceOf(address(this)); + IERC20Upgradeable(gasToken).safeTransferFrom(_from, address(this), _amount); + uint256 _after = IERC20Upgradeable(gasToken).balanceOf(address(this)); + _amount = _after - _before; + if (_amount == 0) { + revert ErrorDepositZeroGasToken(); + } + + uint256 upScaledAmount = _amount * scale; + + // 3. Generate message passed to L1ScrollMessenger. + bytes memory _message = abi.encodeCall(IL2ETHGateway.finalizeDepositETH, (_from, _to, upScaledAmount, _data)); + + IL1ScrollMessenger(messenger).sendMessage{value: msg.value}( + counterpart, + upScaledAmount, + _message, + _gasLimit, + _from + ); + + emit DepositETH(_from, _to, _amount, _data); + } +} diff --git a/src/alternative-gas-token/L1ScrollMessengerNonETH.sol b/src/alternative-gas-token/L1ScrollMessengerNonETH.sol new file mode 100644 index 00000000..969e7aa2 --- /dev/null +++ b/src/alternative-gas-token/L1ScrollMessengerNonETH.sol @@ -0,0 +1,243 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {AddressUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; + +import {IL1MessageQueue} from "../L1/rollup/IL1MessageQueue.sol"; +import {IScrollChain} from "../L1/rollup/IScrollChain.sol"; +import {L1ScrollMessenger} from "../L1/L1ScrollMessenger.sol"; +import {IMessageDropCallback} from "../libraries/callbacks/IMessageDropCallback.sol"; +import {ScrollConstants} from "../libraries/constants/ScrollConstants.sol"; +import {WithdrawTrieVerifier} from "../libraries/verifier/WithdrawTrieVerifier.sol"; + +contract L1ScrollMessengerNonETH is L1ScrollMessenger { + /********** + * Errors * + **********/ + + /// @dev Thrown when the message is duplicated. + error ErrorDuplicatedMessage(); + + /// @dev Thrown when caller pass non-zero value in `sendMessage`. + error ErrorNonZeroValueFromCaller(); + + /// @dev Thrown when caller pass non-zero value in `relayMessageWithProof`. + error ErrorNonZeroValueFromCrossDomainCaller(); + + /// @dev Thrown when the `msg.value` cannot cover cross domain fee. + error ErrorInsufficientMsgValue(); + + /// @dev Thrown when the message is executed before. + error ErrorMessageExecuted(); + + /// @dev Thrown when the message has not enqueued before. + error ErrorMessageNotEnqueued(); + + /// @dev Thrown when the message is dropped before. + error ErrorMessageDropped(); + + /// @dev Thrown when relay a message belonging to an unfinalized batch. + error ErrorBatchNotFinalized(); + + /// @dev Thrown when the provided merkle proof is invalid. + error ErrorInvalidMerkleProof(); + + /// @dev Thrown when call to message queue. + error ErrorForbidToCallMessageQueue(); + + /// @dev Thrown when the message sender is invalid. + error ErrorInvalidMessageSender(); + + /************* + * Constants * + *************/ + + /// @notice The address of `L1NativeTokenGateway` contract. + address public immutable nativeTokenGateway; + + /*************** + * Constructor * + ***************/ + + constructor( + address _nativeTokenGateway, + address _counterpart, + address _rollup, + address _messageQueue + ) L1ScrollMessenger(_counterpart, _rollup, _messageQueue) { + nativeTokenGateway = _nativeTokenGateway; + } + + /********************** + * Internal Functions * + **********************/ + + /// @inheritdoc L1ScrollMessenger + function _sendMessage( + address _to, + uint256 _l2GasTokenValue, + bytes memory _message, + uint256 _gasLimit, + address _refundAddress + ) internal override { + // if we want to pass value to L2, must call from `L1NativeTokenGateway`. + if (_l2GasTokenValue > 0 && _msgSender() != nativeTokenGateway) { + revert ErrorNonZeroValueFromCaller(); + } + + // compute the actual cross domain message calldata. + uint256 _messageNonce = IL1MessageQueue(messageQueue).nextCrossDomainMessageIndex(); + bytes memory _xDomainCalldata = _encodeXDomainCalldata( + _msgSender(), + _to, + _l2GasTokenValue, + _messageNonce, + _message + ); + + // compute and deduct the messaging fee to fee vault. + uint256 _fee = IL1MessageQueue(messageQueue).estimateCrossDomainMessageFee(_gasLimit); + if (msg.value < _fee) { + revert ErrorInsufficientMsgValue(); + } + if (_fee > 0) { + AddressUpgradeable.sendValue(payable(feeVault), _fee); + } + + // append message to L1MessageQueue + IL1MessageQueue(messageQueue).appendCrossDomainMessage(counterpart, _gasLimit, _xDomainCalldata); + + // record the message hash for future use. + bytes32 _xDomainCalldataHash = keccak256(_xDomainCalldata); + + // normally this won't happen, since each message has different nonce, but just in case. + if (messageSendTimestamp[_xDomainCalldataHash] != 0) { + revert ErrorDuplicatedMessage(); + } + messageSendTimestamp[_xDomainCalldataHash] = block.timestamp; + + emit SentMessage(_msgSender(), _to, _l2GasTokenValue, _messageNonce, _gasLimit, _message); + + // refund fee to `_refundAddress` + unchecked { + uint256 _refund = msg.value - _fee; + if (_refund > 0) { + AddressUpgradeable.sendValue(payable(_refundAddress), _refund); + } + } + } + + /// @inheritdoc L1ScrollMessenger + function _relayMessageWithProof( + address _from, + address _to, + uint256 _l2GasTokenValue, + uint256 _nonce, + bytes memory _message, + L2MessageProof memory _proof + ) internal virtual override { + // if we want to pass value to L1, must call to `L1NativeTokenGateway`. + if (_l2GasTokenValue > 0 && _to != nativeTokenGateway) { + revert ErrorNonZeroValueFromCrossDomainCaller(); + } + + bytes32 _xDomainCalldataHash = keccak256( + _encodeXDomainCalldata(_from, _to, _l2GasTokenValue, _nonce, _message) + ); + if (isL2MessageExecuted[_xDomainCalldataHash]) { + revert ErrorMessageExecuted(); + } + + { + if (!IScrollChain(rollup).isBatchFinalized(_proof.batchIndex)) { + revert ErrorBatchNotFinalized(); + } + bytes32 _messageRoot = IScrollChain(rollup).withdrawRoots(_proof.batchIndex); + if ( + !WithdrawTrieVerifier.verifyMerkleProof(_messageRoot, _xDomainCalldataHash, _nonce, _proof.merkleProof) + ) { + revert ErrorInvalidMerkleProof(); + } + } + + // @note check more `_to` address to avoid attack in the future when we add more gateways. + if (_to == messageQueue) { + revert ErrorForbidToCallMessageQueue(); + } + _validateTargetAddress(_to); + + // @note This usually will never happen, just in case. + if (_from == xDomainMessageSender) { + revert ErrorInvalidMessageSender(); + } + + xDomainMessageSender = _from; + (bool success, ) = _to.call(_message); + // reset value to refund gas. + xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + + if (success) { + isL2MessageExecuted[_xDomainCalldataHash] = true; + emit RelayedMessage(_xDomainCalldataHash); + } else { + emit FailedRelayedMessage(_xDomainCalldataHash); + } + } + + /// @inheritdoc L1ScrollMessenger + function _dropMessage( + address _from, + address _to, + uint256 _l2GasTokenValue, + uint256 _messageNonce, + bytes memory _message + ) internal virtual override { + // The criteria for dropping a message: + // 1. The message is a L1 message. + // 2. The message has not been dropped before. + // 3. the message and all of its replacement are finalized in L1. + // 4. the message and all of its replacement are skipped. + // + // Possible denial of service attack: + // + replayMessage is called every time someone want to drop the message. + // + replayMessage is called so many times for a skipped message, thus results a long list. + // + // We limit the number of `replayMessage` calls of each message, which may solve the above problem. + + // check message exists + bytes memory _xDomainCalldata = _encodeXDomainCalldata(_from, _to, _l2GasTokenValue, _messageNonce, _message); + bytes32 _xDomainCalldataHash = keccak256(_xDomainCalldata); + if (messageSendTimestamp[_xDomainCalldataHash] == 0) { + revert ErrorMessageNotEnqueued(); + } + + // check message not dropped + if (isL1MessageDropped[_xDomainCalldataHash]) { + revert ErrorMessageDropped(); + } + + // check message is finalized + uint256 _lastIndex = replayStates[_xDomainCalldataHash].lastIndex; + if (_lastIndex == 0) _lastIndex = _messageNonce; + + // check message is skipped and drop it. + // @note If the list is very long, the message may never be dropped. + while (true) { + IL1MessageQueue(messageQueue).dropCrossDomainMessage(_lastIndex); + _lastIndex = prevReplayIndex[_lastIndex]; + if (_lastIndex == 0) break; + unchecked { + _lastIndex = _lastIndex - 1; + } + } + + isL1MessageDropped[_xDomainCalldataHash] = true; + + // set execution context + xDomainMessageSender = ScrollConstants.DROP_XDOMAIN_MESSAGE_SENDER; + IMessageDropCallback(_from).onDropMessage(_message); + // clear execution context + xDomainMessageSender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + } +} diff --git a/src/alternative-gas-token/L1WrappedTokenGateway.sol b/src/alternative-gas-token/L1WrappedTokenGateway.sol new file mode 100644 index 00000000..065a00f2 --- /dev/null +++ b/src/alternative-gas-token/L1WrappedTokenGateway.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; + +import {IL1ERC20Gateway} from "../L1/gateways/IL1ERC20Gateway.sol"; +import {IWETH} from "../interfaces/IWETH.sol"; + +contract L1WrappedTokenGateway { + using SafeERC20 for IERC20; + + /********** + * Events * + **********/ + + /// @notice Emitted when someone wrap ETH to WETH and then deposit WETH from L1 to L2. + /// @param from The address of sender in L1. + /// @param to The address of recipient in L2. + /// @param amount The amount of ETH will be deposited from L1 to L2. + event DepositWrappedToken(address indexed from, address indexed to, uint256 amount); + + /********* + * Error * + *********/ + + /// @dev Thrown when someone try to send ETH to this contract. + error ErrorCallNotFromFeeRefund(); + + /************* + * Constants * + *************/ + + /// @dev The safe gas limit used to bridge WETH to L2. + uint256 private constant SAFE_GAS_LIMIT = 450000; + + /// @dev The default value of `sender`. + address private constant DEFAULT_SENDER = address(1); + + /// @notice The address of Wrapped Ether. + address public immutable WETH; + + /// @notice The address of ERC20 gateway used to bridge WETH. + address public immutable gateway; + + /************* + * Variables * + *************/ + + /// @notice The address of caller who called `deposit`. + /// @dev This will be reset after call `gateway.depositERC20`, which is used to + /// prevent malicious user sending ETH to this contract. + address public sender; + + /*************** + * Constructor * + ***************/ + + constructor(address _weth, address _gateway) { + WETH = _weth; + gateway = _gateway; + + sender = DEFAULT_SENDER; + } + + /***************************** + * Public Mutating Functions * + *****************************/ + + /// @dev Only receive cross domain fee refund + receive() external payable { + if (sender == DEFAULT_SENDER) { + revert ErrorCallNotFromFeeRefund(); + } + } + + /// @notice Deposit ETH. + /// @dev This will wrap ETH to WETH first and then deposit as WETH. + /// @param _to The address of recipient in L2. + /// @param _amount The amount of ETH to deposit. + function deposit(address _to, uint256 _amount) external payable { + IWETH(WETH).deposit{value: _amount}(); + + IERC20(WETH).safeApprove(gateway, 0); + IERC20(WETH).safeApprove(gateway, _amount); + sender = msg.sender; + IL1ERC20Gateway(gateway).depositERC20{value: msg.value - _amount}(WETH, _to, _amount, SAFE_GAS_LIMIT); + sender = DEFAULT_SENDER; + + emit DepositWrappedToken(msg.sender, _to, _amount); + + // refund exceed fee + uint256 balance = address(this).balance; + if (balance > 0) { + Address.sendValue(payable(msg.sender), balance); + } + } +} diff --git a/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol b/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol new file mode 100644 index 00000000..70692863 --- /dev/null +++ b/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol @@ -0,0 +1,272 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {Test} from "forge-std/Test.sol"; +import {Vm} from "forge-std/Vm.sol"; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {ITransparentUpgradeableProxy, TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {L1GasTokenGateway} from "../../alternative-gas-token/L1GasTokenGateway.sol"; +import {L1ScrollMessengerNonETH} from "../../alternative-gas-token/L1ScrollMessengerNonETH.sol"; +import {L1GatewayRouter} from "../../L1/gateways/L1GatewayRouter.sol"; +import {EnforcedTxGateway} from "../../L1/gateways/EnforcedTxGateway.sol"; +import {L1MessageQueueWithGasPriceOracle} from "../../L1/rollup/L1MessageQueueWithGasPriceOracle.sol"; +import {L2GasPriceOracle} from "../../L1/rollup/L2GasPriceOracle.sol"; +import {ScrollChain, IScrollChain} from "../../L1/rollup/ScrollChain.sol"; +import {L2GatewayRouter} from "../../L2/gateways/L2GatewayRouter.sol"; +import {L2ETHGateway} from "../../L2/gateways/L2ETHGateway.sol"; +import {L2MessageQueue} from "../../L2/predeploys/L2MessageQueue.sol"; +import {Whitelist} from "../../L2/predeploys/Whitelist.sol"; +import {L2ScrollMessenger, IL2ScrollMessenger} from "../../L2/L2ScrollMessenger.sol"; +import {AddressAliasHelper} from "../../libraries/common/AddressAliasHelper.sol"; +import {EmptyContract} from "../../misc/EmptyContract.sol"; + +import {MockRollupVerifier} from "../mocks/MockRollupVerifier.sol"; + +abstract contract AlternativeGasTokenTestBase is Test { + // from L1MessageQueue + event QueueTransaction( + address indexed sender, + address indexed target, + uint256 value, + uint64 queueIndex, + uint256 gasLimit, + bytes data + ); + + // from L1ScrollMessengerNonETH + event SentMessage( + address indexed sender, + address indexed target, + uint256 value, + uint256 messageNonce, + uint256 gasLimit, + bytes message + ); + event RelayedMessage(bytes32 indexed messageHash); + event FailedRelayedMessage(bytes32 indexed messageHash); + + bytes32 private constant SENT_MESSAGE_TOPIC = + keccak256("SentMessage(address,address,uint256,uint256,uint256,bytes)"); + + ProxyAdmin internal admin; + EmptyContract private placeholder; + + // L1 contracts + L1ScrollMessengerNonETH internal l1Messenger; + L1MessageQueueWithGasPriceOracle internal l1MessageQueue; + ScrollChain internal rollup; + L1GasTokenGateway internal l1GasTokenGateway; + L1GatewayRouter internal l1Router; + address internal l1FeeVault; + + // L2 contracts + L2ScrollMessenger internal l2Messenger; + L2MessageQueue internal l2MessageQueue; + L2ETHGateway internal l2ETHGateway; + L2GatewayRouter internal l2Router; + + uint256 private lastFromL2LogIndex; + uint256 private lastFromL1LogIndex; + + function __AlternativeGasTokenTestBase_setUp(uint64 l2ChainId, address gasToken) internal { + admin = new ProxyAdmin(); + placeholder = new EmptyContract(); + + // deploy proxy and contracts in L1 + l1FeeVault = address(uint160(address(this)) - 1); + l1MessageQueue = L1MessageQueueWithGasPriceOracle(_deployProxy(address(0))); + rollup = ScrollChain(_deployProxy(address(0))); + l1Messenger = L1ScrollMessengerNonETH(payable(_deployProxy(address(0)))); + l1GasTokenGateway = L1GasTokenGateway(_deployProxy(address(0))); + l1Router = L1GatewayRouter(_deployProxy(address(0))); + L2GasPriceOracle gasOracle = L2GasPriceOracle(_deployProxy(address(new L2GasPriceOracle()))); + Whitelist whitelist = new Whitelist(address(this)); + MockRollupVerifier verifier = new MockRollupVerifier(); + + // deploy proxy and contracts in L2 + l2MessageQueue = new L2MessageQueue(address(this)); + l2Messenger = L2ScrollMessenger(payable(_deployProxy(address(0)))); + l2ETHGateway = L2ETHGateway(payable(_deployProxy(address(0)))); + l2Router = L2GatewayRouter(_deployProxy(address(0))); + + // Upgrade the L1ScrollMessengerNonETH implementation and initialize + admin.upgrade( + ITransparentUpgradeableProxy(address(l1Messenger)), + address( + new L1ScrollMessengerNonETH( + address(l1GasTokenGateway), + address(l2Messenger), + address(rollup), + address(l1MessageQueue) + ) + ) + ); + l1Messenger.initialize(address(l2Messenger), l1FeeVault, address(rollup), address(l1MessageQueue)); + + // initialize L2GasPriceOracle + gasOracle.initialize(1, 2, 1, 1); + gasOracle.updateWhitelist(address(whitelist)); + + // Upgrade the L1MessageQueueWithGasPriceOracle implementation and initialize + admin.upgrade( + ITransparentUpgradeableProxy(address(l1MessageQueue)), + address(new L1MessageQueueWithGasPriceOracle(address(l1Messenger), address(rollup), address(1))) + ); + l1MessageQueue.initialize(address(l1Messenger), address(rollup), address(this), address(gasOracle), 10000000); + l1MessageQueue.initializeV2(); + + // Upgrade the ScrollChain implementation and initialize + admin.upgrade( + ITransparentUpgradeableProxy(address(rollup)), + address(new ScrollChain(l2ChainId, address(l1MessageQueue), address(verifier))) + ); + rollup.initialize(address(l1MessageQueue), address(verifier), 44); + + // Upgrade the L1GasTokenGateway implementation and initialize + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address(new L1GasTokenGateway(gasToken, address(l2ETHGateway), address(l1Router), address(l1Messenger))) + ); + l1GasTokenGateway.initialize(); + + // Upgrade the L1GatewayRouter implementation and initialize + admin.upgrade(ITransparentUpgradeableProxy(address(l1Router)), address(new L1GatewayRouter())); + l1Router.initialize(address(l1GasTokenGateway), address(0)); + + // L2ScrollMessenger + admin.upgrade( + ITransparentUpgradeableProxy(address(l2Messenger)), + address(new L2ScrollMessenger(address(l1Messenger), address(l2MessageQueue))) + ); + l2Messenger.initialize(address(0)); + l2MessageQueue.initialize(address(l2Messenger)); + + // L2ETHGateway + admin.upgrade( + ITransparentUpgradeableProxy(address(l2ETHGateway)), + address(new L2ETHGateway(address(l1GasTokenGateway), address(l2Router), address(l2Messenger))) + ); + l2ETHGateway.initialize(address(l1GasTokenGateway), address(l2Router), address(l2Messenger)); + + // L2GatewayRouter + admin.upgrade(ITransparentUpgradeableProxy(address(l2Router)), address(new L2GatewayRouter())); + l2Router.initialize(address(l2ETHGateway), address(0)); + + // Setup whitelist in L1 + address[] memory _accounts = new address[](1); + _accounts[0] = address(this); + whitelist.updateWhitelistStatus(_accounts, true); + + // Make nonzero block.timestamp + vm.warp(1); + + // Allocate balance to l2Messenger + vm.deal(address(l2Messenger), type(uint256).max / 2); + } + + function _deployProxy(address _logic) internal returns (address) { + if (_logic == address(0)) _logic = address(placeholder); + TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy(_logic, address(admin), new bytes(0)); + return address(proxy); + } + + function relayFromL1() internal { + address malias = AddressAliasHelper.applyL1ToL2Alias(address(l1Messenger)); + + // Read all L1 -> L2 messages and relay them + Vm.Log[] memory allLogs = vm.getRecordedLogs(); + for (; lastFromL1LogIndex < allLogs.length; lastFromL1LogIndex++) { + Vm.Log memory _log = allLogs[lastFromL1LogIndex]; + if (_log.topics[0] == SENT_MESSAGE_TOPIC && _log.emitter == address(l1Messenger)) { + address sender = address(uint160(uint256(_log.topics[1]))); + address target = address(uint160(uint256(_log.topics[2]))); + (uint256 value, uint256 nonce, uint256 gasLimit, bytes memory message) = abi.decode( + _log.data, + (uint256, uint256, uint256, bytes) + ); + vm.prank(malias); + IL2ScrollMessenger(l2Messenger).relayMessage{gas: gasLimit}(sender, target, value, nonce, message); + } + } + } + + function relayFromL2() internal { + // Read all L2 -> L1 messages and relay them + // Note: We bypass the L1 messenger relay here because it's easier to not have to generate valid state roots / merkle proofs + Vm.Log[] memory allLogs = vm.getRecordedLogs(); + for (; lastFromL2LogIndex < allLogs.length; lastFromL2LogIndex++) { + Vm.Log memory _log = allLogs[lastFromL2LogIndex]; + if (_log.topics[0] == SENT_MESSAGE_TOPIC && _log.emitter == address(l2Messenger)) { + address sender = address(uint160(uint256(_log.topics[1]))); + address target = address(uint160(uint256(_log.topics[2]))); + (, , , bytes memory message) = abi.decode(_log.data, (uint256, uint256, uint256, bytes)); + // Set xDomainMessageSender + vm.store(address(l1Messenger), bytes32(uint256(201)), bytes32(uint256(uint160(sender)))); + vm.startPrank(address(l1Messenger)); + (bool success, bytes memory response) = target.call(message); + vm.stopPrank(); + vm.store(address(l1Messenger), bytes32(uint256(201)), bytes32(uint256(1))); + if (!success) { + assembly { + revert(add(response, 32), mload(response)) + } + } + } + } + } + + function encodeXDomainCalldata( + address _sender, + address _target, + uint256 _value, + uint256 _messageNonce, + bytes memory _message + ) internal pure returns (bytes memory) { + return abi.encodeCall(IL2ScrollMessenger.relayMessage, (_sender, _target, _value, _messageNonce, _message)); + } + + function prepareFinalizedBatch(bytes32 messageHash) internal { + rollup.addSequencer(address(0)); + rollup.addProver(address(0)); + + // import genesis batch + bytes memory batchHeader0 = new bytes(89); + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) + } + rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); + bytes32 batchHash0 = rollup.committedBatches(0); + + // commit one batch + bytes[] memory chunks = new bytes[](1); + bytes memory chunk0 = new bytes(1 + 60); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + vm.startPrank(address(0)); + rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + vm.stopPrank(); + + bytes memory batchHeader1 = new bytes(89); + assembly { + mstore(add(batchHeader1, 0x20), 0) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex + mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped + mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped + mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash + } + + vm.startPrank(address(0)); + rollup.finalizeBatchWithProof( + batchHeader1, + bytes32(uint256(1)), + bytes32(uint256(2)), + messageHash, + new bytes(0) + ); + vm.stopPrank(); + } +} diff --git a/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol b/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol new file mode 100644 index 00000000..1da96451 --- /dev/null +++ b/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol @@ -0,0 +1,481 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {MockERC20} from "solmate/test/utils/mocks/MockERC20.sol"; + +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {L1GasTokenGateway} from "../../alternative-gas-token/L1GasTokenGateway.sol"; +import {IL1ScrollMessenger} from "../../L1/IL1ScrollMessenger.sol"; +import {IL2ETHGateway} from "../../L2/gateways/IL2ETHGateway.sol"; +import {AddressAliasHelper} from "../../libraries/common/AddressAliasHelper.sol"; +import {ScrollConstants} from "../../libraries/constants/ScrollConstants.sol"; +import {IScrollGateway} from "../../libraries/gateway/IScrollGateway.sol"; + +import {AlternativeGasTokenTestBase} from "./AlternativeGasTokenTestBase.t.sol"; + +import {MockGatewayRecipient} from "../mocks/MockGatewayRecipient.sol"; +import {MockScrollMessenger} from "../mocks/MockScrollMessenger.sol"; + +contract L1GasTokenGatewayForTest is L1GasTokenGateway { + constructor( + address _gasToken, + address _counterpart, + address _router, + address _messenger + ) L1GasTokenGateway(_gasToken, _counterpart, _router, _messenger) {} + + function reentrantCall(address target, bytes calldata data) external payable nonReentrant { + (bool success, ) = target.call{value: msg.value}(data); + if (!success) { + // solhint-disable-next-line no-inline-assembly + assembly { + let ptr := mload(0x40) + let size := returndatasize() + returndatacopy(ptr, 0, size) + revert(ptr, size) + } + } + } +} + +abstract contract GasTokenGatewayTest is AlternativeGasTokenTestBase { + // from L1GasTokenGateway + event DepositETH(address indexed from, address indexed to, uint256 amount, bytes data); + event FinalizeWithdrawETH(address indexed from, address indexed to, uint256 amount, bytes data); + event RefundETH(address indexed recipient, uint256 amount); + + uint256 private constant NONZERO_TIMESTAMP = 123456; + + MockERC20 private gasToken; + uint256 private tokenScale; + + struct DepositParams { + uint256 methodType; + uint256 amount; + address recipient; + bytes dataToCall; + uint256 gasLimit; + uint256 feeToPay; + uint256 exceedValue; + } + + receive() external payable {} + + function __GasTokenGatewayTest_setUp(uint8 decimals) internal { + gasToken = new MockERC20("X", "Y", decimals); + + __AlternativeGasTokenTestBase_setUp(1234, address(gasToken)); + + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address( + new L1GasTokenGatewayForTest( + address(gasToken), + address(l2ETHGateway), + address(l1Router), + address(l1Messenger) + ) + ) + ); + + gasToken.mint(address(this), type(uint128).max); + vm.warp(NONZERO_TIMESTAMP); + + gasToken.approve(address(l1GasTokenGateway), type(uint256).max); + tokenScale = 10**(18 - decimals); + } + + function testDepositETH(DepositParams memory params) external { + params.methodType = 0; + params.recipient = address(this); + params.dataToCall = new bytes(0); + _depositETH(false, params); + } + + function testDepositETHWithRecipient(DepositParams memory params) external { + params.methodType = 1; + params.dataToCall = new bytes(0); + _depositETH(false, params); + } + + function testDepositETHAndCall(DepositParams memory params) external { + params.methodType = 2; + _depositETH(false, params); + } + + function testDepositETHWithRouter(DepositParams memory params) external { + params.methodType = 0; + params.recipient = address(this); + params.dataToCall = new bytes(0); + _depositETH(true, params); + } + + function testDepositETHWithRecipientWithRouter(DepositParams memory params) external { + params.methodType = 1; + params.dataToCall = new bytes(0); + _depositETH(true, params); + } + + function testDepositETHAndCallWithRouter(DepositParams memory params) external { + params.methodType = 2; + _depositETH(true, params); + } + + function testFinalizeWithdrawETH( + address sender, + address target, + uint256 amount, + bytes memory dataToCall + ) external { + vm.assume(target != address(0)); + amount = bound(amount, 1, type(uint128).max); + + // revert when ErrorCallerIsNotMessenger + vm.expectRevert(IScrollGateway.ErrorCallerIsNotMessenger.selector); + l1GasTokenGateway.finalizeWithdrawETH(sender, target, amount, dataToCall); + + MockScrollMessenger mockMessenger = new MockScrollMessenger(); + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address( + new L1GasTokenGatewayForTest( + address(gasToken), + address(l2ETHGateway), + address(l1Router), + address(mockMessenger) + ) + ) + ); + + bytes memory message = abi.encodeCall( + L1GasTokenGateway.finalizeWithdrawETH, + (sender, target, amount, dataToCall) + ); + // revert when ErrorCallerIsNotCounterpartGateway + vm.expectRevert(IScrollGateway.ErrorCallerIsNotCounterpartGateway.selector); + mockMessenger.callTarget(address(l1GasTokenGateway), message); + + // revert when reentrant + mockMessenger.setXDomainMessageSender(address(l2ETHGateway)); + vm.expectRevert("ReentrancyGuard: reentrant call"); + L1GasTokenGatewayForTest(address(l1GasTokenGateway)).reentrantCall( + address(mockMessenger), + abi.encodeCall(mockMessenger.callTarget, (address(l1GasTokenGateway), message)) + ); + + // revert when ErrorNonZeroMsgValue + vm.expectRevert(L1GasTokenGateway.ErrorNonZeroMsgValue.selector); + mockMessenger.callTarget{value: 1}(address(l1GasTokenGateway), message); + + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address( + new L1GasTokenGatewayForTest( + address(gasToken), + address(l2ETHGateway), + address(l1Router), + address(l1Messenger) + ) + ) + ); + + // succeed when finalize + uint256 scaledAmount = amount / tokenScale; + gasToken.mint(address(l1GasTokenGateway), type(uint128).max); + MockGatewayRecipient recipient = new MockGatewayRecipient(); + message = abi.encodeCall( + L1GasTokenGateway.finalizeWithdrawETH, + (sender, address(recipient), amount, dataToCall) + ); + bytes32 messageHash = keccak256( + encodeXDomainCalldata(address(l2ETHGateway), address(l1GasTokenGateway), 0, 0, message) + ); + prepareFinalizedBatch(messageHash); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + // should emit FinalizeWithdrawETH from L1GasTokenGateway + { + vm.expectEmit(true, true, true, true); + emit FinalizeWithdrawETH(sender, address(recipient), scaledAmount, dataToCall); + } + // should emit RelayedMessage from L1ScrollMessenger + { + vm.expectEmit(true, false, false, true); + emit RelayedMessage(messageHash); + } + + uint256 gatewayBalance = gasToken.balanceOf(address(l1GasTokenGateway)); + uint256 recipientBalance = gasToken.balanceOf(address(recipient)); + assertEq(false, l1Messenger.isL2MessageExecuted(messageHash)); + l1Messenger.relayMessageWithProof(address(l2ETHGateway), address(l1GasTokenGateway), 0, 0, message, proof); + assertEq(true, l1Messenger.isL2MessageExecuted(messageHash)); + assertEq(recipientBalance + scaledAmount, gasToken.balanceOf(address(recipient))); + assertEq(gatewayBalance - scaledAmount, gasToken.balanceOf(address(l1GasTokenGateway))); + } + + function testDropMessage(uint256 amount, address recipient) external { + vm.assume(recipient != address(0)); + + amount = bound(amount, 1, gasToken.balanceOf(address(this))); + uint256 scaledAmount = amount * tokenScale; + bytes memory message = abi.encodeCall( + IL2ETHGateway.finalizeDepositETH, + (address(this), recipient, scaledAmount, new bytes(0)) + ); + l1GasTokenGateway.depositETH(recipient, amount, 1000000); + + // revert when ErrorCallerIsNotMessenger + vm.expectRevert(IScrollGateway.ErrorCallerIsNotMessenger.selector); + l1GasTokenGateway.onDropMessage(message); + + MockScrollMessenger mockMessenger = new MockScrollMessenger(); + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address( + new L1GasTokenGatewayForTest( + address(gasToken), + address(l2ETHGateway), + address(l1Router), + address(mockMessenger) + ) + ) + ); + + // revert not in drop context + vm.expectRevert(IScrollGateway.ErrorNotInDropMessageContext.selector); + mockMessenger.callTarget( + address(l1GasTokenGateway), + abi.encodeCall(l1GasTokenGateway.onDropMessage, (message)) + ); + + // revert when reentrant + mockMessenger.setXDomainMessageSender(ScrollConstants.DROP_XDOMAIN_MESSAGE_SENDER); + vm.expectRevert("ReentrancyGuard: reentrant call"); + L1GasTokenGatewayForTest(address(l1GasTokenGateway)).reentrantCall( + address(mockMessenger), + abi.encodeCall( + mockMessenger.callTarget, + (address(l1GasTokenGateway), abi.encodeCall(l1GasTokenGateway.onDropMessage, (message))) + ) + ); + + // revert when invalid selector + vm.expectRevert(L1GasTokenGateway.ErrorInvalidSelector.selector); + mockMessenger.callTarget( + address(l1GasTokenGateway), + abi.encodeCall(l1GasTokenGateway.onDropMessage, (new bytes(4))) + ); + + admin.upgrade( + ITransparentUpgradeableProxy(address(l1GasTokenGateway)), + address( + new L1GasTokenGatewayForTest( + address(gasToken), + address(l2ETHGateway), + address(l1Router), + address(l1Messenger) + ) + ) + ); + + // succeed on drop + // skip message 0 + vm.startPrank(address(rollup)); + l1MessageQueue.popCrossDomainMessage(0, 1, 0x1); + assertEq(l1MessageQueue.pendingQueueIndex(), 1); + vm.stopPrank(); + + // should emit RefundERC20 + vm.expectEmit(true, true, false, true); + emit RefundETH(address(this), amount); + + uint256 balance = gasToken.balanceOf(address(this)); + uint256 gatewayBalance = gasToken.balanceOf(address(l1GasTokenGateway)); + l1Messenger.dropMessage(address(l1GasTokenGateway), address(l2ETHGateway), scaledAmount, 0, message); + assertEq(gatewayBalance - amount, gasToken.balanceOf(address(l1GasTokenGateway))); + assertEq(balance + amount, gasToken.balanceOf(address(this))); + } + + function testRelayFromL1ToL2(uint256 l1Amount, address recipient) external { + vm.assume(recipient.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(recipient)) > 2**152); // ignore some precompile contracts + vm.recordLogs(); + + l1Amount = bound(l1Amount, 1, gasToken.balanceOf(address(this))); + uint256 l2Amount = l1Amount * tokenScale; + + l1GasTokenGateway.depositETH(recipient, l1Amount, 1000000); + + uint256 recipientBalance = recipient.balance; + uint256 l2MessengerBalance = address(l2Messenger).balance; + relayFromL1(); + assertEq(recipientBalance + l2Amount, recipient.balance); + assertEq(l2MessengerBalance - l2Amount, address(l2Messenger).balance); + } + + function testRelayFromL2ToL1(uint256 l2Amount, address recipient) external { + vm.assume(recipient != address(0)); + vm.recordLogs(); + + l2Amount = bound(l2Amount, 1, address(this).balance); + uint256 l1Amount = l2Amount / tokenScale; + + gasToken.mint(address(l1GasTokenGateway), type(uint128).max); + l2ETHGateway.withdrawETH{value: l2Amount}(recipient, l2Amount, 1000000); + + uint256 recipientBalance = gasToken.balanceOf(recipient); + uint256 gatewayBalance = gasToken.balanceOf(address(l1GasTokenGateway)); + relayFromL2(); + assertEq(recipientBalance + l1Amount, gasToken.balanceOf(recipient)); + assertEq(gatewayBalance - l1Amount, gasToken.balanceOf(address(l1GasTokenGateway))); + } + + function _depositETH(bool useRouter, DepositParams memory params) private { + vm.assume(params.recipient != address(0)); + + params.amount = bound(params.amount, 1, gasToken.balanceOf(address(this))); + uint256 scaledAmount = params.amount * tokenScale; + + bytes memory message = abi.encodeCall( + IL2ETHGateway.finalizeDepositETH, + (address(this), params.recipient, scaledAmount, params.dataToCall) + ); + bytes memory xDomainCalldata = encodeXDomainCalldata( + address(l1GasTokenGateway), + address(l2ETHGateway), + scaledAmount, + 0, + message + ); + + params.gasLimit = bound(params.gasLimit, xDomainCalldata.length * 16 + 21000, 1000000); + params.feeToPay = bound(params.feeToPay, 0, 1 ether); + params.exceedValue = bound(params.exceedValue, 0, 1 ether); + + l1MessageQueue.setL2BaseFee(params.feeToPay); + params.feeToPay = params.feeToPay * params.gasLimit; + + // revert when reentrant + { + bytes memory reentrantData; + if (params.methodType == 0) { + reentrantData = abi.encodeWithSignature("depositETH(uint256,uint256)", params.amount, params.gasLimit); + } else if (params.methodType == 1) { + reentrantData = abi.encodeWithSignature( + "depositETH(address,uint256,uint256)", + params.recipient, + params.amount, + params.gasLimit + ); + } else if (params.methodType == 2) { + reentrantData = abi.encodeCall( + l1GasTokenGateway.depositETHAndCall, + (params.recipient, params.amount, params.dataToCall, params.gasLimit) + ); + } + vm.expectRevert("ReentrancyGuard: reentrant call"); + L1GasTokenGatewayForTest(address(l1GasTokenGateway)).reentrantCall( + useRouter ? address(l1Router) : address(l1GasTokenGateway), + reentrantData + ); + } + + // revert when ErrorDepositZeroGasToken + { + uint256 amount = params.amount; + params.amount = 0; + vm.expectRevert(L1GasTokenGateway.ErrorDepositZeroGasToken.selector); + _invokeDepositETHCall(useRouter, params); + params.amount = amount; + } + + // succeed to deposit + // should emit QueueTransaction from L1MessageQueue + { + vm.expectEmit(true, true, false, true); + address sender = AddressAliasHelper.applyL1ToL2Alias(address(l1Messenger)); + emit QueueTransaction(sender, address(l2Messenger), 0, 0, params.gasLimit, xDomainCalldata); + } + // should emit SentMessage from L1ScrollMessenger + { + vm.expectEmit(true, true, false, true); + emit SentMessage( + address(l1GasTokenGateway), + address(l2ETHGateway), + scaledAmount, + 0, + params.gasLimit, + message + ); + } + // should emit DepositERC20 from L1CustomERC20Gateway + { + vm.expectEmit(true, true, false, true); + emit DepositETH(address(this), params.recipient, params.amount, params.dataToCall); + } + + uint256 gatewayBalance = gasToken.balanceOf(address(l1GasTokenGateway)); + uint256 feeVaultBalance = l1FeeVault.balance; + uint256 thisBalance = gasToken.balanceOf(address(this)); + assertEq(l1Messenger.messageSendTimestamp(keccak256(xDomainCalldata)), 0); + uint256 balance = address(this).balance; + _invokeDepositETHCall(useRouter, params); + assertEq(balance - params.feeToPay, address(this).balance); // extra value is transferred back + assertEq(l1Messenger.messageSendTimestamp(keccak256(xDomainCalldata)), NONZERO_TIMESTAMP); + assertEq(thisBalance - params.amount, gasToken.balanceOf(address(this))); + assertEq(feeVaultBalance + params.feeToPay, l1FeeVault.balance); + assertEq(gatewayBalance + params.amount, gasToken.balanceOf(address(l1GasTokenGateway))); + } + + function _invokeDepositETHCall(bool useRouter, DepositParams memory params) private { + uint256 value = params.feeToPay + params.exceedValue; + if (useRouter) { + if (params.methodType == 0) { + l1Router.depositETH{value: value}(params.amount, params.gasLimit); + } else if (params.methodType == 1) { + l1Router.depositETH{value: value}(params.recipient, params.amount, params.gasLimit); + } else if (params.methodType == 2) { + l1Router.depositETHAndCall{value: value}( + params.recipient, + params.amount, + params.dataToCall, + params.gasLimit + ); + } + } else { + if (params.methodType == 0) { + l1GasTokenGateway.depositETH{value: value}(params.amount, params.gasLimit); + } else if (params.methodType == 1) { + l1GasTokenGateway.depositETH{value: value}(params.recipient, params.amount, params.gasLimit); + } else if (params.methodType == 2) { + l1GasTokenGateway.depositETHAndCall{value: value}( + params.recipient, + params.amount, + params.dataToCall, + params.gasLimit + ); + } + } + } +} + +contract GasTokenDecimal18GatewayTest is GasTokenGatewayTest { + function setUp() external { + __GasTokenGatewayTest_setUp(18); + } +} + +contract GasTokenDecimal8GatewayTest is GasTokenGatewayTest { + function setUp() external { + __GasTokenGatewayTest_setUp(8); + } +} + +contract GasTokenDecimal6GatewayTest is GasTokenGatewayTest { + function setUp() external { + __GasTokenGatewayTest_setUp(6); + } +} diff --git a/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol b/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol new file mode 100644 index 00000000..19cd0285 --- /dev/null +++ b/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol @@ -0,0 +1,486 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {MockERC20} from "solmate/test/utils/mocks/MockERC20.sol"; + +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {L1ScrollMessengerNonETH} from "../../alternative-gas-token/L1ScrollMessengerNonETH.sol"; +import {IL1ScrollMessenger} from "../../L1/IL1ScrollMessenger.sol"; +import {AddressAliasHelper} from "../../libraries/common/AddressAliasHelper.sol"; +import {ScrollConstants} from "../../libraries/constants/ScrollConstants.sol"; + +import {AlternativeGasTokenTestBase} from "./AlternativeGasTokenTestBase.t.sol"; + +contract L1ScrollMessengerNonETHForTest is L1ScrollMessengerNonETH { + constructor( + address _nativeTokenGateway, + address _counterpart, + address _rollup, + address _messageQueue + ) L1ScrollMessengerNonETH(_nativeTokenGateway, _counterpart, _rollup, _messageQueue) {} + + function setMessageSendTimestamp(bytes32 hash, uint256 value) external { + messageSendTimestamp[hash] = value; + } +} + +contract L1ScrollMessengerNonETHTest is AlternativeGasTokenTestBase { + event OnDropMessageCalled(uint256, bytes); + + event OnRelayMessageWithProof(uint256, bytes); + + MockERC20 private gasToken; + + receive() external payable {} + + function setUp() external { + gasToken = new MockERC20("X", "Y", 18); + + __AlternativeGasTokenTestBase_setUp(1234, address(gasToken)); + } + + function testInitialization() external view { + assertEq(l1Messenger.nativeTokenGateway(), address(l1GasTokenGateway)); + assertEq(l1Messenger.messageQueue(), address(l1MessageQueue)); + assertEq(l1Messenger.rollup(), address(rollup)); + } + + function testSendMessageRevertOnErrorNonZeroValueFromCaller(uint256 value) external { + vm.assume(value > 0); + // revert ErrorNonZeroValueFromCaller + vm.expectRevert(L1ScrollMessengerNonETH.ErrorNonZeroValueFromCaller.selector); + l1Messenger.sendMessage(address(0), value, new bytes(0), 0); + } + + function testSendMessageRevertOnErrorInsufficientMsgValue( + uint256 l2BaseFee, + uint256 gasLimit, + bytes memory message + ) external { + bytes memory encoded = encodeXDomainCalldata(address(this), address(0), 0, 0, message); + vm.assume(encoded.length < 60000); + gasLimit = bound(gasLimit, encoded.length * 16 + 21000, 1000000); + l2BaseFee = bound(l2BaseFee, 1, 1 ether); + + l1MessageQueue.setL2BaseFee(l2BaseFee); + + // revert ErrorInsufficientMsgValue + vm.expectRevert(L1ScrollMessengerNonETH.ErrorInsufficientMsgValue.selector); + l1Messenger.sendMessage{value: gasLimit * l2BaseFee - 1}(address(0), 0, message, gasLimit); + } + + function testSendMessageRevertOnErrorDuplicatedMessage( + address target, + uint256 gasLimit, + bytes memory message + ) external { + bytes memory encoded = encodeXDomainCalldata(address(this), target, 0, 0, message); + vm.assume(encoded.length < 60000); + gasLimit = bound(gasLimit, encoded.length * 16 + 21000, 1000000); + + admin.upgrade( + ITransparentUpgradeableProxy(address(l1Messenger)), + address( + new L1ScrollMessengerNonETHForTest( + address(l1GasTokenGateway), + address(l2Messenger), + address(rollup), + address(l1MessageQueue) + ) + ) + ); + L1ScrollMessengerNonETHForTest(payable(address(l1Messenger))).setMessageSendTimestamp(keccak256(encoded), 1); + l1MessageQueue.setL2BaseFee(0); + + // revert ErrorDuplicatedMessage + vm.expectRevert(L1ScrollMessengerNonETH.ErrorDuplicatedMessage.selector); + l1Messenger.sendMessage(target, 0, message, gasLimit); + } + + function testSendMessage( + uint256 l2BaseFee, + address target, + uint256 gasLimit, + bytes memory message, + uint256 exceedValue, + address refundAddress + ) external { + vm.assume(refundAddress.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(refundAddress)) > 2**152); // ignore some precompile contracts + vm.assume(refundAddress != l1FeeVault); + + uint256 NONZERO_TIMESTAMP = 123456; + vm.warp(NONZERO_TIMESTAMP); + + bytes memory encoded0 = encodeXDomainCalldata(address(this), target, 0, 0, message); + bytes memory encoded1 = encodeXDomainCalldata(address(this), target, 0, 1, message); + bytes memory encoded2 = encodeXDomainCalldata(address(this), target, 0, 2, message); + vm.assume(encoded0.length < 60000); + + gasLimit = bound(gasLimit, encoded0.length * 16 + 21000, 1000000); + exceedValue = bound(exceedValue, 1, address(this).balance / 2); + l2BaseFee = bound(l2BaseFee, 1, 1 ether); + + l1MessageQueue.setL2BaseFee(l2BaseFee); + + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 0); + + // send message 0, exact fee + // emit QueueTransaction from L1MessageQueue + { + vm.expectEmit(true, true, false, true); + address sender = AddressAliasHelper.applyL1ToL2Alias(address(l1Messenger)); + emit QueueTransaction(sender, address(l2Messenger), 0, 0, gasLimit, encoded0); + } + // emit SentMessage from L1ScrollMessengerNonETH + { + vm.expectEmit(true, true, false, true); + emit SentMessage(address(this), target, 0, 0, gasLimit, message); + } + uint256 thisBalance = address(this).balance; + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded0)), 0); + l1Messenger.sendMessage{value: gasLimit * l2BaseFee}(target, 0, message, gasLimit); + assertEq(address(this).balance, thisBalance - gasLimit * l2BaseFee); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 1); + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded0)), NONZERO_TIMESTAMP); + + // send message 1, over fee, refund to self + // emit QueueTransaction from L1MessageQueue + { + vm.expectEmit(true, true, false, true); + address sender = AddressAliasHelper.applyL1ToL2Alias(address(l1Messenger)); + emit QueueTransaction(sender, address(l2Messenger), 0, 1, gasLimit, encoded1); + } + // emit SentMessage from L1ScrollMessengerNonETH + { + vm.expectEmit(true, true, false, true); + emit SentMessage(address(this), target, 0, 1, gasLimit, message); + } + thisBalance = address(this).balance; + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded1)), 0); + l1Messenger.sendMessage{value: gasLimit * l2BaseFee + exceedValue}(target, 0, message, gasLimit); + assertEq(address(this).balance, thisBalance - gasLimit * l2BaseFee); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 2); + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded1)), NONZERO_TIMESTAMP); + + // send message 2, over fee, refund to other + // emit QueueTransaction from L1MessageQueue + { + vm.expectEmit(true, true, false, true); + address sender = AddressAliasHelper.applyL1ToL2Alias(address(l1Messenger)); + emit QueueTransaction(sender, address(l2Messenger), 0, 2, gasLimit, encoded2); + } + // emit SentMessage from L1ScrollMessengerNonETH + { + vm.expectEmit(true, true, false, true); + emit SentMessage(address(this), target, 0, 2, gasLimit, message); + } + thisBalance = address(this).balance; + uint256 refundBalance = refundAddress.balance; + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded2)), 0); + l1Messenger.sendMessage{value: gasLimit * l2BaseFee + exceedValue}(target, 0, message, gasLimit, refundAddress); + assertEq(address(this).balance, thisBalance - gasLimit * l2BaseFee - exceedValue); + assertEq(refundAddress.balance, refundBalance + exceedValue); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 3); + assertEq(l1Messenger.messageSendTimestamp(keccak256(encoded2)), NONZERO_TIMESTAMP); + } + + function testRelayMessageWithProofRevertOnErrorNonZeroValueFromCrossDomainCaller( + address sender, + address target, + uint256 value, + uint256 nonce, + bytes memory message, + IL1ScrollMessenger.L2MessageProof memory proof + ) external { + vm.assume(value > 0); + vm.assume(target != address(l1GasTokenGateway)); + + // revert ErrorNonZeroValueFromCrossDomainCaller + vm.expectRevert(L1ScrollMessengerNonETH.ErrorNonZeroValueFromCrossDomainCaller.selector); + l1Messenger.relayMessageWithProof(sender, target, value, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnErrorMessageExecuted( + address sender, + address target, + uint256 nonce, + bytes memory message + ) external { + vm.assume(target.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(target)) > 2**152); // ignore some precompile contracts + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + + // revert ErrorMessageExecuted + vm.expectRevert(L1ScrollMessengerNonETH.ErrorMessageExecuted.selector); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnErrorBatchNotFinalized( + address sender, + address target, + uint256 nonce, + bytes memory message + ) external { + vm.assume(target.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(target)) > 2**152); // ignore some precompile contracts + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex() + 1; + + // revert ErrorBatchNotFinalized + vm.expectRevert(L1ScrollMessengerNonETH.ErrorBatchNotFinalized.selector); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnErrorInvalidMerkleProof( + address sender, + address target, + uint256 nonce, + bytes memory message, + IL1ScrollMessenger.L2MessageProof memory proof + ) external { + vm.assume(target.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(target)) > 2**152); // ignore some precompile contracts + vm.assume(proof.merkleProof.length > 0); + vm.assume(proof.merkleProof.length % 32 == 0); + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + // revert ErrorInvalidMerkleProof + vm.expectRevert(L1ScrollMessengerNonETH.ErrorInvalidMerkleProof.selector); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnErrorForbidToCallMessageQueue( + address sender, + uint256 nonce, + bytes memory message + ) external { + address target = address(l1MessageQueue); + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + // revert ErrorForbidToCallMessageQueue + vm.expectRevert(L1ScrollMessengerNonETH.ErrorForbidToCallMessageQueue.selector); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnCallSelfFromL2( + address sender, + uint256 nonce, + bytes memory message + ) external { + address target = address(l1Messenger); + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + // revert when call self + vm.expectRevert("Forbid to call self"); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + function testRelayMessageWithProofRevertOnErrorInvalidMessageSender( + address target, + uint256 nonce, + bytes memory message + ) external { + vm.assume(target.code.length == 0); // only refund to EOA to avoid revert + vm.assume(uint256(uint160(target)) > 2**152); // ignore some precompile contracts + address sender = ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER; + + prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + // revert ErrorInvalidMessageSender + vm.expectRevert(L1ScrollMessengerNonETH.ErrorInvalidMessageSender.selector); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, message, proof); + } + + bool revertOnRelayMessageWithProof; + + function onRelayMessageWithProof(bytes memory message) external payable { + emit OnRelayMessageWithProof(msg.value, message); + + if (revertOnRelayMessageWithProof) revert(); + } + + function testRelayMessageWithProofFailed( + address sender, + uint256 nonce, + bytes memory message + ) external { + vm.assume(sender != ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER); + + revertOnRelayMessageWithProof = true; + bytes memory encoded = abi.encodeCall(L1ScrollMessengerNonETHTest.onRelayMessageWithProof, (message)); + address target = address(this); + + bytes32 hash = keccak256(encodeXDomainCalldata(sender, target, 0, nonce, encoded)); + prepareFinalizedBatch(hash); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + assertEq(l1Messenger.isL2MessageExecuted(hash), false); + vm.expectEmit(true, false, false, true); + emit FailedRelayedMessage(hash); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, encoded, proof); + assertEq(l1Messenger.isL2MessageExecuted(hash), false); + } + + function testRelayMessageWithProofSucceed( + address sender, + uint256 nonce, + bytes memory message + ) external { + vm.assume(sender != ScrollConstants.DEFAULT_XDOMAIN_MESSAGE_SENDER); + + revertOnRelayMessageWithProof = false; + bytes memory encoded = abi.encodeCall(L1ScrollMessengerNonETHTest.onRelayMessageWithProof, (message)); + address target = address(this); + + bytes32 hash = keccak256(encodeXDomainCalldata(sender, target, 0, nonce, encoded)); + prepareFinalizedBatch(hash); + IL1ScrollMessenger.L2MessageProof memory proof; + proof.batchIndex = rollup.lastFinalizedBatchIndex(); + + assertEq(l1Messenger.isL2MessageExecuted(hash), false); + vm.expectEmit(false, false, false, true); + emit OnRelayMessageWithProof(0, message); + vm.expectEmit(true, false, false, true); + emit RelayedMessage(hash); + l1Messenger.relayMessageWithProof(sender, target, 0, nonce, encoded, proof); + assertEq(l1Messenger.isL2MessageExecuted(hash), true); + } + + function onDropMessage(bytes memory message) external payable { + emit OnDropMessageCalled(msg.value, message); + } + + function testDropMessageRevertOnErrorMessageNotEnqueued( + address sender, + address target, + uint256 value, + uint256 messageNonce, + bytes memory message + ) external { + // revert on ErrorMessageNotEnqueued + vm.expectRevert(L1ScrollMessengerNonETH.ErrorMessageNotEnqueued.selector); + l1Messenger.dropMessage(sender, target, value, messageNonce, message); + } + + function testDropMessage( + address target, + bytes memory message, + uint32 gasLimit + ) external { + bytes memory encoded = encodeXDomainCalldata(address(this), target, 0, 0, message); + vm.assume(encoded.length < 60000); + gasLimit = uint32(bound(gasLimit, encoded.length * 16 + 21000, 1000000)); + + l1MessageQueue.setL2BaseFee(0); + + // send one message with nonce 0 + l1Messenger.sendMessage(target, 0, message, gasLimit); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 1); + + // drop pending message, revert + vm.expectRevert("cannot drop pending message"); + l1Messenger.dropMessage(address(this), target, 0, 0, message); + + l1Messenger.updateMaxReplayTimes(10); + + // replay 1 time + l1Messenger.replayMessage(address(this), target, 0, 0, message, gasLimit, address(0)); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 2); + + // skip all 2 messages + vm.startPrank(address(rollup)); + l1MessageQueue.popCrossDomainMessage(0, 2, 0x3); + assertEq(l1MessageQueue.pendingQueueIndex(), 2); + vm.stopPrank(); + for (uint256 i = 0; i < 2; ++i) { + assertEq(l1MessageQueue.isMessageSkipped(i), true); + assertEq(l1MessageQueue.isMessageDropped(i), false); + } + vm.expectEmit(false, false, false, true); + emit OnDropMessageCalled(0, message); + l1Messenger.dropMessage(address(this), target, 0, 0, message); + for (uint256 i = 0; i < 2; ++i) { + assertEq(l1MessageQueue.isMessageSkipped(i), true); + assertEq(l1MessageQueue.isMessageDropped(i), true); + } + + // send one message with nonce 2 and replay 3 times + l1Messenger.sendMessage(target, 0, message, gasLimit); + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 3); + for (uint256 i = 0; i < 3; i++) { + l1Messenger.replayMessage(address(this), target, 0, 2, message, gasLimit, address(0)); + } + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 6); + + // only first 3 are skipped + vm.startPrank(address(rollup)); + l1MessageQueue.popCrossDomainMessage(2, 4, 0x7); + assertEq(l1MessageQueue.pendingQueueIndex(), 6); + vm.stopPrank(); + for (uint256 i = 2; i < 6; i++) { + assertEq(l1MessageQueue.isMessageSkipped(i), i < 5); + assertEq(l1MessageQueue.isMessageDropped(i), false); + } + + // drop non-skipped message, revert + vm.expectRevert("drop non-skipped message"); + l1Messenger.dropMessage(address(this), target, 0, 2, message); + + // send one message with nonce 6 and replay 4 times + l1Messenger.sendMessage(target, 0, message, gasLimit); + for (uint256 i = 0; i < 4; i++) { + l1Messenger.replayMessage(address(this), target, 0, 6, message, gasLimit, address(0)); + } + assertEq(l1MessageQueue.nextCrossDomainMessageIndex(), 11); + + // skip all 5 messages + vm.startPrank(address(rollup)); + l1MessageQueue.popCrossDomainMessage(6, 5, 0x1f); + assertEq(l1MessageQueue.pendingQueueIndex(), 11); + vm.stopPrank(); + for (uint256 i = 6; i < 11; ++i) { + assertEq(l1MessageQueue.isMessageSkipped(i), true); + assertEq(l1MessageQueue.isMessageDropped(i), false); + } + vm.expectEmit(false, false, false, true); + emit OnDropMessageCalled(0, message); + l1Messenger.dropMessage(address(this), target, 0, 6, message); + for (uint256 i = 6; i < 11; ++i) { + assertEq(l1MessageQueue.isMessageSkipped(i), true); + assertEq(l1MessageQueue.isMessageDropped(i), true); + } + + // Message already dropped, revert + vm.expectRevert(L1ScrollMessengerNonETH.ErrorMessageDropped.selector); + l1Messenger.dropMessage(address(this), target, 0, 0, message); + vm.expectRevert(L1ScrollMessengerNonETH.ErrorMessageDropped.selector); + l1Messenger.dropMessage(address(this), target, 0, 6, message); + + // replay dropped message, revert + vm.expectRevert("Message already dropped"); + l1Messenger.replayMessage(address(this), target, 0, 0, message, gasLimit, address(0)); + vm.expectRevert("Message already dropped"); + l1Messenger.replayMessage(address(this), target, 0, 6, message, gasLimit, address(0)); + } +} diff --git a/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol b/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol new file mode 100644 index 00000000..00c47743 --- /dev/null +++ b/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {MockERC20} from "solmate/test/utils/mocks/MockERC20.sol"; +import {WETH} from "solmate/tokens/WETH.sol"; + +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {L1WrappedTokenGateway} from "../../alternative-gas-token/L1WrappedTokenGateway.sol"; +import {L1StandardERC20Gateway} from "../../L1/gateways/L1StandardERC20Gateway.sol"; +import {L2StandardERC20Gateway} from "../../L2/gateways/L2StandardERC20Gateway.sol"; +import {ScrollStandardERC20} from "../../libraries/token/ScrollStandardERC20.sol"; +import {ScrollStandardERC20Factory} from "../../libraries/token/ScrollStandardERC20Factory.sol"; + +import {AlternativeGasTokenTestBase} from "./AlternativeGasTokenTestBase.t.sol"; + +contract L1WrappedTokenGatewayTest is AlternativeGasTokenTestBase { + event OnDropMessageCalled(uint256, bytes); + + event OnRelayMessageWithProof(uint256, bytes); + + MockERC20 private gasToken; + + ScrollStandardERC20 private template; + ScrollStandardERC20Factory private factory; + + L1StandardERC20Gateway private l1ERC20Gateway; + L2StandardERC20Gateway private l2ERC20Gateway; + + WETH private weth; + L1WrappedTokenGateway private gateway; + + receive() external payable {} + + function setUp() external { + gasToken = new MockERC20("X", "Y", 18); + + __AlternativeGasTokenTestBase_setUp(1234, address(gasToken)); + + template = new ScrollStandardERC20(); + factory = new ScrollStandardERC20Factory(address(template)); + l1ERC20Gateway = L1StandardERC20Gateway(_deployProxy(address(0))); + l2ERC20Gateway = L2StandardERC20Gateway(_deployProxy(address(0))); + + admin.upgrade( + ITransparentUpgradeableProxy(address(l1ERC20Gateway)), + address( + new L1StandardERC20Gateway( + address(l2ERC20Gateway), + address(l1Router), + address(l1Messenger), + address(template), + address(factory) + ) + ) + ); + admin.upgrade( + ITransparentUpgradeableProxy(address(l2ERC20Gateway)), + address( + new L2StandardERC20Gateway( + address(l1ERC20Gateway), + address(l2Router), + address(l2Messenger), + address(factory) + ) + ) + ); + + weth = new WETH(); + gateway = new L1WrappedTokenGateway(address(weth), address(l1ERC20Gateway)); + } + + function testInitialization() external view { + assertEq(gateway.WETH(), address(weth)); + assertEq(gateway.gateway(), address(l1ERC20Gateway)); + assertEq(gateway.sender(), address(1)); + } + + function testReceive(uint256 amount) external { + amount = bound(amount, 0, address(this).balance); + + vm.expectRevert(L1WrappedTokenGateway.ErrorCallNotFromFeeRefund.selector); + payable(address(gateway)).transfer(amount); + } + + function testDeposit( + uint256 amount, + address recipient, + uint256 l2BaseFee, + uint256 exceedValue + ) external { + amount = bound(amount, 1, address(this).balance / 2); + l2BaseFee = bound(l2BaseFee, 0, 10**9); + exceedValue = bound(exceedValue, 0, 1 ether); + + l1MessageQueue.setL2BaseFee(l2BaseFee); + uint256 fee = l2BaseFee * 200000; + + uint256 ethBalance = address(this).balance; + uint256 wethBalance = weth.balanceOf(address(l1ERC20Gateway)); + gateway.deposit{value: amount + fee + exceedValue}(recipient, amount); + assertEq(ethBalance - amount - fee, address(this).balance); + assertEq(wethBalance + amount, weth.balanceOf(address(l1ERC20Gateway))); + } +} From 0251956912bd7e39aa34053648074af52fd364f5 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 21 Aug 2024 01:36:20 +0800 Subject: [PATCH 20/48] fix: l2 genesis file owner --- scripts/deterministic/GenerateGenesis.s.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 04dc917f..4ea461a9 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -65,7 +65,7 @@ contract GenerateGenesis is DeployScroll { } // set code - L2MessageQueue _queue = new L2MessageQueue(OWNER_ADDR); + L2MessageQueue _queue = new L2MessageQueue(DEPLOYER_ADDR); vm.etch(predeployAddr, address(_queue).code); // set storage @@ -85,7 +85,7 @@ contract GenerateGenesis is DeployScroll { } // set code - L1GasPriceOracle _oracle = new L1GasPriceOracle(OWNER_ADDR, true); + L1GasPriceOracle _oracle = new L1GasPriceOracle(DEPLOYER_ADDR, true); vm.etch(predeployAddr, address(_oracle).code); // set storage @@ -108,7 +108,7 @@ contract GenerateGenesis is DeployScroll { } // set code - Whitelist _whitelist = new Whitelist(OWNER_ADDR); + Whitelist _whitelist = new Whitelist(DEPLOYER_ADDR); vm.etch(predeployAddr, address(_whitelist).code); // set storage @@ -151,10 +151,10 @@ contract GenerateGenesis is DeployScroll { } // set code - L2TxFeeVault _vault = new L2TxFeeVault(OWNER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + L2TxFeeVault _vault = new L2TxFeeVault(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); vm.etch(predeployAddr, address(_vault).code); - vm.prank(OWNER_ADDR); + vm.prank(DEPLOYER_ADDR); _vault.updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); // set storage From 9fe3780cb3dd52748cd479626f1476a9031279b6 Mon Sep 17 00:00:00 2001 From: Morty Date: Wed, 21 Aug 2024 21:20:28 +0800 Subject: [PATCH 21/48] fix: change frontend config name --- docker/scripts/gen-configs.sh | 2 +- scripts/deterministic/Constants.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index 43167a64..26ab8fa5 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -46,7 +46,7 @@ echo "generating balance-checker-config.json" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 echo "" -echo "generating .env.frontend" +echo "generating frontend-config" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateFrontendConfig || exit 1 echo "" diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 58395a57..4ec0bebf 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -33,5 +33,5 @@ string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.json"; string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json"; string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; -string constant FRONTEND_ENV_PATH = "./volume/.env.frontend"; +string constant FRONTEND_ENV_PATH = "./volume/frontend-config"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; From 560aad6dfcaf1b856a40857a90b4e0a96e55aed2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Wed, 28 Aug 2024 19:44:36 +0200 Subject: [PATCH 22/48] feat: enable Darwin for deterministic deployment (#25) Co-authored-by: Xi Lin Co-authored-by: Morty --- .env.example | 1 + .gitignore | 3 +- docker/Dockerfile.deploy | 1 + docker/Dockerfile.gen-configs | 1 + docker/config-example.toml | 1 + docker/templates/coordinator-config.json | 6 +- docker/templates/genesis.json | 1 + docker/templates/rollup-config.json | 22 +- hardhat-test/L1MessageQueue.spec.ts | 305 +--- hardhat-test/ScrollChain.blob.spec.ts | 149 -- .../ScrollChainV3CodecUpgrade.spec.ts | 228 +++ hardhat-test/ZkEvmVerifierV1.spec.ts | 6 +- hardhat-test/ZkEvmVerifierV2.spec.ts | 155 ++ hardhat-test/testdata/batch.commit.txt | 932 ++++++++++++ hardhat-test/testdata/batch.finalize.txt | 998 +++++++++++++ .../plonk-verifier/v0.12.0-rc.2_pi.data | Bin 0 -> 416 bytes .../plonk-verifier/v0.12.0-rc.2_proof.data | Bin 0 -> 2144 bytes .../plonk-verifier/v0.12.0-rc.3_pi.data | Bin 0 -> 416 bytes .../plonk-verifier/v0.12.0-rc.3_proof.data | Bin 0 -> 2144 bytes .../v0.9.8_pi.data} | Bin .../v0.9.8_proof.data} | Bin package.json | 2 +- scripts/deterministic/Configuration.sol | 2 + scripts/deterministic/DeployScroll.s.sol | 9 +- scripts/deterministic/GenerateConfigs.s.sol | 4 +- src/L1/L1ScrollMessenger.sol | 7 + src/L1/rollup/IL1MessageQueue.sol | 25 +- src/L1/rollup/IScrollChain.sol | 54 +- src/L1/rollup/L1MessageQueue.sol | 60 +- .../L1MessageQueueWithGasPriceOracle.sol | 4 + .../rollup/MultipleVersionRollupVerifier.sol | 18 +- src/L1/rollup/ScrollChain.sol | 623 +++++--- src/libraries/codec/BatchHeaderV0Codec.sol | 8 +- src/libraries/codec/BatchHeaderV1Codec.sol | 125 +- src/libraries/codec/BatchHeaderV3Codec.sol | 67 + src/libraries/codec/ChunkCodecV0.sol | 15 +- src/libraries/codec/ChunkCodecV1.sol | 21 +- src/libraries/verifier/IRollupVerifier.sol | 12 + src/libraries/verifier/IZkEvmVerifier.sol | 9 +- src/libraries/verifier/ZkEvmVerifierV1.sol | 6 +- src/libraries/verifier/ZkEvmVerifierV2.sol | 107 ++ .../plonk_verifier_v0.12.0-rc.2.bin | Bin 0 -> 16464 bytes .../plonk_verifier_v0.12.0-rc.3.bin | Bin 0 -> 16464 bytes ...er_0.9.8.bin => plonk_verifier_v0.9.8.bin} | Bin src/mocks/ScrollChainMockBlob.sol | 109 ++ src/mocks/ScrollChainMockFinalize.sol | 98 +- src/test/L1CustomERC20Gateway.t.sol | 2 + src/test/L1ERC1155Gateway.t.sol | 4 + src/test/L1ERC721Gateway.t.sol | 4 + src/test/L1ETHGateway.t.sol | 2 + src/test/L1GatewayTestBase.t.sol | 26 +- src/test/L1MessageQueue.t.sol | 628 ++++++++ src/test/L1ScrollMessengerTest.t.sol | 6 + src/test/L1StandardERC20Gateway.t.sol | 2 + src/test/L1WETHGateway.t.sol | 2 + src/test/ScrollChain.t.sol | 1257 ++++++++++++++--- .../AlternativeGasTokenTestBase.t.sol | 25 +- .../GasTokenDecimalGateway.t.sol | 7 +- .../L1ScrollMessengerNonETH.t.sol | 7 + .../L1WrappedTokenGateway.t.sol | 2 +- src/test/lido/L1LidoGateway.t.sol | 2 + src/test/mocks/MockRollupVerifier.sol | 8 + src/test/mocks/MockZkEvmVerifier.sol | 11 +- yarn.lock | 121 +- 64 files changed, 5158 insertions(+), 1152 deletions(-) delete mode 100644 hardhat-test/ScrollChain.blob.spec.ts create mode 100644 hardhat-test/ScrollChainV3CodecUpgrade.spec.ts create mode 100644 hardhat-test/ZkEvmVerifierV2.spec.ts create mode 100644 hardhat-test/testdata/batch.commit.txt create mode 100644 hardhat-test/testdata/batch.finalize.txt create mode 100644 hardhat-test/testdata/plonk-verifier/v0.12.0-rc.2_pi.data create mode 100644 hardhat-test/testdata/plonk-verifier/v0.12.0-rc.2_proof.data create mode 100644 hardhat-test/testdata/plonk-verifier/v0.12.0-rc.3_pi.data create mode 100644 hardhat-test/testdata/plonk-verifier/v0.12.0-rc.3_proof.data rename hardhat-test/testdata/{plonk_verifier_0.9.8_pi.data => plonk-verifier/v0.9.8_pi.data} (100%) rename hardhat-test/testdata/{plonk_verifier_0.9.8_proof.data => plonk-verifier/v0.9.8_proof.data} (100%) create mode 100644 src/libraries/codec/BatchHeaderV3Codec.sol create mode 100644 src/libraries/verifier/ZkEvmVerifierV2.sol create mode 100644 src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.2.bin create mode 100644 src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.3.bin rename src/libraries/verifier/plonk-verifier/{plonk_verifier_0.9.8.bin => plonk_verifier_v0.9.8.bin} (100%) create mode 100644 src/mocks/ScrollChainMockBlob.sol create mode 100644 src/test/L1MessageQueue.t.sol diff --git a/.env.example b/.env.example index 49e95ed1..2ce666bd 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,7 @@ ### NOTE: DO NOT USE THIS FILE IF USING TESTNET'S .ENV ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1 +MAINNET_FORK_RPC= RINKEBY_RPC=https://eth-rinkeby.alchemyapi.io/v2/ SCROLL_L1_RPC=https://prealpha.scroll.io/l1 SCROLL_L2_RPC=https://prealpha.scroll.io/l2 diff --git a/.gitignore b/.gitignore index ecf447b4..185194c4 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ broadcast # Visual Studio Code .vscode -volume \ No newline at end of file +volume +.DS_Store diff --git a/docker/Dockerfile.deploy b/docker/Dockerfile.deploy index 9e9136b0..2204b199 100644 --- a/docker/Dockerfile.deploy +++ b/docker/Dockerfile.deploy @@ -23,6 +23,7 @@ RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae # copy dependencies COPY ./lib /contracts/lib COPY ./node_modules/@openzeppelin /contracts/node_modules/@openzeppelin +COPY ./node_modules/hardhat /contracts/node_modules/hardhat # copy configurations COPY foundry.toml /contracts/foundry.toml diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs index b9c5e63b..c18534ed 100644 --- a/docker/Dockerfile.gen-configs +++ b/docker/Dockerfile.gen-configs @@ -23,6 +23,7 @@ RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae # copy dependencies COPY ./lib /contracts/lib COPY ./node_modules/@openzeppelin /contracts/node_modules/@openzeppelin +COPY ./node_modules/hardhat /contracts/node_modules/hardhat # copy configurations COPY foundry.toml /contracts/foundry.toml diff --git a/docker/config-example.toml b/docker/config-example.toml index 09df81db..02e70ef1 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -9,6 +9,7 @@ CHAIN_ID_L2 = 222222 MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 MAX_CHUNK_IN_BATCH = 15 +MAX_BATCH_IN_BUNDLE = 30 MAX_L1_MESSAGE_GAS_LIMIT = 10000000 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 diff --git a/docker/templates/coordinator-config.json b/docker/templates/coordinator-config.json index f495637e..35013cad 100644 --- a/docker/templates/coordinator-config.json +++ b/docker/templates/coordinator-config.json @@ -4,11 +4,13 @@ "session_attempts": 100, "chunk_collection_time_sec": 3600, "batch_collection_time_sec": 600, + "bundle_collection_time_sec": 600, "verifier": { - "fork_name": "bernoulli", + "fork_name": "darwin", "mock_mode": false, "params_path": "/verifier/params", - "assets_path": "/verifier/assets" + "assets_path_lo": "/verifier/assets/lo", + "assets_path_hi": "/verifier/assets/hi" }, "max_verifier_workers": 4, "min_prover_version": "v4.3.41" diff --git a/docker/templates/genesis.json b/docker/templates/genesis.json index 27f86850..9e5647d9 100644 --- a/docker/templates/genesis.json +++ b/docker/templates/genesis.json @@ -16,6 +16,7 @@ "shanghaiBlock": 0, "bernoulliBlock": 0, "curieBlock": 0, + "darwinTime": 0, "clique": { "period": 3, "epoch": 30000 diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 9c093bb2..c4ce56c9 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -1,9 +1,6 @@ { "l1_config": { - "confirmations": "0x0", "endpoint": null, - "l1_message_queue_address": null, - "scroll_chain_address": null, "start_height": 0, "relayer_config": { "gas_price_oracle_contract_address": null, @@ -12,8 +9,9 @@ "escalate_blocks": 100, "escalate_multiple_num": 11, "escalate_multiple_den": 10, + "min_gas_tip": 1, "max_gas_price": 10000000000000, - "tx_type": "LegacyTx", + "tx_type": "DynamicFeeTx", "check_pending_time": 3, "confirmations": "0x0" }, @@ -21,7 +19,10 @@ "min_gas_price": 0, "gas_price_diff": 50000, "l1_base_fee_weight": 0.086, - "l1_blob_base_fee_weight": 0.030 + "l1_blob_base_fee_weight": 0.030, + "check_committed_batches_window_minutes": 5, + "l1_base_fee_default": 15000000000, + "l1_blob_base_fee_default": 1 }, "gas_oracle_sender_private_key": null } @@ -38,11 +39,13 @@ "escalate_blocks": 4, "escalate_multiple_num": 12, "escalate_multiple_den": 10, + "min_gas_tip": 100000000, "max_gas_price": 200000000000, "max_blob_gas_price": 200000000000, "tx_type": "DynamicFeeTx", "check_pending_time": 10, - "confirmations": "0x0" + "confirmations": "0x0", + "max_pending_blob_txs": 3 }, "gas_oracle_config": { "min_gas_price": 0, @@ -56,12 +59,14 @@ }, "enable_test_env_bypass_features": null, "finalize_batch_without_proof_timeout_sec": null, + "finalize_bundle_without_proof_timeout_sec": null, "gas_oracle_sender_private_key": null, "commit_sender_private_key": null, "finalize_sender_private_key": null, "l1_commit_gas_limit_multiplier": 1.2 }, "chunk_proposer_config": { + "propose_interval_milliseconds": 100, "max_block_num_per_chunk": null, "max_tx_num_per_chunk": null, "max_l1_commit_gas_per_chunk": 5000000, @@ -72,12 +77,17 @@ "max_uncompressed_batch_bytes_size": 634880 }, "batch_proposer_config": { + "propose_interval_milliseconds": 1000, "max_chunk_num_per_batch": null, "max_l1_commit_gas_per_batch": 5000000, "max_l1_commit_calldata_size_per_batch": 110000, "batch_timeout_sec": 2700, "gas_cost_increase_multiplier": 1.2, "max_uncompressed_batch_bytes_size": 634880 + }, + "bundle_proposer_config": { + "max_batch_num_per_bundle": 20, + "bundle_timeout_sec": 36000 } }, "db_config": { diff --git a/hardhat-test/L1MessageQueue.spec.ts b/hardhat-test/L1MessageQueue.spec.ts index 33109a2d..a4004105 100644 --- a/hardhat-test/L1MessageQueue.spec.ts +++ b/hardhat-test/L1MessageQueue.spec.ts @@ -5,25 +5,13 @@ import { expect } from "chai"; import { ethers } from "hardhat"; import { L1MessageQueue, L2GasPriceOracle } from "../typechain"; -import { - MaxUint256, - ZeroAddress, - concat, - encodeRlp, - getAddress, - hexlify, - keccak256, - randomBytes, - toBeHex, - toBigInt, -} from "ethers"; +import { MaxUint256, ZeroAddress, concat, encodeRlp, hexlify, keccak256, randomBytes, toBeHex } from "ethers"; describe("L1MessageQueue", async () => { let deployer: HardhatEthersSigner; let scrollChain: HardhatEthersSigner; let messenger: HardhatEthersSigner; let gateway: HardhatEthersSigner; - let signer: HardhatEthersSigner; let oracle: L2GasPriceOracle; let queue: L1MessageQueue; @@ -37,7 +25,7 @@ describe("L1MessageQueue", async () => { }; beforeEach(async () => { - [deployer, scrollChain, messenger, gateway, signer] = await ethers.getSigners(); + [deployer, scrollChain, messenger, gateway] = await ethers.getSigners(); const ProxyAdmin = await ethers.getContractFactory("ProxyAdmin", deployer); const admin = await ProxyAdmin.deploy(); @@ -62,51 +50,7 @@ describe("L1MessageQueue", async () => { await queue.initialize(messenger.address, scrollChain.address, ZeroAddress, oracle.getAddress(), 10000000); }); - context("auth", async () => { - it("should initialize correctly", async () => { - expect(await queue.owner()).to.eq(deployer.address); - expect(await queue.messenger()).to.eq(messenger.address); - expect(await queue.scrollChain()).to.eq(scrollChain.address); - expect(await queue.enforcedTxGateway()).to.eq(gateway.address); - expect(await queue.gasOracle()).to.eq(await oracle.getAddress()); - expect(await queue.maxGasLimit()).to.eq(10000000); - }); - - it("should revert, when initialize again", async () => { - await expect(queue.initialize(ZeroAddress, ZeroAddress, ZeroAddress, ZeroAddress, 0)).to.revertedWith( - "Initializable: contract is already initialized" - ); - }); - - context("#updateGasOracle", async () => { - it("should revert, when non-owner call", async () => { - await expect(queue.connect(signer).updateGasOracle(ZeroAddress)).to.revertedWith( - "Ownable: caller is not the owner" - ); - }); - - it("should succeed", async () => { - expect(await queue.gasOracle()).to.eq(await oracle.getAddress()); - await expect(queue.updateGasOracle(deployer.address)) - .to.emit(queue, "UpdateGasOracle") - .withArgs(await oracle.getAddress(), deployer.address); - expect(await queue.gasOracle()).to.eq(deployer.address); - }); - }); - - context("#updateMaxGasLimit", async () => { - it("should revert, when non-owner call", async () => { - await expect(queue.connect(signer).updateMaxGasLimit(0)).to.revertedWith("Ownable: caller is not the owner"); - }); - - it("should succeed", async () => { - expect(await queue.maxGasLimit()).to.eq(10000000); - await expect(queue.updateMaxGasLimit(0)).to.emit(queue, "UpdateMaxGasLimit").withArgs(10000000, 0); - expect(await queue.maxGasLimit()).to.eq(0); - }); - }); - }); - + // other functions are tested in `src/test/L1MessageQueue.t.sol` context("#computeTransactionHash", async () => { it("should succeed", async () => { const sender = "0xb2a70fab1a45b1b9be443b6567849a1702bc1232"; @@ -147,247 +91,4 @@ describe("L1MessageQueue", async () => { } }); }); - - context("#appendCrossDomainMessage", async () => { - it("should revert, when non-messenger call", async () => { - await expect(queue.connect(signer).appendCrossDomainMessage(ZeroAddress, 0, "0x")).to.revertedWith( - "Only callable by the L1ScrollMessenger" - ); - }); - - it("should revert, when exceed maxGasLimit", async () => { - await expect(queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 10000001, "0x")).to.revertedWith( - "Gas limit must not exceed maxGasLimit" - ); - }); - - it("should revert, when below intrinsic gas", async () => { - await expect(queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 0, "0x")).to.revertedWith( - "Insufficient gas limit, must be above intrinsic gas" - ); - }); - - it("should succeed", async () => { - expect(await queue.nextCrossDomainMessageIndex()).to.eq(0n); - const sender = getAddress( - toBeHex((toBigInt(messenger.address) + toBigInt("0x1111000000000000000000000000000000001111")) % 2n ** 160n) - .slice(2) - .padStart(40, "0") - ); - const hash = await queue.computeTransactionHash(sender, 0, 0, signer.address, 100000, "0x01"); - await expect(queue.connect(messenger).appendCrossDomainMessage(signer.address, 100000, "0x01")) - .to.emit(queue, "QueueTransaction") - .withArgs(sender, signer.address, 0, 0, 100000, "0x01"); - expect(await queue.nextCrossDomainMessageIndex()).to.eq(1n); - expect(await queue.getCrossDomainMessage(0)).to.eq(hash); - }); - }); - - context("#appendEnforcedTransaction", async () => { - it("should revert, when non-gateway call", async () => { - await expect( - queue.connect(signer).appendEnforcedTransaction(signer.address, ZeroAddress, 0, 0, "0x") - ).to.revertedWith("Only callable by the EnforcedTxGateway"); - }); - - it("should revert, when sender is not EOA", async () => { - await expect( - queue.connect(gateway).appendEnforcedTransaction(queue.getAddress(), ZeroAddress, 0, 0, "0x") - ).to.revertedWith("only EOA"); - }); - - it("should revert, when exceed maxGasLimit", async () => { - await expect( - queue.connect(gateway).appendEnforcedTransaction(signer.address, ZeroAddress, 0, 10000001, "0x") - ).to.revertedWith("Gas limit must not exceed maxGasLimit"); - }); - - it("should revert, when below intrinsic gas", async () => { - await expect( - queue.connect(gateway).appendEnforcedTransaction(signer.address, ZeroAddress, 0, 0, "0x") - ).to.revertedWith("Insufficient gas limit, must be above intrinsic gas"); - }); - - it("should succeed", async () => { - expect(await queue.nextCrossDomainMessageIndex()).to.eq(0n); - const sender = signer.address; - const hash = await queue.computeTransactionHash(sender, 0, 200, signer.address, 100000, "0x01"); - await expect( - queue.connect(gateway).appendEnforcedTransaction(signer.address, signer.address, 200, 100000, "0x01") - ) - .to.emit(queue, "QueueTransaction") - .withArgs(sender, signer.address, 200, 0, 100000, "0x01"); - expect(await queue.nextCrossDomainMessageIndex()).to.eq(1n); - expect(await queue.getCrossDomainMessage(0)).to.eq(hash); - }); - }); - - context("#popCrossDomainMessage", async () => { - it("should revert, when non-scrollChain call", async () => { - await expect(queue.connect(signer).popCrossDomainMessage(0, 0, 0)).to.revertedWith( - "Only callable by the ScrollChain" - ); - }); - - it("should revert, when pop too many messages", async () => { - await expect(queue.connect(scrollChain).popCrossDomainMessage(0, 257, 0)).to.revertedWith( - "pop too many messages" - ); - }); - - it("should revert, when start index mismatch", async () => { - await expect(queue.connect(scrollChain).popCrossDomainMessage(1, 256, 0)).to.revertedWith("start index mismatch"); - }); - - it("should succeed", async () => { - // append 512 messages - for (let i = 0; i < 256 * 2; i++) { - await queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 1000000, "0x"); - } - - // pop 50 messages with no skip - await expect(queue.connect(scrollChain).popCrossDomainMessage(0, 50, 0)) - .to.emit(queue, "DequeueTransaction") - .withArgs(0, 50, 0); - for (let i = 0; i < 50; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(false); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - expect(await queue.pendingQueueIndex()).to.eq(50); - - // pop 10 messages all skip - await expect(queue.connect(scrollChain).popCrossDomainMessage(50, 10, 1023)) - .to.emit(queue, "DequeueTransaction") - .withArgs(50, 10, 1023); - expect(await queue.pendingQueueIndex()).to.eq(60); - for (let i = 50; i < 60; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(true); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - - // pop 20 messages, skip first 5 - await expect(queue.connect(scrollChain).popCrossDomainMessage(60, 20, 31)) - .to.emit(queue, "DequeueTransaction") - .withArgs(60, 20, 31); - expect(await queue.pendingQueueIndex()).to.eq(80); - for (let i = 60; i < 65; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(true); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - for (let i = 65; i < 80; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(false); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - - // pop 256 messages with random skip - const bitmap = toBigInt("0x496525059c3f33758d17030403e45afe067b8a0ae1317cda0487fd2932cbea1a"); - const tx = await queue.connect(scrollChain).popCrossDomainMessage(80, 256, bitmap); - await expect(tx).to.emit(queue, "DequeueTransaction").withArgs(80, 256, bitmap); - console.log("gas used:", (await tx.wait())!.gasUsed.toString()); - for (let i = 80; i < 80 + 256; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(((bitmap >> toBigInt(i - 80)) & 1n) === 1n); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - }); - - // @note skip this random benchmark tests - for (const count1 of [1, 2, 128, 129, 256]) { - for (const count2 of [1, 2, 128, 129, 256]) { - for (const count3 of [1, 2, 128, 129, 256]) { - it.skip(`should succeed on random tests, pop three times each with ${count1} ${count2} ${count3} msgs`, async () => { - // append count1 + count2 + count3 messages - for (let i = 0; i < count1 + count2 + count3; i++) { - await queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 1000000, "0x"); - } - - // first pop `count1` messages - const bitmap1 = toBigInt(randomBytes(32)); - let tx = await queue.connect(scrollChain).popCrossDomainMessage(0, count1, bitmap1); - await expect(tx) - .to.emit(queue, "DequeueTransaction") - .withArgs(0, count1, bitmap1 & ((1n << toBigInt(count1)) - 1n)); - for (let i = 0; i < count1; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(((bitmap1 >> toBigInt(i)) & 1n) === 1n); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - - // then pop `count2` messages - const bitmap2 = toBigInt(randomBytes(32)); - tx = await queue.connect(scrollChain).popCrossDomainMessage(count1, count2, bitmap2); - await expect(tx) - .to.emit(queue, "DequeueTransaction") - .withArgs(count1, count2, bitmap2 & ((1n << toBigInt(count2)) - 1n)); - for (let i = 0; i < count2; i++) { - expect(await queue.isMessageSkipped(i + count1)).to.eq(((bitmap2 >> toBigInt(i)) & 1n) === 1n); - expect(await queue.isMessageDropped(i + count1)).to.eq(false); - } - - // last pop `count3` messages - const bitmap3 = toBigInt(randomBytes(32)); - tx = await queue.connect(scrollChain).popCrossDomainMessage(count1 + count2, count3, bitmap3); - await expect(tx) - .to.emit(queue, "DequeueTransaction") - .withArgs(count1 + count2, count3, bitmap3 & ((1n << toBigInt(count3)) - 1n)); - for (let i = 0; i < count3; i++) { - expect(await queue.isMessageSkipped(i + count1 + count2)).to.eq(((bitmap3 >> toBigInt(i)) & 1n) === 1n); - expect(await queue.isMessageDropped(i + count1 + count2)).to.eq(false); - } - }); - } - } - } - }); - - context("#dropCrossDomainMessage", async () => { - it("should revert, when non-messenger call", async () => { - await expect(queue.connect(signer).dropCrossDomainMessage(0)).to.revertedWith( - "Only callable by the L1ScrollMessenger" - ); - }); - - it("should revert, when drop non-skipped message", async () => { - // append 10 messages - for (let i = 0; i < 10; i++) { - await queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 1000000, "0x"); - } - // pop 5 messages with no skip - await expect(queue.connect(scrollChain).popCrossDomainMessage(0, 5, 0)) - .to.emit(queue, "DequeueTransaction") - .withArgs(0, 5, 0); - for (let i = 0; i < 5; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(false); - expect(await queue.isMessageDropped(i)).to.eq(false); - } - expect(await queue.pendingQueueIndex()).to.eq(5); - - for (let i = 0; i < 5; i++) { - await expect(queue.connect(messenger).dropCrossDomainMessage(i)).to.revertedWith("drop non-skipped message"); - } - - // drop pending message - for (let i = 6; i < 10; i++) { - await expect(queue.connect(messenger).dropCrossDomainMessage(i)).to.revertedWith("cannot drop pending message"); - } - }); - - it("should succeed", async () => { - // append 10 messages - for (let i = 0; i < 10; i++) { - await queue.connect(messenger).appendCrossDomainMessage(ZeroAddress, 1000000, "0x"); - } - // pop 10 messages, all skipped - await expect(queue.connect(scrollChain).popCrossDomainMessage(0, 10, 0x3ff)) - .to.emit(queue, "DequeueTransaction") - .withArgs(0, 10, 0x3ff); - - for (let i = 0; i < 10; i++) { - expect(await queue.isMessageSkipped(i)).to.eq(true); - expect(await queue.isMessageDropped(i)).to.eq(false); - await expect(queue.connect(messenger).dropCrossDomainMessage(i)).to.emit(queue, "DropTransaction").withArgs(i); - await expect(queue.connect(messenger).dropCrossDomainMessage(i)).to.revertedWith("message already dropped"); - expect(await queue.isMessageSkipped(i)).to.eq(true); - expect(await queue.isMessageDropped(i)).to.eq(true); - } - }); - }); }); diff --git a/hardhat-test/ScrollChain.blob.spec.ts b/hardhat-test/ScrollChain.blob.spec.ts deleted file mode 100644 index 4f6689c6..00000000 --- a/hardhat-test/ScrollChain.blob.spec.ts +++ /dev/null @@ -1,149 +0,0 @@ -/* eslint-disable node/no-unpublished-import */ -/* eslint-disable node/no-missing-import */ -import { ZeroAddress } from "ethers"; -import { ethers } from "hardhat"; - -import { ScrollChain, L1MessageQueue } from "../typechain"; -import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; -import { randomBytes } from "crypto"; -import { expect } from "chai"; - -describe("ScrollChain.blob", async () => { - let deployer: HardhatEthersSigner; - let signer: HardhatEthersSigner; - - let queue: L1MessageQueue; - let chain: ScrollChain; - - beforeEach(async () => { - [deployer, signer] = await ethers.getSigners(); - - const EmptyContract = await ethers.getContractFactory("EmptyContract", deployer); - const empty = await EmptyContract.deploy(); - - const ProxyAdmin = await ethers.getContractFactory("ProxyAdmin", deployer); - const admin = await ProxyAdmin.deploy(); - - const TransparentUpgradeableProxy = await ethers.getContractFactory("TransparentUpgradeableProxy", deployer); - const queueProxy = await TransparentUpgradeableProxy.deploy(empty.getAddress(), admin.getAddress(), "0x"); - const chainProxy = await TransparentUpgradeableProxy.deploy(empty.getAddress(), admin.getAddress(), "0x"); - - const L1MessageQueue = await ethers.getContractFactory("L1MessageQueue", deployer); - const queueImpl = await L1MessageQueue.deploy(deployer.address, chainProxy.getAddress(), deployer.address); - await admin.upgrade(queueProxy.getAddress(), queueImpl.getAddress()); - - const ScrollChain = await ethers.getContractFactory("ScrollChain", deployer); - const chainImpl = await ScrollChain.deploy(0, queueProxy.getAddress(), deployer.address); - await admin.upgrade(chainProxy.getAddress(), chainImpl.getAddress()); - - queue = await ethers.getContractAt("L1MessageQueue", await queueProxy.getAddress(), deployer); - chain = await ethers.getContractAt("ScrollChain", await chainProxy.getAddress(), deployer); - - await chain.initialize(queue.getAddress(), ZeroAddress, 100); - await chain.addSequencer(deployer.address); - await chain.addProver(deployer.address); - await queue.initialize(deployer.address, chain.getAddress(), deployer.address, deployer.address, 10000000); - }); - - context("commit batch", async () => { - let batchHeader0: Uint8Array; - - beforeEach(async () => { - // import 10 L1 messages - for (let i = 0; i < 10; i++) { - queue.appendCrossDomainMessage(deployer.address, 1000000, "0x"); - } - - // import genesis batch first - batchHeader0 = new Uint8Array(89); - batchHeader0[25] = 1; - await chain.importGenesisBatch(batchHeader0, randomBytes(32)); - }); - - it("should revert when caller is not sequencer", async () => { - await expect(chain.connect(signer).commitBatch(1, batchHeader0, [], "0x")).to.revertedWithCustomError( - chain, - "ErrorCallerIsNotSequencer" - ); - }); - - it("should revert when batch is empty", async () => { - await expect(chain.commitBatch(1, batchHeader0, [], "0x")).to.revertedWithCustomError(chain, "ErrorBatchIsEmpty"); - }); - - it("should revert when batch header length too small", async () => { - const header = new Uint8Array(120); - header[0] = 1; - await expect(chain.commitBatch(1, header, ["0x"], "0x")).to.revertedWithCustomError( - chain, - "ErrorBatchHeaderLengthTooSmall" - ); - }); - - it("should revert when wrong bitmap length", async () => { - const header = new Uint8Array(122); - header[0] = 1; - await expect(chain.commitBatch(1, header, ["0x"], "0x")).to.revertedWithCustomError( - chain, - "ErrorIncorrectBitmapLength" - ); - }); - - it("should revert when incorrect parent batch hash", async () => { - batchHeader0[25] = 2; - await expect(chain.commitBatch(1, batchHeader0, ["0x"], "0x")).to.revertedWithCustomError( - chain, - "ErrorIncorrectBatchHash" - ); - batchHeader0[25] = 1; - }); - - it("should revert when ErrorNoBlobFound", async () => { - await expect(chain.commitBatch(1, batchHeader0, ["0x"], "0x")).to.revertedWithCustomError( - chain, - "ErrorNoBlobFound" - ); - }); - - /* Hardhat doesn't have support for EIP4844 yet. - const makeTransaction = async (data: string, value: bigint, blobVersionedHashes: Array) => { - const tx = new Transaction(); - tx.type = 3; - tx.to = await chain.getAddress(); - tx.data = data; - tx.nonce = await deployer.getNonce(); - tx.gasLimit = 1000000; - tx.maxPriorityFeePerGas = (await ethers.provider.getFeeData()).maxPriorityFeePerGas; - tx.maxFeePerGas = (await ethers.provider.getFeeData()).maxFeePerGas; - tx.value = value; - tx.chainId = (await ethers.provider.getNetwork()).chainId; - tx.maxFeePerBlobGas = ethers.parseUnits("1", "gwei"); - tx.blobVersionedHashes = blobVersionedHashes; - return tx; - }; - - it("should revert when ErrorFoundMultipleBlob", async () => { - const data = chain.interface.encodeFunctionData("commitBatch", [1, batchHeader0, ["0x"], "0x"]); - const tx = await makeTransaction(data, 0n, [ZeroHash, ZeroHash]); - const signature = await deployer.signMessage(tx.unsignedHash); - tx.signature = Signature.from(signature); - const r = await ethers.provider.broadcastTransaction(tx.serialized); - await expect(r).to.revertedWithCustomError(chain, "ErrorFoundMultipleBlob"); - }); - - it("should revert when ErrorNoBlockInChunk", async () => {}); - - it("should revert when ErrorIncorrectChunkLength", async () => {}); - - it("should revert when ErrorLastL1MessageSkipped", async () => {}); - - it("should revert when ErrorNumTxsLessThanNumL1Msgs", async () => {}); - - it("should revert when ErrorTooManyTxsInOneChunk", async () => {}); - - it("should revert when ErrorIncorrectBitmapLength", async () => {}); - - it("should succeed", async () => {}); - */ - }); -}); diff --git a/hardhat-test/ScrollChainV3CodecUpgrade.spec.ts b/hardhat-test/ScrollChainV3CodecUpgrade.spec.ts new file mode 100644 index 00000000..ecee8d4a --- /dev/null +++ b/hardhat-test/ScrollChainV3CodecUpgrade.spec.ts @@ -0,0 +1,228 @@ +/* eslint-disable node/no-missing-import */ +/* eslint-disable node/no-unpublished-import */ +import * as fs from "fs"; +import { expect } from "chai"; +import { ZeroAddress, toQuantity } from "ethers"; +import { ethers, network } from "hardhat"; + +const Deployer = "0x0A47CeC6657570831AE93db36367656e5597C310"; +const ScrollOwner = "0x798576400F7D662961BA15C6b3F3d813447a26a6"; +const MESSENGER = "0x6774Bcbd5ceCeF1336b5300fb5186a12DDD8b367"; +const MESSAGE_QUEUE = "0x0d7E906BD9cAFa154b048cFa766Cc1E54E39AF9B"; +const SCROLL_CHAIN = "0xa13BAF47339d63B743e7Da8741db5456DAc1E556"; +const COMMITTER = "0xcF2898225ED05Be911D3709d9417e86E0b4Cfc8f"; +const FINALIZER = "0x356483dC32B004f32Ea0Ce58F7F88879886e9074"; + +// random real mainnet batches to test compatibility of committing and finalizing +// to run this tests, you need to config `MAINNET_FORK_RPC` in `.env` file and change `it.skip` to `it`. +describe("ScrollChainV3CodecUpgrade.spec", async () => { + const mockETHBalance = async (account: string, balance: bigint) => { + await network.provider.send("hardhat_setBalance", [account, toQuantity(balance)]); + expect(await ethers.provider.getBalance(account)).to.eq(balance); + }; + + const genCommit = async (batch: { index: number; batch_hash: string; commit_tx: string }) => { + it.skip("should succeed to commit batch: " + batch.index, async () => { + const provider = new ethers.JsonRpcProvider("https://rpc.ankr.com/eth"); + const originalTx = await provider.getTransaction(batch.commit_tx); + const originalReceipt = await provider.getTransactionReceipt(batch.commit_tx); + + await network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + jsonRpcUrl: process.env.MAINNET_FORK_RPC!, + blockNumber: originalReceipt!.blockNumber - 1, + }, + }, + ], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [Deployer], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ScrollOwner], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [COMMITTER], + }); + + const deployer = await ethers.getSigner(Deployer); + const owner = await ethers.getSigner(ScrollOwner); + const committer = await ethers.getSigner(COMMITTER); + await mockETHBalance(committer.address, ethers.parseEther("100")); + await mockETHBalance(deployer.address, ethers.parseEther("100")); + await mockETHBalance(owner.address, ethers.parseEther("100")); + + const ScrollChainMockBlob = await ethers.getContractFactory("ScrollChainMockBlob", deployer); + const L1MessageQueueWithGasPriceOracle = await ethers.getContractFactory( + "L1MessageQueueWithGasPriceOracle", + deployer + ); + const MultipleVersionRollupVerifier = await ethers.getContractFactory("MultipleVersionRollupVerifier", deployer); + + const verifier = await MultipleVersionRollupVerifier.deploy( + [0, 1, 2], + [ + "0x585DfaD7bF4099E011D185E266907A8ab60DAD2D", + "0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247", + "0x63FB51C55d9605a75F8872C80De260a00fACfaA2", + ] + ); + const queueImpl = await L1MessageQueueWithGasPriceOracle.deploy( + MESSENGER, + SCROLL_CHAIN, + "0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d" + ); + const chainImpl = await ScrollChainMockBlob.deploy(534352, MESSAGE_QUEUE, verifier.getAddress()); + + const admin = await ethers.getContractAt("ProxyAdmin", "0xEB803eb3F501998126bf37bB823646Ed3D59d072", deployer); + await admin.connect(owner).upgrade(SCROLL_CHAIN, chainImpl.getAddress()); + await admin.connect(owner).upgrade(MESSAGE_QUEUE, queueImpl.getAddress()); + + const queue = await ethers.getContractAt("L1MessageQueueWithGasPriceOracle", MESSAGE_QUEUE, deployer); + if ((await queue.whitelistChecker()) === ZeroAddress) { + await queue.initializeV2(); + } + await queue.initializeV3(); + const chain = await ethers.getContractAt("ScrollChainMockBlob", SCROLL_CHAIN, deployer); + + if (originalTx!.blobVersionedHashes) { + await chain.setBlobVersionedHash(originalTx!.blobVersionedHashes[0]); + } + + const tx = await committer.sendTransaction({ + to: SCROLL_CHAIN, + data: originalTx!.data, + }); + await expect(tx).emit(chain, "CommitBatch").withArgs(batch.index, batch.batch_hash); + expect(await chain.committedBatches(batch.index)).to.eq(batch.batch_hash); + const r = await tx.wait(); + console.log( + "Fork At Block:", + originalReceipt!.blockNumber - 1, + `OriginalGasUsed[${originalReceipt?.gasUsed}]`, + `NowGasUsed[${r?.gasUsed}]` + ); + }); + }; + + const genFinalize = async (batch: { index: number; batch_hash: string; finalize_tx: string }) => { + it.skip("should succeed to finalize batch: " + batch.index, async () => { + const provider = new ethers.JsonRpcProvider("https://rpc.ankr.com/eth"); + const originalTx = await provider.getTransaction(batch.finalize_tx); + const originalReceipt = await provider.getTransactionReceipt(batch.finalize_tx); + + await network.provider.request({ + method: "hardhat_reset", + params: [ + { + forking: { + jsonRpcUrl: process.env.MAINNET_FORK_RPC!, + blockNumber: originalReceipt!.blockNumber - 1, + }, + }, + ], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [Deployer], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [ScrollOwner], + }); + await network.provider.request({ + method: "hardhat_impersonateAccount", + params: [FINALIZER], + }); + + const deployer = await ethers.getSigner(Deployer); + const owner = await ethers.getSigner(ScrollOwner); + const finalizer = await ethers.getSigner(FINALIZER); + await mockETHBalance(finalizer.address, ethers.parseEther("100")); + await mockETHBalance(deployer.address, ethers.parseEther("100")); + await mockETHBalance(owner.address, ethers.parseEther("100")); + + const ScrollChainMockBlob = await ethers.getContractFactory("ScrollChainMockBlob", deployer); + const L1MessageQueueWithGasPriceOracle = await ethers.getContractFactory( + "L1MessageQueueWithGasPriceOracle", + deployer + ); + const MultipleVersionRollupVerifier = await ethers.getContractFactory("MultipleVersionRollupVerifier", deployer); + + const verifier = await MultipleVersionRollupVerifier.deploy( + [0, 1, 2], + [ + "0x585DfaD7bF4099E011D185E266907A8ab60DAD2D", + "0x4b289E4A5331bAFBc6cCb2F10C39B8EDceCDb247", + "0x63FB51C55d9605a75F8872C80De260a00fACfaA2", + ] + ); + const queueImpl = await L1MessageQueueWithGasPriceOracle.deploy( + MESSENGER, + SCROLL_CHAIN, + "0x72CAcBcfDe2d1e19122F8A36a4d6676cd39d7A5d" + ); + const chainImpl = await ScrollChainMockBlob.deploy(534352, MESSAGE_QUEUE, verifier.getAddress()); + + const admin = await ethers.getContractAt("ProxyAdmin", "0xEB803eb3F501998126bf37bB823646Ed3D59d072", deployer); + await admin.connect(owner).upgrade(SCROLL_CHAIN, chainImpl.getAddress()); + await admin.connect(owner).upgrade(MESSAGE_QUEUE, queueImpl.getAddress()); + + const queue = await ethers.getContractAt("L1MessageQueueWithGasPriceOracle", MESSAGE_QUEUE, deployer); + if ((await queue.whitelistChecker()) === ZeroAddress) { + await queue.initializeV2(); + } + await queue.initializeV3(); + const chain = await ethers.getContractAt("ScrollChainMockBlob", SCROLL_CHAIN, deployer); + + if (originalTx!.blobVersionedHashes) { + await chain.setBlobVersionedHash(originalTx!.blobVersionedHashes[0]); + } + + expect(await chain.lastFinalizedBatchIndex()).to.eq(batch.index - 1); + const tx = await finalizer.sendTransaction({ + to: SCROLL_CHAIN, + data: originalTx!.data, + }); + await expect(tx).emit(chain, "FinalizeBatch"); + expect(await chain.lastFinalizedBatchIndex()).to.eq(batch.index); + const r = await tx.wait(); + console.log( + "Fork At Block:", + originalReceipt!.blockNumber - 1, + `OriginalGasUsed[${originalReceipt?.gasUsed}]`, + `NowGasUsed[${r?.gasUsed}]` + ); + }); + }; + + context("commit batches", async () => { + const batches = fs.readFileSync("./hardhat-test/testdata/batch.commit.txt").toString().split("\n"); + for (const batchStr of batches) { + const batch: { + index: number; + batch_hash: string; + commit_tx: string; + } = JSON.parse(batchStr); + genCommit(batch); + } + }); + + context("finalize batches", async () => { + const batches = fs.readFileSync("./hardhat-test/testdata/batch.finalize.txt").toString().split("\n"); + for (const batchStr of batches) { + const batch: { + index: number; + batch_hash: string; + finalize_tx: string; + } = JSON.parse(batchStr); + genFinalize(batch); + } + }); +}); diff --git a/hardhat-test/ZkEvmVerifierV1.spec.ts b/hardhat-test/ZkEvmVerifierV1.spec.ts index ec523e25..4b564744 100644 --- a/hardhat-test/ZkEvmVerifierV1.spec.ts +++ b/hardhat-test/ZkEvmVerifierV1.spec.ts @@ -16,7 +16,7 @@ describe("ZkEvmVerifierV1", async () => { beforeEach(async () => { [deployer] = await ethers.getSigners(); - const bytecode = hexlify(fs.readFileSync("./src/libraries/verifier/plonk-verifier/plonk_verifier_0.9.8.bin")); + const bytecode = hexlify(fs.readFileSync("./src/libraries/verifier/plonk-verifier/plonk_verifier_v0.9.8.bin")); const tx = await deployer.sendTransaction({ data: bytecode }); const receipt = await tx.wait(); @@ -25,8 +25,8 @@ describe("ZkEvmVerifierV1", async () => { }); it("should succeed", async () => { - const proof = hexlify(fs.readFileSync("./hardhat-test/testdata/plonk_verifier_0.9.8_proof.data")); - const instances = fs.readFileSync("./hardhat-test/testdata/plonk_verifier_0.9.8_pi.data"); + const proof = hexlify(fs.readFileSync("./hardhat-test/testdata/plonk-verifier/v0.9.8_proof.data")); + const instances = fs.readFileSync("./hardhat-test/testdata/plonk-verifier/v0.9.8_pi.data"); const publicInputHash = new Uint8Array(32); for (let i = 0; i < 32; i++) { diff --git a/hardhat-test/ZkEvmVerifierV2.spec.ts b/hardhat-test/ZkEvmVerifierV2.spec.ts new file mode 100644 index 00000000..f493fdf5 --- /dev/null +++ b/hardhat-test/ZkEvmVerifierV2.spec.ts @@ -0,0 +1,155 @@ +/* eslint-disable node/no-unpublished-import */ +/* eslint-disable node/no-missing-import */ +import { HardhatEthersSigner } from "@nomicfoundation/hardhat-ethers/signers"; +import { expect } from "chai"; +import { hexlify } from "ethers"; +import fs from "fs"; +import { ethers } from "hardhat"; + +import { ScrollChainMockBlob, ZkEvmVerifierV2 } from "../typechain"; + +describe("ZkEvmVerifierV2", async () => { + let deployer: HardhatEthersSigner; + + let zkEvmVerifier: ZkEvmVerifierV2; + let chain: ScrollChainMockBlob; + + const genPublicInputs = (instances: Buffer): Uint8Array => { + // build public inputs + const publicInputs = new Uint8Array(172); + publicInputs.fill(0); + // layer2ChainId, last 8 bytes of instances[0x120:0x140] + for (let i = 0; i < 8; ++i) { + publicInputs[i] = instances[0x140 - (8 - i)]; + } + // numBatches, last 4 bytes of instances[0x180:0x1a0] + 1 + let numBatches = Number(hexlify(instances.subarray(0x180, 0x1a0))) + 1; + for (let i = 3; i >= 0; --i) { + publicInputs[8 + i] = numBatches % 256; + numBatches = Math.floor(numBatches / 256); + } + // prevStateRoot, concat(last 16 bytes of instances[0x20:0x40], last 16 bytes of instances[0x40:0x60]) + for (let i = 0; i < 16; ++i) { + publicInputs[12 + i] = instances[0x40 - (16 - i)]; + publicInputs[12 + 16 + i] = instances[0x60 - (16 - i)]; + } + // prevBatchHash, concat(last 16 bytes of instances[0x60:0x80], last 16 bytes of instances[0x80:0xa0]) + for (let i = 0; i < 16; ++i) { + publicInputs[44 + i] = instances[0x80 - (16 - i)]; + publicInputs[44 + 16 + i] = instances[0xa0 - (16 - i)]; + } + // postStateRoot, concat(last 16 bytes of instances[0xa0:0xc0], last 16 bytes of instances[0xc0:0xe0]) + for (let i = 0; i < 16; ++i) { + publicInputs[76 + i] = instances[0xc0 - (16 - i)]; + publicInputs[76 + 16 + i] = instances[0xe0 - (16 - i)]; + } + // batchHash, concat(last 16 bytes of instances[0xe0:0x100], last 16 bytes of instances[0x100:0x120]) + for (let i = 0; i < 16; ++i) { + publicInputs[108 + i] = instances[0x100 - (16 - i)]; + publicInputs[108 + 16 + i] = instances[0x120 - (16 - i)]; + } + // withdrawRoot, concat(last 16 bytes of instances[0x140:0x160], last 16 bytes of instances[0x160:0x180]) + for (let i = 0; i < 16; ++i) { + publicInputs[140 + i] = instances[0x160 - (16 - i)]; + publicInputs[140 + 16 + i] = instances[0x180 - (16 - i)]; + } + return publicInputs; + }; + + const doTest = async (version: string) => { + context("test with version:" + version, async () => { + let instances: Buffer; + let publicInputs: Uint8Array; + + beforeEach(async () => { + [deployer] = await ethers.getSigners(); + + const bytecode = hexlify( + fs.readFileSync(`./src/libraries/verifier/plonk-verifier/plonk_verifier_${version}.bin`) + ); + const tx = await deployer.sendTransaction({ data: bytecode }); + const receipt = await tx.wait(); + + instances = fs.readFileSync(`./hardhat-test/testdata/plonk-verifier/${version}_pi.data`); + publicInputs = genPublicInputs(instances); + const verifierDigest = hexlify(instances.subarray(0x0, 0x20)); + const layer2ChainId = hexlify(publicInputs.subarray(0, 8)); + + console.log("verifierDigest:", verifierDigest, "layer2ChainId:", BigInt(layer2ChainId)); + const ZkEvmVerifierV2 = await ethers.getContractFactory("ZkEvmVerifierV2", deployer); + zkEvmVerifier = await ZkEvmVerifierV2.deploy(receipt!.contractAddress!, verifierDigest); + + const MultipleVersionRollupVerifier = await ethers.getContractFactory( + "MultipleVersionRollupVerifier", + deployer + ); + const verifier = await MultipleVersionRollupVerifier.deploy([3], [await zkEvmVerifier.getAddress()]); + + const EmptyContract = await ethers.getContractFactory("EmptyContract", deployer); + const empty = await EmptyContract.deploy(); + + const ProxyAdmin = await ethers.getContractFactory("ProxyAdmin", deployer); + const admin = await ProxyAdmin.deploy(); + + const TransparentUpgradeableProxy = await ethers.getContractFactory("TransparentUpgradeableProxy", deployer); + const chainProxy = await TransparentUpgradeableProxy.deploy(empty.getAddress(), admin.getAddress(), "0x"); + + const ScrollChainMockBlob = await ethers.getContractFactory("ScrollChainMockBlob", deployer); + const chainImpl = await ScrollChainMockBlob.deploy(layer2ChainId, deployer.address, verifier.getAddress()); + await admin.upgrade(chainProxy.getAddress(), chainImpl.getAddress()); + + chain = await ethers.getContractAt("ScrollChainMockBlob", await chainProxy.getAddress(), deployer); + await chain.initialize(deployer.address, deployer.address, 100); + await chain.addProver(deployer.address); + }); + + it("should succeed when direct call ZkEvmVerifierV2", async () => { + const proof = hexlify(fs.readFileSync(`./hardhat-test/testdata/plonk-verifier/${version}_proof.data`)); + + // verify ok + const unsignedTx = await zkEvmVerifier.verify.populateTransaction(proof, publicInputs); + const tx = await deployer.sendTransaction(unsignedTx); + const receipt = await tx.wait(); + console.log("Gas Usage:", receipt?.gasUsed); + + // verify failed + await expect(zkEvmVerifier.verify(proof, publicInputs.reverse())).to.reverted; + }); + + it("should succeed when call through ScrollChain", async () => { + const proof = hexlify(fs.readFileSync(`./hardhat-test/testdata/plonk-verifier/${version}_proof.data`)); + + const lastFinalizedBatchIndex = 1; + const numBatches = Number(BigInt(hexlify(publicInputs.subarray(8, 12)))); + const batchIndex = lastFinalizedBatchIndex + numBatches; + const prevStateRoot = hexlify(publicInputs.subarray(12, 44)); + const prevBatchHash = hexlify(publicInputs.subarray(44, 76)); + const postStateRoot = hexlify(publicInputs.subarray(76, 108)); + const batchHash = hexlify(publicInputs.subarray(108, 140)); + const withdrawRoot = hexlify(publicInputs.subarray(140, 172)); + + await chain.setOverrideBatchHashCheck(true); + await chain.setLastFinalizedBatchIndex(lastFinalizedBatchIndex); + await chain.setFinalizedStateRoots(lastFinalizedBatchIndex, prevStateRoot); + await chain.setCommittedBatches(lastFinalizedBatchIndex, prevBatchHash); + await chain.setCommittedBatches(batchIndex, batchHash); + + const header = new Uint8Array(193); + header[0] = 3; // version 3 + let value = batchIndex; + for (let i = 8; i >= 1; --i) { + header[i] = value % 256; + value = Math.floor(value / 256); + } + // verify ok + const tx = await chain.finalizeBundleWithProof(header, postStateRoot, withdrawRoot, proof); + const receipt = await tx.wait(); + console.log("Gas Usage:", receipt?.gasUsed); + }); + }); + }; + + for (const version of ["v0.12.0-rc.2", "v0.12.0-rc.3"]) { + await doTest(version); + } +}); diff --git a/hardhat-test/testdata/batch.commit.txt b/hardhat-test/testdata/batch.commit.txt new file mode 100644 index 00000000..026e86dd --- /dev/null +++ b/hardhat-test/testdata/batch.commit.txt @@ -0,0 +1,932 @@ +{"index": 1423, "batch_hash": "0xfe5392fbaa1c59120fa1e8b0db5d4e81166a7e2d31d40fc24337ac5c17264b43", "commit_tx": "0xf9b87e4e94c1d7db0288b33de1f4f4b47038e534596c31f72e33dd58c65f2fa7"} +{"index": 1424, "batch_hash": "0xe2ba38b055ed3a06a0a5ce4a407c707f9639b2f4013dd4859f884d8fcf7e8be8", "commit_tx": "0x9b7154d3d15236de86d829a623b59874fae54cc890c4a82471fed79a0abf0ac4"} +{"index": 1425, "batch_hash": "0x1b2673aff110ed2b571f2a976da5531f8c5f749396a20d7e5afabe3c8544db29", "commit_tx": "0xa1cd2540e59d65d37b3ad16879bf432094fb13c3817c0f8b22fe9b4975f9e463"} +{"index": 1426, "batch_hash": "0x7d9dd949f6e8cb6e23f7872f3f27de9e49b2c529c5ee81f599b6737cec5e8fcd", "commit_tx": "0xd20dc8f09d5b8a2f2804a7be171d81073e1701da9a8bcb77167e71a613e96a4b"} +{"index": 1427, "batch_hash": "0x58dcd62bea5ef21801e3e21d86a608b63e069451deacbd68d5b1b2e066724ec1", "commit_tx": "0xf227621e1a92c684aeeef641473342e79692d027852bc063ff21559c6cf9480e"} +{"index": 1428, "batch_hash": "0x05c3d03c5329ffa300bf7a5bb86ac8a1c8998a8bce78cc3086b602b4fe9bc5d9", "commit_tx": "0xaa12f6a82ebb27f10663a31f4a537766855d30b5b2cee82b1830e514ce106caa"} +{"index": 1429, "batch_hash": "0x939e9b1c4c3171f084d4d8b15b8105412be6a8e4be3bde13caa3a4451a55a15a", "commit_tx": "0x3d1ca5aba3fe09d9b93aec55464577a301b722eddf2e772af443c55976797f2a"} +{"index": 1430, "batch_hash": "0x13e0ce8d5ed6fd0e347fd5378fc38526ede2aedec31ab2d79d061eeffe168e5b", "commit_tx": "0xe83c44c807e4ba5f67047fffa43b199a7c8428eba9ec99e72cb515e6a660cc37"} +{"index": 1431, "batch_hash": "0xce459f19c1d48ed41176b440711627ed34539f5deabd0a3af39d2154b5732c59", "commit_tx": "0x07311a0d4e83c871dd0c684915fb9b3cc237dc45533bc48336ce55bbf458310a"} +{"index": 1432, "batch_hash": "0xd5955d9c995f0e0dedcf943261ef30c2cdb3557625b0b51921f934265a43878c", "commit_tx": "0xe23ac42a9f201cc282c6e8396ee9012a5b0e22109344ffc47e9bb006d44ebdfc"} +{"index": 4973, "batch_hash": "0x02e364adf62c46bb5bdfd14f1e3a76b7df0c46043a4f0ab1d39cdeca62036fd6", "commit_tx": "0x25c63b54bb3951b74fdb5921d2da195c60622c3d3ca7205e2080b46fd71e81b9"} +{"index": 4974, "batch_hash": "0x2d29367a6ff1163c3274dd049c114e310018e72434ddaa64cd18f03c1bba74c6", "commit_tx": "0x2a0bcb5e24f2376776c3c57e98db2156360ecd3a8f00ad01865d89d9cec7a674"} +{"index": 4975, "batch_hash": "0x21b0c8d15ff75192e6900cb9f6dc98b8bc7cf08a1dee9ad93b05e9291fd286bf", "commit_tx": "0x8fcd7f9a9174acce16f65ad89f4f6c45f6d9f41b656d20d30d1e2b3588d781d1"} +{"index": 4976, "batch_hash": "0xe488f400ad7114ee5589c342cc766de036b9c9106edf2e73a3f0d1eeb72d00b2", "commit_tx": "0x1fff0a64e0b438ba304f1503489e4f50afaf1ce0def42ceb9441d126f8444bc9"} +{"index": 4977, "batch_hash": "0xf22760864cf4385eea5508e98a0948c3bf1f8b557cb142fe2bf25a56babd4aa9", "commit_tx": "0x665503ec23bb4fb2ae2e3a19671d070aea8ac45438cda2043e6cb0db629be7e5"} +{"index": 4978, "batch_hash": "0x460b97b5218b5b5f29e277994a795e707b2e61827a4dafe3db56125237956458", "commit_tx": "0x174b78bd8d063362028b24ad25557e5b3baeeb43454b846f9a3d2c562c6b40fd"} +{"index": 4979, "batch_hash": "0x04cf9e678572c913671a4a14573e01f232f34cf20de1d457b9d49abbec8bb8ad", "commit_tx": "0x9ecaaa2ef084c4d4b23c27395a0a8c283f43209ed90f9444a3fb425480f0cb54"} +{"index": 4980, "batch_hash": "0x6942e13077e2ab3c72e5b9d780bfbfc04baa7be8788407fbd7dbce6b32c29c16", "commit_tx": "0x514108c04761ddded00cc8c4b85d2013eaca8bb6d3946a277e2e7010c80a139c"} +{"index": 4981, "batch_hash": "0x89ffd65f9750145a72c36cf47a5925a1d86191c61cda1af31f55cd81dd61d7d4", "commit_tx": "0x51bfdc94c4a5be340bd488fe1a2483de01f4f51579a8c16df64170212f29cf37"} +{"index": 4982, "batch_hash": "0xf0536f932de0ee8972074a82c145c240da1385cadc7da447ece900ba4a73c59d", "commit_tx": "0x4c03a865d654fa8c9995c6221b368de8619ae649672bfb084ae93f272e665bc8"} +{"index": 7213, "batch_hash": "0x0402403d7778e65444552ed664efc69c9fef3516d5b76e9d6d38ca1efaf88b16", "commit_tx": "0xd64deec8ba3283a38c32f8a2e1f7fae9561c9db04eefad0b0c540ecdb801028f"} +{"index": 7214, "batch_hash": "0x46c23f856cc8099068e68010b5bb1a45c4f20548fde93a89981c6ef6c1f4fd1b", "commit_tx": "0x95a3e8d0aea81f59ad4d6b56b49036ada42a48df79672b38f7d6ca645635de39"} +{"index": 7215, "batch_hash": "0x93f32b737145d2108938d1bdf5cf28b4010e5993d0ad236cf43246cd9f168d19", "commit_tx": "0x39f00182e83573e0a98eb2bd9a0a6099428b005f12736f6b08c1549ff7fc4f4a"} +{"index": 7216, "batch_hash": "0x5a560043df82735487c38545762b1c0484d43324759e03b23b1b9717ef3f4993", "commit_tx": "0x455e46d7ce046931e9536d3e5058084c2480f2eeac3a7630e70b5a16a3803c2b"} +{"index": 7217, "batch_hash": "0x1451aff1ff25810af38c7f9682acda708bbb23b5f97a91c8897191c7d3cbca58", "commit_tx": "0xdc316ccbdfc93c11dbce73b913fe4977a66a6527210aa533631e61ac0d4b449a"} +{"index": 7218, "batch_hash": "0x5eefb3f4a384e0d9ce6ee34ecb878c97f593d130eb75cd82e620068cad064fb2", "commit_tx": "0xb9307081e84d5c9fbe375d0c0ece523979e17b9e0fb785273b56934a6bc8a812"} +{"index": 7219, "batch_hash": "0x49ae2778c4b11b17248b73b131c38d88b2d47752cc0e8670155af0e8cdb772b3", "commit_tx": "0xf0123ddbf6d7089e8b021edfab3bcbcd29051bac6e1586f8d14bb60c34494234"} +{"index": 7220, "batch_hash": "0x6f9389feeb18049664ddc411dd8bb1fa5689e4011c479e4def3a2eafa71cc489", "commit_tx": "0xfee9b23dc3925e977b481c81b0aa797f83769caaf9c98676d0fc1e20a2b331be"} +{"index": 7221, "batch_hash": "0x53e0c474a3e027604f4c00f9a749be6a255749b6277e50a62639d4c3007f1a44", "commit_tx": "0x024833a34ff2cc45064456dab954e4fa2390808a29e86cb5dd0ade14920d119a"} +{"index": 7222, "batch_hash": "0x134dd22870dc393bec2077e2982be8d36f75d2ae1bb29efb03d35ad039fdd521", "commit_tx": "0x7c763975bf3041f6e4c9904b5949e0a807181e7a35adbde7f7fb602ad31f0775"} +{"index": 8163, "batch_hash": "0x94d5670ddedba9a379160c05ddbe472749c13c48e249a778fb25f0cba5f010b8", "commit_tx": "0x71268722f9c1189a4bb98504d3b4defcf655efa0c5e24141e700148f94a91be8"} +{"index": 8164, "batch_hash": "0xe58d292935bc5ae6950730053258ef188c45d587a576ea355bef1d86fd298824", "commit_tx": "0x772ca8ce645cd2619d1bfd93690ee482a037b60ec69a1d694354a76aa4e43d64"} +{"index": 8165, "batch_hash": "0x4edfb0a1b6a688e722204118c6425e6a2db19e6f0d9d3a00c6084d0a3e096818", "commit_tx": "0xffa698106f8e9f1b7e48cd6794658ecfe74e04f721e9cb31f96ffc1bab4e3cd0"} +{"index": 8166, "batch_hash": "0xd11c772d65c98731b611e148975d188c948e4ac0410539c2d87e00d58af4dbcc", "commit_tx": "0xe260b2564a21587d004b2778c245cd1e0b3b6335db64a14c1509c299d93d6351"} +{"index": 8167, "batch_hash": "0x7610490b56463b07d08dd050ea7431b922cdf040959d37beb7fbb4628b8352f4", "commit_tx": "0xa7087582612d01c218009c4c434367ededc03a8224933e68b7870474586ab0ad"} +{"index": 8168, "batch_hash": "0x7d2826cac66aae3833ec863546ae888e77afcf2d7b3793474d7868843ab7e0a6", "commit_tx": "0x663fe23c4211734cff75eb38a6514a93aeb4ab6d46f7a3e4c5343fd4ffe4afd3"} +{"index": 8169, "batch_hash": "0x23d5929bbca52de2625bc6b858fff0a770d94dec298ef25cfa053a975266f4ed", "commit_tx": "0xe8ab944541d3181b14572fcf1d899572fb49e21a85fa14b13c8b917d02630162"} +{"index": 8170, "batch_hash": "0x4628ee676ef28fdf8d85fa279d912b2e732bcb6d69d1d37d034cb4eb08e7719a", "commit_tx": "0xe4bc74e26ead0711dd0f4a7acfc38aaac16876bac190b8be8473a5ed62035785"} +{"index": 8171, "batch_hash": "0x244ef1acfb070aa5a493362acc8b77ec5a6d7e0673a1b093e0970f2cc67d6a95", "commit_tx": "0xa5ade37e69807a4bfa0fcd2f0ca32ff09aa3399da7e28b6f75c98d5d3f5322d7"} +{"index": 8172, "batch_hash": "0xa780f2815a61e6ce468026fa14fd36fd145a1d7e1e9a18961c0b4aa4c36119bb", "commit_tx": "0xa064bfd57801a4800c1b3dd26fc7023885d832cccc7a280addba525a3f5c12e2"} +{"index": 13063, "batch_hash": "0xc122486669ba8824a33546d04c9f1fc35447b1a534e4622d41a6ff476a242bc7", "commit_tx": "0x8d137f3b86298e3acc42daf51dae8adc916cbc2c30dc5d3b5ef8f19a2720ec50"} +{"index": 13064, "batch_hash": "0x928335191d050c8cb0de72ba5b140ac7af8aded594d48c946ddf4ba5b7ffdc8c", "commit_tx": "0x00197b67daf776d95bcedd83b02ae498588badd84abbe59cea0d445fd19075b8"} +{"index": 13065, "batch_hash": "0x391009026fd1dad0b4748129390501667a171217eb981e642ef07e49adb3a5aa", "commit_tx": "0x939e27c78014f52784a32477e0d6f9cbed0f87a8523b0772a343c06309f3d940"} +{"index": 13066, "batch_hash": "0xa39f8880c4985aabd0006570c116246d9d52d8e77498fa5b1ea8352c77fa9a53", "commit_tx": "0x242e5a30eaf9dec572bfb0ab3f05d8fb1e9560135fc1154b8aab6465dcd5d861"} +{"index": 13067, "batch_hash": "0x7a3356d8156e3d5ee32c9b623f0d67b0c9e772a5734837d7404026865ee1420b", "commit_tx": "0x3f8f5804d2763f5a5359b9741af496cfa1515c3e695298e1c75ccb7d1322a362"} +{"index": 13068, "batch_hash": "0xac0f79b37f87e0fe24d7ba3b43abeb2115858d9c6b64807d2da9426902b571ee", "commit_tx": "0x40ea04e07a3ca04e085a32e513d47a79cdfb0471eb6de4e186dc2680bbb2127a"} +{"index": 13069, "batch_hash": "0x28077c13bd20b86a53302f31342e1558d0098727f82fa764d5d9d94b1a7c54a4", "commit_tx": "0x343077e3f20e903762c3e008bbc479f5d831ae2fa332d14585b5093a91ebc0f0"} +{"index": 13070, "batch_hash": "0x12d5dd0e7d6d006d710d6ed73bc46a6392c39fad6ab2018c029bd4839016b9a4", "commit_tx": "0xa766a018de6da07156f667e6036e64e921788b77290066b2fa8008941822ac99"} +{"index": 13071, "batch_hash": "0x520851adb630e327b08810b64af3928491217e83196f1d715209c92eb5032925", "commit_tx": "0x73774ff03d0560fccc3af10ee0204599ed8b8b77099ab61814ee925df53a20c2"} +{"index": 13072, "batch_hash": "0x2f31221f381ac18d523613525ea40dbccea1c66f4529c080752f9e2aa0a4fbcb", "commit_tx": "0x63cf968f3e77db3adc2647af3a6fdde47cddd211d2e2b63e3498bebdce7b025e"} +{"index": 13103, "batch_hash": "0xb2c08a8fe10f307e9a0181e86ed31fa8f82c1f7119ec582d02ed3c443847decf", "commit_tx": "0x13600e43fdf5d584dcfd14309c5a74c2825bc94f5dbfc088a7b34a4810e1add1"} +{"index": 13104, "batch_hash": "0xcade6ce76b1da03335983f6a72727b991589b6daf05bc58b0312d3dcd53aa764", "commit_tx": "0xca39f341d1918223b710f8c87706153cba52e526e6a25b97419527ecfb0dcff4"} +{"index": 13105, "batch_hash": "0x1ff58287305f34e0c6b6aa173b842860dbe4e09cea1eea0d01f04448dcff8670", "commit_tx": "0xe2d47ccc9850d47eae7d9eaa02610c30826b230055c19fd3d33e64d3cbc34241"} +{"index": 13106, "batch_hash": "0x8192f414a9e4faf631689e4616c2bc932d1e16471d2c62c04f897e4297e6bf0a", "commit_tx": "0x2dc820f0a4db444bd2c3d7ef278700ebae3c391f1c7817bff19d8d18a66f74d5"} +{"index": 13107, "batch_hash": "0xe1a54eb26b05eebe5d3cb06d5df7cbffee12ef74aa93635f50f5d32f6a563910", "commit_tx": "0xd20e1065a10d0033ce905ade1783a15f4fb41013b6b2601a022b29ebc2adcb62"} +{"index": 13108, "batch_hash": "0x698bc0460ba16d55fc7bcafa0c33b688a100c8cb9acfaed32e49d78ae31a0ba9", "commit_tx": "0xd53643bde9785466f5dfeb0d4fe5f6f1ec5427a0c5580237604fb2a1ca514682"} +{"index": 13109, "batch_hash": "0xf86ef0e6738140d25bfaf4a11973607edd023d05e43b7389e479b71b9c991728", "commit_tx": "0x77783d68e4ba822fb155e5a02f60a1abb5b77a492d6e513940c96eb5d3974bfb"} +{"index": 13110, "batch_hash": "0x40b0d0e56b3d4535a5ac997cee013b284250ebc9cba36651db3ad9b01abf3d19", "commit_tx": "0x82f486217ce7ef5574d1ae20812a43106792e84a0e8f738336eaaac8e19fc38b"} +{"index": 13111, "batch_hash": "0x29152aff62e12783b7923a4146e7938650bb21ec8e1f1f673b5e987c6f93c86b", "commit_tx": "0x2b6012f0741bb6e8ddd3c5e9e910c9ce3c2d6e80f3b33eedaee6b4ccf6746218"} +{"index": 13112, "batch_hash": "0xd27b36d1d25cb593c2a439ec07d3c2439ed0d48375e54a43ffa4e5556b2baf8e", "commit_tx": "0x46ff7688acc2543350b0c4af76404669fecb4622eb866cecc20ea52ba63b6349"} +{"index": 13123, "batch_hash": "0x18dd943c03a9c8960788798eea75d93b3614c55cb1d20c988a1858e9a4d7d2e7", "commit_tx": "0x893c985b01daafbbae701bce950e5ad7cd0d678a59f5fef8b7f6a89eaa86c595"} +{"index": 13124, "batch_hash": "0x4a6a31428a43a667b502fe8696302ecc983f73a6052f980ca6cdeaace4268332", "commit_tx": "0xfd4f52ed2cad214aea7e52569400f4960e7cf2c54dca00361978767a4d8f3c59"} +{"index": 13125, "batch_hash": "0x8326dba8e47ef3c4f36cbd80d4f5d3ca365f2c1e6804c5a17f5beddcd072f54a", "commit_tx": "0xf5426b8d5138f2a6d25e195794e38c25bd03072437daadb44d86501c2f1e7da1"} +{"index": 13126, "batch_hash": "0x1ec96e1a0df0b7754ea614a8858c24fc8890a396edbabc6bdae174257f1abc2e", "commit_tx": "0x1b2a9ec0aa6af80b7ac4fa609ce22ce5e8fd1622179ff6abfa1f5337b075898f"} +{"index": 13127, "batch_hash": "0xed532341c22ecb87ac2ce80b879b7ee346f82358c62a14913b14e3a9e2ba92e0", "commit_tx": "0xe32ce21eb89f4028e41caf1540293f004be94d607936164459cf4a1d65d4da24"} +{"index": 13128, "batch_hash": "0xf8cd84bc83a3b7f795535f9f3bc9b399d874706117a3278bc6e9a10115fafdda", "commit_tx": "0x3669f9f6d955c2d3a1b503c2d3aeee20330124961d15029def88a48b609ab413"} +{"index": 13129, "batch_hash": "0xc6b486acd8155703232caa8610d6afd4e07b79d34f6ef4b7c4964ff925a86931", "commit_tx": "0xf9fb1e15305091eb3c6c1119eccc96947367c8303c7d4a23a8eb5cb14e1364f2"} +{"index": 13130, "batch_hash": "0xa4d1d86c7a47fccfe54422f1dac918a4fa64aa32e5739de49632ce55caf849b7", "commit_tx": "0xbc6f8b495479022df1594a579666a2c0c2c069c4b309d5d201effd92865bd69e"} +{"index": 13131, "batch_hash": "0x7fccba843ffe9a6b5dc8f41f9eaaf7ae66d69ebe037d25b4d91afe91056fbcc5", "commit_tx": "0x142ae0ca0bd5c2e2f4f6df9ca7981b472c9cceb3c47fbc5c6a5e5e75ddebfd49"} +{"index": 13132, "batch_hash": "0x501ff17614d9527b22fe2441422510ba8a1b995500385c97cfb6a1aa42a1bed2", "commit_tx": "0x9a628f169d82e14bc977c75ce4da17ec94c7ca06d7739d2710006ad92669e161"} +{"index": 17673, "batch_hash": "0x286c2843e77f3b28d99acb62fba0a22891dcbb93366cca266a85736fd04037cc", "commit_tx": "0xbf1a7d8a3c977b43bde7149de0f916c40969e118e9de3e41b98f5fcd01505506"} +{"index": 17674, "batch_hash": "0x45ca37dd4faad37103e9b8efafd107b23487585b0c6045a4ca7b43aa07832757", "commit_tx": "0x0a2fe73adb955e9e1d897dab9a184e6a26dba8ad9a84ec00b574f6ff4d462215"} +{"index": 17675, "batch_hash": "0x20199aaeb0650ea1d078d095745adfe5612e2ce23dfa85fba37df81b7b4b3ae9", "commit_tx": "0xc88f8c9330cc8b88049155432b99f7529f5586f14103424ed0d8e8de6e3ac91d"} +{"index": 17676, "batch_hash": "0xa3783c199cc78ebe0e28d4f42171855fba919530c3fdef7d3d683e246832f72c", "commit_tx": "0x49c8d6ded03012b87a9112dbf958c3903c73997d5c431955aa9b47113f925d98"} +{"index": 17677, "batch_hash": "0xe5603b58d6a301db299c808650a878cc151df6a325367a541e21c585c9df5237", "commit_tx": "0xf32bb834c5301406f13c9c6c091930da8453dc185afb4d50ee04fb12a76edbc4"} +{"index": 17678, "batch_hash": "0x757535f79d7875439de4ace51ce2a0cf43f22381287d8e7b9b85d83da43d22db", "commit_tx": "0xcac08fb6ee177d9d10e143adecc1417f67562c9bb8540af5feda339bf5b14122"} +{"index": 17679, "batch_hash": "0x98342e1bbb54a9bb301ec0e7f91b80d406ba94c33b6dd0b0e08648e3c9b3cc09", "commit_tx": "0x64eddd6eb5522846ae5cf084702508a18f4697a68be18bd694b9d8088db144aa"} +{"index": 17680, "batch_hash": "0xdd303461ce9eda0335b6f4b13518ca05c3e84ed3de5dca812332498a2c7e9f4b", "commit_tx": "0xa3f800d8270021524d1996e76fdabc52a6c33eb07221fe7d2c0727c69a47cd8e"} +{"index": 17681, "batch_hash": "0xcdea0698c5b56e39dc6c1dc462bb586939bc1a213c4123264681195d586e7860", "commit_tx": "0x34d348980a3434f4dbf461d2f14c03c730dec17c14210c13904c25ab8bbe3ade"} +{"index": 17682, "batch_hash": "0xe0b89bc650c502c166d289999b4f3af8ea115ce8faeb40d29dd6cf72af55c332", "commit_tx": "0xe071dcda6966ca788e255fae8aa79afd19fdf3157b63050700b90b756301cf28"} +{"index": 20013, "batch_hash": "0x474176383ccfc5140ccd9443c91e2686b374501c5f36d025b9584d23de16b07e", "commit_tx": "0x43f89673a50c4cb913c49624c8cf273b086c33c48faf98bf0519177bd80cb55c"} +{"index": 20014, "batch_hash": "0x346a41ae1fa0081f57440092b405b0dfef6048228a949d0ca8bacde98bf1f9f7", "commit_tx": "0x0d93e017ff1f1cac2d68a8ceb7ec1fe1443f6150c617d199b3f298a01f7e6399"} +{"index": 20015, "batch_hash": "0x7b971a3140f3e94047e7ab7a40631eb14d4ff0ebec0163a63c1c275a5f26e549", "commit_tx": "0x8bbc577edc7db0259a1585900d34272fdb9325e53487bd86adf007f763fde5ae"} +{"index": 20016, "batch_hash": "0x24466782a3a06b31d10e59244429bbc9adafeb7d51d082e33c1066dcf3a5d12c", "commit_tx": "0x3fde1277392cc22211226ba10510c54af8c10703c8f7e4371a12fd630371aa91"} +{"index": 20017, "batch_hash": "0xdb0c76ed807dd9982b58b34cb88c352d9a84c445b185790429c361c030ad3a0a", "commit_tx": "0x9e82a636aa1ffe924c0eba8b83a4daed87ad8ba67efe691523f0a673d0ffd0e6"} +{"index": 20018, "batch_hash": "0xdb58c5ffd1ccedec8ed0b23a81479488112d216dd44bfc9f449179e87b6e7252", "commit_tx": "0x7312c4a79bca70f03769fec2caafe310fc21a3795ce60f033d4df54d385db643"} +{"index": 20019, "batch_hash": "0x028fb14418ccda706c38d7b995c0074fc29f1fce8d31299de61345766e5e233d", "commit_tx": "0xb00f0f9122d3c35f826c7aa985871cca593fee912dabb38330508a2b2501a488"} +{"index": 20020, "batch_hash": "0xe25ad7cb9cf6144e28784cc8c9de39cfaf980b4757e15c5455900019a8d8705c", "commit_tx": "0xb76b3335895c1252b7f6bf66c765c02e60ee7bfcff164fb15e11933a03bd4a90"} +{"index": 20021, "batch_hash": "0x1608662b82581e8bd91c2fa169c15803b2b01b3c623759276f069c5ec653043b", "commit_tx": "0xfbc9afd7b8e6dd3148d521c35b77334d1fe6252c54c50bf80bc7e14890eb1695"} +{"index": 20022, "batch_hash": "0xef7c4f9edd4a0302b0c042fb0e13c2ed00040d70b39c8e9231dbfcdf5879e9d9", "commit_tx": "0xc746c865d032b298d2c4c72cd8c9fa6b2c6a6421de0293d930eda66513196c80"} +{"index": 23203, "batch_hash": "0xf6f6fa1da4b81ea06539a2ffe4da931123fa71003ad03ceb07eb5f8bd4827511", "commit_tx": "0xd7e5ad1cb57a1b5767af12722b482eb6c417cb9569f1288e1dcbccf71ad12e87"} +{"index": 23204, "batch_hash": "0x145bcf5cde901bf4d708150f73e6bd0090a39af7b6977cf0d295538469e4b850", "commit_tx": "0x52fd30c33ef9f52b96838f70c65db5acb6b663687f3209dc970dd0dd5237d4ab"} +{"index": 23205, "batch_hash": "0xedc42ea54cb2b009fdae2e7429f5329d55fde877eace27a3f4de856e7d23fb83", "commit_tx": "0x879f877b455f0c6a1133bf5e0e8de8a4ce5b2b22edbe9f31cd573f70c8b38b2d"} +{"index": 23206, "batch_hash": "0xc81cb8ee4142e13eac53f1f0f8fd41842e7f625cfdf8449b85d6f7d60d4e51e9", "commit_tx": "0x21578f821ffe1793dab9e4ea36cc0020bc7f5c11effcb316b82fc70135ca765b"} +{"index": 23207, "batch_hash": "0xe9966cecc99e71cc92b04e7d2b2e96751fa07e947ca2d62ab46672ee164684c6", "commit_tx": "0x52655a1319a315496a092475fc06206063770cd4541ca433a7bf56b031d3984b"} +{"index": 23208, "batch_hash": "0xffc1b364d0f0bd912f06d86029b312012541c8b679a300c71bd882a9fc65993c", "commit_tx": "0x9755d5067be28bb8f881b82ad76901677d538eceffe96d649a03e3d2fb67a73f"} +{"index": 23209, "batch_hash": "0x4f8d553742d99a3bf587d989e1b90ddab45c080e985418f75fde8348cda73e2d", "commit_tx": "0x7b01ba515fe1a692e9655d3928b1fea34b322c9f3e823028f23ac481b473fd96"} +{"index": 23210, "batch_hash": "0x458e45a2413f30381a2540be69ad2d7e4adc82458efb119938423b7cfe9806c4", "commit_tx": "0xc66f9ab0f41a2b1350be203fc4367bc2c25dbcd6467a8a0526749e1e4fbd6fdc"} +{"index": 23211, "batch_hash": "0xec4ae40f6e1c2bd7e4551b8095bb58f3745c968ac0a5ec1b4e1f168e109c7fe0", "commit_tx": "0x5884d0307269931cb999db7a02b765c2003a189f9d698e549df7c1cd8c0fa26f"} +{"index": 23212, "batch_hash": "0xe1b4a72392a81f42d7d60d77f4c222efffc3a59c5e024ddcc164fa5b3e210c6f", "commit_tx": "0xa92b556a5f5e6d52ff17e39e52078d8b6b1121543bb7952a0be1c0f355375b46"} +{"index": 26453, "batch_hash": "0x8a50b400181c3e36891ca1349a80aaef214b72773bf6768bb5dec3f94efa358c", "commit_tx": "0xa3cd43aef55a55c0f4ce42ec19b4de90b9ba315a71e46c12f6a70ab2f5d222f8"} +{"index": 26454, "batch_hash": "0x39fe8b8b303f27a608eedb4d6bc112dc404902830babdd3449c6535b355d5f68", "commit_tx": "0x400f95a96378902ca2ed8f34a3050f8952a4cdab8d22756a9b87b01483dba13b"} +{"index": 26455, "batch_hash": "0xc51c6c0893b50429c3b03fd36122ce63f8cba9eb762c631b51684353c18a2690", "commit_tx": "0xe1e3b1ee944e5e02082d0169125d7743692e6afa80ea4f77fde27edd28ac5e93"} +{"index": 26456, "batch_hash": "0x8095b621debe55234637efb67dca22397445955190eff021c0ff06f17abdb5bb", "commit_tx": "0xe7c3409545a8425ffc410a879cadb6150ff6c87ef0e2106f0243014fffbe7c87"} +{"index": 26457, "batch_hash": "0xb676c27e9d20c0779491532fa46aad9e1f9cdaf073cf69010c5475aec7d7b2a9", "commit_tx": "0x2fdc2327e73f934d74e23cb7db6add348f49bdebe1d88659ba9d21c90e36a2ff"} +{"index": 26458, "batch_hash": "0x265c01ad44aa5ba90dc4d617329c99c20359f03dd6b8be7cf2ae7f1df9ee71b5", "commit_tx": "0x50844b5b6a9462e6d7c4cf10e416caddb215d7f804d55ebd3e156525671b38f9"} +{"index": 26459, "batch_hash": "0x0c7229cf7570c0426dd7792ae506ebd32915822e0c83e549ef24b42a7a9f74e9", "commit_tx": "0x37e14c12c424632d0dba1f0a2aa620f80f16b717e5401b6e1bbcecf6a38b6e06"} +{"index": 26460, "batch_hash": "0x0d5f752fb15a9a886097e6774c0b8c5bf9cb8983af3217a7cdea49c61b4d5d05", "commit_tx": "0xa333c53eecc8648ce2e199f2066c9b8e7a7925fa63a60b568f46df2082bf15d6"} +{"index": 26461, "batch_hash": "0xc07b4ca0fce7052451e3fc3a81d06b32b63fc98487a0f7f781c06a5651ff4911", "commit_tx": "0xe0066d1ed692e7c57662acfe915ea42d516180767fc3d7c7e9ac49bba98d7d1a"} +{"index": 26462, "batch_hash": "0x3d7b89cd126aef2e8daf5f72b14217d6042f619042eaec869f18fcd1fc332adb", "commit_tx": "0xa7ae71a78d55df6bdf6d642e732ee5b9579b0d04f70e7e8bf9941995879e1190"} +{"index": 27953, "batch_hash": "0x3557c7d9bb251b35f82924130cba9cc2c9ac0e7fd5709c1810098a03ee4975dc", "commit_tx": "0x67a858d4412b850797712120bde0bd6942a4daca87a79dba8595e7423e20c6dc"} +{"index": 27954, "batch_hash": "0xe00f3ffd42af2664c89bb231367ddd050705d12c53127f15245a08d5ce7954d1", "commit_tx": "0xfb7de23c84f83f378907a2ec0831a5ebfce7e4c6146a4fff7e5607445d3eb96a"} +{"index": 27955, "batch_hash": "0xcff0ed0da9833757f7345f5c84dd68e9698384b2a2de1a7be72ed8f5864d278c", "commit_tx": "0xbb77bfaa724225d70a5c6617f64442e04c29eb707955ee92615d190b7aec6ca6"} +{"index": 27956, "batch_hash": "0xc1a75d8d7c7e3cbcf00444273768e0275144ab2ac204f3b3a1417c98c024bc89", "commit_tx": "0xcb7e79b7d94509757b5bc641d64deeccf0719e445153a13fd8c069a86e18c837"} +{"index": 27957, "batch_hash": "0x2267b948b046e3128c14859d48b94506b857d7952ee3b51c8aed5eeaefaf683a", "commit_tx": "0x6472049f6fac4eae97d22feea9ccc1dcf3bbd32c62660cd92f9e59e8582bdb5c"} +{"index": 27958, "batch_hash": "0x1466dda1a9f0403ffc1d2dbce97bf756d2056011812a447172d11d5f301619a1", "commit_tx": "0x75cde631d2921809a0224743fda9088b4c0b427b151b3023405f9fa52994c616"} +{"index": 27959, "batch_hash": "0xe12cb793c6afa5e838ac78db8304379212e794bb4025695eb8b3d151dddd6347", "commit_tx": "0xce46892a8a731659a1a7758443a82ed6f3f626fb8870ef81aa94db8fe0b663e4"} +{"index": 27960, "batch_hash": "0x691a16838a9a1172cc87ed2300cc60233ea7a7ed699892d87235cc375c1e66eb", "commit_tx": "0xa9bf223b0d2ebf0d131ca7e75a7e5c45349be9ac179846c52f4cb29ab701332a"} +{"index": 27961, "batch_hash": "0x5ccf97d166c8c83df4480b3acc3d9a537f1273441d30bdcc0bbde50199581fd8", "commit_tx": "0xe31e07442be70208d22bbd17fa4aef3a1905b09293075020cff434c9a2b18ec9"} +{"index": 27962, "batch_hash": "0xe166767d1f0c816586c681b5dfde9c6f7199d247d70f9acb626b29a6eb8556a3", "commit_tx": "0x56cb1a1ee1f1f2b4b12438f578e4e3551a729fd808a8643b4ad99a3581a20688"} +{"index": 28423, "batch_hash": "0xcc02e7d32a8657731e563747c6185d67ac34dc531afba852fbb6673a55652fca", "commit_tx": "0x7858f94ae4960fefe84f20be0d874ef8926ea325ca84d2037f94fc1680012def"} +{"index": 28424, "batch_hash": "0xca33b944f46d562656ffa2c88deee1bd46889dc5f473919d3aa8a5fe110372f8", "commit_tx": "0x4586bae72a97ff3eeadcfaf63adba9fb70e9c1f9938e8743c87439d4cc7cf5c3"} +{"index": 28425, "batch_hash": "0x46c97e73d6b3f70987de42210774e05619769de5c2cb9adab76c7f0d4f544e03", "commit_tx": "0xb2182cfc5a10de119d42ef208b9827fcdb706fe6f911b281bd6e3e0437bba4cf"} +{"index": 28426, "batch_hash": "0xf5b8b7195439c73f7b4d6803c9ab5ca96b89176f369f686a4edcc21d81e16180", "commit_tx": "0xf8159496988e41efc3694d7b959653a88882e7a14b2014cdb4774f95f8afdda0"} +{"index": 28427, "batch_hash": "0x2be5ef4665866d30a36eaf98b893e7175a584fa3c7f4d25753f9e46f536f0ba4", "commit_tx": "0xd92263a8cab2a305699184bdac8c3191cb96b9f0830780810d1ba7048699ec53"} +{"index": 28428, "batch_hash": "0x264a1f5f5cb7c0fd83ff3162df2d720a7476f9ae47c7e06d35268a48a0f8523d", "commit_tx": "0x1913569b084e6a4802670b18806e1450946939c1e4f821399fc6bf5684f9b791"} +{"index": 28429, "batch_hash": "0x2515c5c6a57eb321a39af97eee00fd5fbcb419e811acabe8383c6a3d99da6621", "commit_tx": "0x6d337e960c77825cbeafa3139fa193167568350ed0ba3818ffced25fea2ef681"} +{"index": 28430, "batch_hash": "0x1f98133b4547562842c540619bde9bab82cf66820532d0f58fc6caffbb963058", "commit_tx": "0xe507e37ef7aaa602b4c887bcef398b6071a1e3a7ab90bc3e8198005b889aa68b"} +{"index": 28431, "batch_hash": "0x245f8d3f13f88d957ffb01b25c2cf113080c41fd8862b804aad8bce2619005ca", "commit_tx": "0x9f65aa577c50ec0b98137e871a112192de31447df3babbab1b5c769544ab3a61"} +{"index": 28432, "batch_hash": "0xa735602e121fa8f8b0ed2714a3daeabc4d8e32b20d0c9c0a5b7e29269ff1aef6", "commit_tx": "0x7a990340b4a93ff12910b2849fe7cf13723d8ef4a9d2ae76824f4f57ddd12959"} +{"index": 29613, "batch_hash": "0x6476b5c447017911236a9be26874978cad595ed5208272e833a3d76a68a63cc2", "commit_tx": "0x5acff3c032d7534f8b64b818e147a14cbb4fe5b08178636a0c2d6c7bb0dfe9cb"} +{"index": 29614, "batch_hash": "0xedb04ee3303774d3ba11743a9c34a6c88c500b43a5446c4ee55893cda749b395", "commit_tx": "0xc5ae96387106fea91551bc4ac6f3d446a93cdbfecacedf6a7a2ad9091bf4125e"} +{"index": 29615, "batch_hash": "0x4993762937314136c05d1072045c9c0e0ecb8fd8267f27fba2937dbb91da441e", "commit_tx": "0x9a7889b7a885e8a0cf74362f4aeb182a6dc9b2238cc9aa2223c8bd581a47864c"} +{"index": 29616, "batch_hash": "0xf4dc62517a7b7557277c9fee1c54c33c367fbbe9d4d1c714bc6a40a50841aa29", "commit_tx": "0x7fb7631a1034e27dddfbe7309ff96be3e6b99b88da2dfbde8d5463ed49f364c4"} +{"index": 29617, "batch_hash": "0xf51e11d0d2c6c6276a847a1821826b573a12e2bff44ccabf4db5ece8c0289466", "commit_tx": "0x9e1b18938e58adfc7590f267440f4511fa9c83ef4b12d3e9b584e65c8d484802"} +{"index": 29618, "batch_hash": "0xfe5610172e2c28c2f22c3457065a6632977646b616ef01035f5a0025fa5fa252", "commit_tx": "0x73123a08330fdad702bc22500f3891f0a08d388335ed92010b88962a8c40a053"} +{"index": 29619, "batch_hash": "0x91ce9976e2c5a7c5a57985f75e4f346391d8e7fd97d3abdd4b90be84ff9a9c79", "commit_tx": "0xa6e6022803139aa5687a70fd604a0c9191c6dcdd1256158631d96859d7c89957"} +{"index": 29620, "batch_hash": "0x95b30519d1e82e2435da673e8ddf9923cd7722ddddd823048be74f2f060d2639", "commit_tx": "0x108286777f23b9e7d0467dc6145f695ffd8cb99beb0511c954c904897c07c714"} +{"index": 29621, "batch_hash": "0x489e7c3b85c289b13e3fd98600428282380ff34c8d6a5a08ea0db414c1970ff1", "commit_tx": "0xac390464cbd1f140121f89694ec709fbdde9c7ab99a94527cd9b3443060de008"} +{"index": 29622, "batch_hash": "0x959c7f4a3bdb6dfff828c2c78d15d088ed1594923ba7b34df8433929c9b8c0d1", "commit_tx": "0x08b6345395dc6b26746eed8d2d0ae34e86e19456631c6e64e96db67f48d6e976"} +{"index": 34303, "batch_hash": "0x27c41cfb92e41c981c7d73aa83336ab8a77003471d35f8ca2d2605346bad61db", "commit_tx": "0x654d341cca2460df653d415438af951092cabe4ebc2fd616ed67229a051ae6cf"} +{"index": 34304, "batch_hash": "0x9b75ae51649c440e72dc9218515cbcc6753d20473bc2a7e8ee047d385c3aa315", "commit_tx": "0xb852573f2efc67d15031d4f9e803e62f72e2d5bff89f298633d9ef7d72508bf7"} +{"index": 34305, "batch_hash": "0xa8959b4668432f20531c39c4db341e1c35607cdf7c40ddd89b2fa363e79b87af", "commit_tx": "0x90c79e81f4068161dd872ded999628f21b34c74bb0be5b06a6b1bb8f802bd5fb"} +{"index": 34306, "batch_hash": "0xc0fa3b4fe3db9f372836b025590740db022afb16c18f93970741b3a7c930f8c0", "commit_tx": "0x6464a702cec9364cafd01adc773783e8812715d2c8e84825cc2a58c428b7979b"} +{"index": 34307, "batch_hash": "0x321ed4a3e5cfab657fc634c9dd5ccae7d2c921a7e34ee55f641bd49d94229d8a", "commit_tx": "0x104033b9b90912ea881aa899320c1cd4b847bfa7de08cd8bc413a1b56841e293"} +{"index": 34308, "batch_hash": "0x2e2aa436f36703f09b0f579986921aa58c6b3303104c24885663243d5a2fb3e4", "commit_tx": "0xe4129abef6a283a88bd7b13513f03b5159dd080ae51b3cdf1dd91ec9e18e4a80"} +{"index": 34309, "batch_hash": "0x9a5f64125933f770e04a9ecfba842e39954e3a783092252d0f66781f03298b6e", "commit_tx": "0xe23ddb99b87bffbeaaae7afe7cf8ef5198a161a2d76d55437d6021af9c986a4f"} +{"index": 34310, "batch_hash": "0x7e40100f725c59a16b96c9fc15abaf2f35789f6d7bdc1ae32e195d04344bf546", "commit_tx": "0x6ea24abaf92f4402b903ed9131f2f9588943905320150e4643c002f7b5e15875"} +{"index": 34311, "batch_hash": "0x8cf5ce2539548b42965ba4e11bf6b25e4f17662d316ecdf6fed2fab79ef7becc", "commit_tx": "0x568b081aa533d34509ac8eee9893c7997c6cc7dabfd472d3237372cacf694743"} +{"index": 34312, "batch_hash": "0xbb3d85266d651a93fc86efb976ec8fd6877e21a145ae03d24fe6194780cc4a3b", "commit_tx": "0xc9ecce48a7a33dd98b0d816f3bd76f0f3cf86e2d31c32ec9d5a95d4f40bb708c"} +{"index": 41053, "batch_hash": "0x355e475438f8685e4acaa8e36ca4ad4a38cc37de19433c11db9efe895f167c18", "commit_tx": "0x0aede1856ca326674ff7197cceb9bcb0f9452d31fbb541823406fc0328c9d6b5"} +{"index": 41054, "batch_hash": "0xfb04bf5350495051c6759793116758a460b4ba9db6a59caefe1dcbe2db2adc97", "commit_tx": "0x2956036708c7afb7ed0c0eee43f8d3caee23bb0dcad522afc9ba910bcb3f610e"} +{"index": 41055, "batch_hash": "0x1d359b621895b284af858b87ee4124fd9d8f2ecc3efa05eb9a8788020b6caf61", "commit_tx": "0x0dc6c293538189f4ac6fbb42e8857746c63fab016ba3b47d561ca309ff49a986"} +{"index": 41056, "batch_hash": "0xa7eb778558185fb6e7bcc0f982230b8b9806d53b2bece8d3bca2429338fe24f5", "commit_tx": "0x7c86c1472d68c79d7b434969ca1c973c98e86b032cc91a7a6e8c103a285575fe"} +{"index": 41057, "batch_hash": "0x20f05217bceb4799790e8a81c678751280413b2b2d56cfa438d373c5742bd403", "commit_tx": "0x68ad4fbe161e91545cadf5d51e1ce96cdc6baf74daeee645ccca45637b21e59a"} +{"index": 41058, "batch_hash": "0x3a02e08db7aba6317fdff6ab6ebfde7fb539c47a3eddd2bb1bdfb58e499a4cd9", "commit_tx": "0x189f921c20eadf2428219a178f118d9771572e276ecc1429411c58adc9d329e1"} +{"index": 41059, "batch_hash": "0xb966c3ecf5b53756a26e0758c4d3d5dbc42893f1e704a18e4afccff455d7349f", "commit_tx": "0x1eb40feaeadda82f8c4fefe3bab7c6fa071ee7f5f9c99574dbdd9b73917988eb"} +{"index": 41060, "batch_hash": "0xb242ad562db8be5c121ca260229d70acb93118431e5d908d0d1703b7f911f01c", "commit_tx": "0x999ba869cfc19dbeecdc39344a7b89bf34be60cf6c89947bc500449cf87357a0"} +{"index": 41061, "batch_hash": "0x7c72bf8358b45b413c0a869e1c0434501c4f65ecce26faa7f7f9ac7d7e2a4e75", "commit_tx": "0xc97fc48ee9bfcc4f68d3078c9f49ddba1df5d7b51c329c7e146c83b4b929046b"} +{"index": 41062, "batch_hash": "0xb2c1485754e2c822c53fba260a446796d44d5fb87f25fffecf35a00f97d1ce44", "commit_tx": "0x7b7edcfcc29faf2ebb91f9b8ea01ebf92cd2caa231d87ab1e7ab263379830315"} +{"index": 42473, "batch_hash": "0x71f4e43eecb60f1fb1c6ef49b9152e4ad527de9d670c62ba248264b5b24f1d87", "commit_tx": "0x1e716275d8ffe118e1e878cea6f449998d7329209265441a7414ebd26ab258e4"} +{"index": 42474, "batch_hash": "0x11161af35a69677d040bbeaf4008fc5d84ca291c81e978dd212bcccd362b98fb", "commit_tx": "0xddc76ce374268cfb69318a7b678fcce2395e83ae731d7146013e74cc40d3636c"} +{"index": 42475, "batch_hash": "0x907e432a9e3966098b0fe9fa12f1579afdf56e015cba7d3daeaa9801fa7d995c", "commit_tx": "0x0815e9f37afac496a40af0a889dfcfc29734ac12c42cfa4cac647671a91bfd40"} +{"index": 42476, "batch_hash": "0x9f6ff9c852a3dc4241e66298e049c37fd316c7000315e890c00e95e9d93ef2e5", "commit_tx": "0xd2da80d619778655fba3f9431f9f17d4a59bed8193b77dd8f6f05bd6f644a142"} +{"index": 42477, "batch_hash": "0x5f6956f8321c2f1673fbc8f99d42aa7dc26fcc47b6c3e16ac603be45eecd0068", "commit_tx": "0x1b3df4f5d10a8fda58d9c74ce141cc437bf66a5f8ed9d92dca53b54de1944e25"} +{"index": 42478, "batch_hash": "0x660fe155ca33b85b007eec84863613198ac111ecc29400eee9c4c7294c256b13", "commit_tx": "0x5fbc09ba1739a848356710f64af87b8263a691078c3f10ef21d56f90325293f2"} +{"index": 42479, "batch_hash": "0x3bcf676658f4f4dfe94113cb27553241168f69419427f2124ed06342cf4a5963", "commit_tx": "0xd623c016ec2feff63435b0b75798282c5281744d77d9a3028ac4500a02578097"} +{"index": 42480, "batch_hash": "0xe2bf99ae1603b1744b9c328305b187af5d9d5964be2f034542023378f6b7da6f", "commit_tx": "0x2d3fba8b1f474a0ecefb0aa87f350c0ae6da233cb77186df29ce6351fb68b971"} +{"index": 42481, "batch_hash": "0x884f64c528facd9bf4e21193e24367e9cb88a5049db800f738662c5912196562", "commit_tx": "0x8035fb24d975fe1f02279e1712ecdb68a3e573411c59c7fe8ce9f47051696aa9"} +{"index": 42482, "batch_hash": "0x06a002c491692677b43d4bc1dd116aba992e0334267d8290884e29b5a9618184", "commit_tx": "0x7e439f0bbb8145b8dba403f2580bef1864e913fc0582dd03351208afb5cf8d93"} +{"index": 46993, "batch_hash": "0x98d915f2553ca32cda83c7957c98d0d607a3eed44bf7d740d65d6b98d1ce393d", "commit_tx": "0x8d7c7c3be4edbe8aacf4cf5e010d8cb5e68bd66cd0751f917c89ee0631a1b25c"} +{"index": 46994, "batch_hash": "0xbcd1ae02c7d275f86c0dbd37d6510aa49508b7da3843f787b218d07daef275d0", "commit_tx": "0xe51bca7caf4dd0a6433088bc03c84ffa09d8512b1e76adbd853e257394142662"} +{"index": 46995, "batch_hash": "0x90ef5944847f924bbb31f49d3aa62f4c0082b3efa5708a13c3655a2681fa10e0", "commit_tx": "0x8dc1d5f628f634566802a5423e54f05575d5aa339100a205277daf44012e94b8"} +{"index": 46996, "batch_hash": "0xd966b3fa5eb6c82f00a39d508f5fbffeca666358e7866aa6b8339b5db8d8e173", "commit_tx": "0xb9566352d19c69f807677be6c6e72da64b5d6b4cd5b5271278562794f176cb11"} +{"index": 46997, "batch_hash": "0xdf54d8778e755ac12326bc6fce6f80adf3140e7f0a574c6f299f0e1301ab249d", "commit_tx": "0xe80a63de8cacd41a1524a3ff4bf3dc591785fe4794d45bc78ecc6c5c730b0a9d"} +{"index": 46998, "batch_hash": "0x023ac50deb4873483d305fe2876c3f88c55e78a3d597de924474117de4d494a0", "commit_tx": "0xdb1cadda5bc651ac53ba50cb496999d1dab246f766fe230d0b84b152b35ea6a2"} +{"index": 46999, "batch_hash": "0xba404f0b389f88581765d85d14e2cf8a259191f5ba0e2e062dd61c401b9bee53", "commit_tx": "0x7d1ae6dc373da61e76239cc79845952434b3392713dc46d7b33752ae1767cada"} +{"index": 47000, "batch_hash": "0xe1816a29e1d4e83b4390fd6a536cdef0c6198788a25bfb962bf51954280acfe3", "commit_tx": "0xe0b5f52395b58f28f84e86944e34b2d57591acc8b7976af92a8b23c2c8eef49a"} +{"index": 47001, "batch_hash": "0xadd287470885fd82155c07cc5aefd0055942a0ea5ac51f0cdc3d5d18ccdfcbec", "commit_tx": "0x77cbfda940246d37462fdfbb1f90871da3d5561f1ac7a182ae11620af130e13f"} +{"index": 47002, "batch_hash": "0x2134f4e219baf184e58972f83abb9b5a1eeb43ab12a9ce93b8ed66913691f15e", "commit_tx": "0x7346a9d418c6449b76b29a62d53721d1ecf097955ce3e76b7894536c49516806"} +{"index": 48173, "batch_hash": "0xc93071ed5cc4be2997b5fc5359298de57d1891f541cce3e3e22f2804445b5224", "commit_tx": "0xb8fe1e48514af32b6f6566f806674e41cba2b619d9d9ecd01abd5944308ca510"} +{"index": 48174, "batch_hash": "0x3e023e32aafb1068ce4256077033d931e714a2460ad72c8fb29083e98f32de18", "commit_tx": "0x0bc7ba5437fb339b2ca15eccacf71a13498ac076c9ad4f6d165bbfb641673140"} +{"index": 48175, "batch_hash": "0x73002eb34ff2b164a83e63047fd9fb4095ec6d5f3fccbb2f3c40998d5b10ee20", "commit_tx": "0x48dbd892fd7ffaad57b0115b87efe657b0e603188e006edc96112df55a544c48"} +{"index": 48176, "batch_hash": "0xb31980b8784eba79cae3566c08cb826cc00c5e14a4cea8eb185fa2b2c77d2cde", "commit_tx": "0xcc693d662816a99775876c2d95b48d135f5a6f169eddff36f1281efdb7fb859e"} +{"index": 48177, "batch_hash": "0xb2c4322d1f5d157c9f10f86d948d349933bede66ec1ec05b4be42d29755efdcf", "commit_tx": "0xfa8dfbfad131e3915463febf42ad76985c925fad1d32e8d46fd1b6e5bfca8431"} +{"index": 48178, "batch_hash": "0x588d6d9cc14bb4c274d46dfd637fb6c3212f1b270bbaa1693ca7c4ce41b3052e", "commit_tx": "0xf683c3d505711d25ecd382f0c8859c4817d7217dd95f6b73ed39c584abd0760e"} +{"index": 48179, "batch_hash": "0x72df79a6b8caa82687d98f0ec4dac09b2862d084167bac5a235226eacee45d48", "commit_tx": "0xdcd4c62ca38f2327fbdd249afff5fa24d830c39bb3d8e8aa66a520b42fc2baa9"} +{"index": 48180, "batch_hash": "0xc19a57c9c9c55c7f1210327da8c2a0229b4bef1da906a64b751e6323e9c1d362", "commit_tx": "0x760ca4c85752d8e3a8cda817512b87ab806b52963d1c011609da3cce609e960c"} +{"index": 48181, "batch_hash": "0xdf8b3fe3a3f17e28acdfca1b639b3d941961fd906bf0381d35554d77fb11df08", "commit_tx": "0x9c6f08c12866113f232dda26921f8f74f3083a58772e09eecd789dc623041017"} +{"index": 48182, "batch_hash": "0xc7663bc156b53cbb663873ca7bde0a69f6a81d47fa2bb5104cc039f644a4c2c1", "commit_tx": "0xc091ed6fffc575603fbe386127ca202793a83af4be0a459d2142ecfc101c56fb"} +{"index": 49003, "batch_hash": "0xef973f193a375003c3788383ef58e99f91cc72bf2f81c9bda283704cb323b22c", "commit_tx": "0x6a8dd9252244b8114b40f13aeaceedcd0aa730fe74a06837dbd981cb37174978"} +{"index": 49004, "batch_hash": "0x9a184bf46134dc4c06d9602d2b88c4decb2cbae1cd76974b1fe87e744ef4804b", "commit_tx": "0x930c35af5e46f5a77b8c011d2868c7375b36aaec544cf452f06fbe47aec1f96a"} +{"index": 49005, "batch_hash": "0x735b3c5ba98acc84fe206f555b944f6c76c63ac661a2014b509aa3c14b24315b", "commit_tx": "0xb81715f148147d7378331268b318e11c68d417ece3b405748ab2ad030a7d5481"} +{"index": 49006, "batch_hash": "0x48dadf4907631c7e01e961841c306321fbd91eb687be88ca3eae4b2ca89a24f9", "commit_tx": "0x273d81c64cc84d688494609f0105e85b2b790db5b0c8b9988328f03790c01d32"} +{"index": 49007, "batch_hash": "0x49c84400e06c5eff02d7326c88142d752c088fb8bb4f79cdd18845b34f7b96f2", "commit_tx": "0xc848d754de7787f091b530b2cf0a84e4d2bc5da2c834b21f538ceae171287895"} +{"index": 49008, "batch_hash": "0xe2ef5c473eaf9d8946020f4f5e518957a8ce0d6979fe99afb7e46be6d588ba55", "commit_tx": "0x878fd4cb558c959891e59a9acbd97df9866b0e22704a22c32c3f600f2ee6b3df"} +{"index": 49009, "batch_hash": "0x0e43de61bb263361131387a25157b256d8105d1db18e0e07271f6a97652f9240", "commit_tx": "0xb65b7edf35802d57366401f7931fe65b812a07637dc0c40fab50cd9e02cf4add"} +{"index": 49010, "batch_hash": "0x2e6b5dc7a79fd667777aba32fea232da62c3d856f36bdee526fde47f54f53f10", "commit_tx": "0x4dc51bb8cc084688d3c6bdb5774812b3c4eb5ef6fe6af68b27931befbbe9c663"} +{"index": 49011, "batch_hash": "0x9e40417b2cab51e96f951a1417626c84d00cd22d054bc35b3c711e5b720841c1", "commit_tx": "0x3fd08253996c00fbd4b6c7dda468ed9ba4f82a6517084190e608272c981f09da"} +{"index": 49012, "batch_hash": "0xdcbb80ecbba36c9e908e805a6a42be19a7bbefa12faad2c54d26dd49473b1914", "commit_tx": "0x98eb0bbc06d8c692a0daec01fd7e8119e182d803be82015e1dd78729e403267c"} +{"index": 52123, "batch_hash": "0x629ea351a8a8e928112f134997914d5487cc2f7e19bdb9d5a0d92bacef9f8a34", "commit_tx": "0x4742b8a3cbe3dd683e35638be95e3019c6492ed87fc8dfcb86709fbc70d3b1d1"} +{"index": 52124, "batch_hash": "0x3dd8c7ffbd55bdcdfe2bacde951bc85d7d572360f2e7ff86187ea6c3f5d4100c", "commit_tx": "0xe5cdeecaee54da4ef26f4b36f7269700ec5530778c87b8f147160f06344b5cdd"} +{"index": 52125, "batch_hash": "0xe65684f4112a8b82ebb5d3574b3b8033e1f56f3e0e67009c9308532c45d81d0b", "commit_tx": "0xfca334e3320db2c1a7b4b023140e105901839189867c6bba1ae2c2e80e95d346"} +{"index": 52126, "batch_hash": "0x4ec2bea98badb513cd1b066d74a04dd39f689222befe543d2876f6597a168c3c", "commit_tx": "0x43b5b5304c3cfeb5430714bf9e4c1714a6cd8dcedcf79bf2a9b941471e609153"} +{"index": 52127, "batch_hash": "0xe0af84b2f57d2de9936f57650e0f2d513c92e8584b8c6694f3e3beac4ab7d59d", "commit_tx": "0xafa6d9d9055e4128adcb833fe467c10be5886d7c3572e3a41def747a88d253e7"} +{"index": 52128, "batch_hash": "0x8330e962c0c4bb074c30cc64ac53d4621b5136a5d24e913bc221e0853e997ca8", "commit_tx": "0x2c87dc43c5149afcac27f46fb5ae9024e89756cae37587f5c62969da4df6c9ad"} +{"index": 52129, "batch_hash": "0xc23fa2752edb5ef46072e735b6b90a2e1e7542d90b95cc5521428ca2427522bc", "commit_tx": "0xcf50a5f47a62c9062734a9a488b349343cc23a138c0cb1cd96845fe68e6a90fb"} +{"index": 52130, "batch_hash": "0xe56e25c42e8d6553bbe5d085a4058937961234b7a7517cf3c585897ffc1b4983", "commit_tx": "0x13ed1850dc886eafdadf791eaad4cb30193b8ff450010958d16131d4d2abe694"} +{"index": 52131, "batch_hash": "0x0b4ec9d1a44bb3ff58918e92a754966430026aa71fc4f42578a91e670e00d714", "commit_tx": "0xc1483eaf5417f2d9d4279e61e7640a2a10c2af7c2ad5f88d022a620566294ab7"} +{"index": 52132, "batch_hash": "0x86c4f3f9e4ce99e92934b498ec4dc5f000649809475add248f43c32addf1e02b", "commit_tx": "0xc444a4afb30a94b28a98f2adb5e0ebacb3c7d92ab29c08161d5f0f29ec6e5fe9"} +{"index": 54283, "batch_hash": "0x7142443e4bfeebe44766c1c292f049011e5edc0c62f6e156ea5bf92d87025ead", "commit_tx": "0xc809a88cbff53947afb0e136913af8906c297a5ee5391f85c23591f104685b8e"} +{"index": 54284, "batch_hash": "0xcc93bced2866704aa16bee7df70f2d8641073617a0a3a7ec888218c0176b02e5", "commit_tx": "0x690a54fc03912eea7e5cba901c70ba1a0bfefe030eef8e67cf8c51b309a60c45"} +{"index": 54285, "batch_hash": "0x29a68c12045ba6f02359513d5a7a39cc3f1a0221d0abbd68303c18b6b409756f", "commit_tx": "0x28077f05ca6d60c1d5613a2fc6b590fca59b07cb60b43e3aaaf5732a43a23e8a"} +{"index": 54286, "batch_hash": "0xee01de6618b7915ddfc3fb733e9a43ae0ecb1dfe43b36ec2515a26938841b997", "commit_tx": "0x0fdcdf31704788592653d9a36eb4b859146d6022b5d9c1ef97b19558a9114339"} +{"index": 54287, "batch_hash": "0xe2ef2fbc1a487698203fd5cc35e7db9f87695a2e96a5e7f1510f549affab9a95", "commit_tx": "0x5deda6c92876210b22feaaee8ae133f7bf50f4690eabf899148d9f8914fde25c"} +{"index": 54288, "batch_hash": "0xc1c6985cd02797217be6d3e8ce4e5f448cb4fa352184a8ef22ec379ef484d1b6", "commit_tx": "0x0744e30f8604ff0cbdf008855c3ec442292cb5174e375e549f1b91fb382350a7"} +{"index": 54289, "batch_hash": "0x2a89fc389a1c326e80b6ed77849c338c90376bff83e19eb64b7d72580bd1bca8", "commit_tx": "0x634571e5e3cee736f2c9d84163d185e63126fd6eb629f02344ef0fb387ebf667"} +{"index": 54290, "batch_hash": "0x376dd60abb3d75af5ce405d2ccd57f8fcff810f80f329f8f08578386381bf296", "commit_tx": "0x82ed9e947738357d277f97036792308618afd0c5ec8f95b36f94f29570564a6b"} +{"index": 54291, "batch_hash": "0xddca464d58cab421a4171e9608466acdbc3fb44bcdccc8c19fb191d53f9c3bcf", "commit_tx": "0xe3f999a67c182e32f9bd1f3e47ec705574bf4e39d7ae4737d5845d0829af7b63"} +{"index": 54292, "batch_hash": "0xa79ef83f32633cc54d4b333d55526bb0cce1af6116938ee39df33e508be94e9a", "commit_tx": "0x9c431abef9c0182b71b98ff8554d3337d9bc57a78f916d991aad9b0e8a5dc9d5"} +{"index": 57213, "batch_hash": "0x67beb9b6812289e4a398f17a05eed6e51402f4ccbcd5a3b1cf996c6db9515a10", "commit_tx": "0x3fd60db72acf16cbe8fbb53e9afc0de6ddbb72be336d7c613a05f55a7c4f0fac"} +{"index": 57214, "batch_hash": "0xaff66f68b7e753e32aab4cad1d738e5f99ec19da3ec938141f190128b81b542f", "commit_tx": "0xbf4b05497443660a4828547375077389f062017a14faadaaa2adeecdabafa530"} +{"index": 57215, "batch_hash": "0x9fb4aa35571f2bc02bffe6b8793aa917c23fc51dc028e5e389677000d7d38dba", "commit_tx": "0x818427947a655a9aa3f2423b4f82fdeec97d39aaa365a649ae4899958ea5c573"} +{"index": 57216, "batch_hash": "0x09812a44efe3203546af93728ee38bea0f83b685699b946f5858796daa058786", "commit_tx": "0xb661ec00b37b78164f7df3b67468b41699c367150d510a9bb40add7045f9aea6"} +{"index": 57217, "batch_hash": "0x63c2b1337d9ef2313fd4ebfbf662f308f3a32242fe4ffe118e3f40c23be0cbff", "commit_tx": "0xf02bdd8b8339d9bf85d2e02c2c3a8feda7aab9aa98fa22810f9a88dcee17b46c"} +{"index": 57218, "batch_hash": "0x5a88299aa88d73130b6ddfb994a271990b7c1d9b5c8ebe80ab542f4ce53f1012", "commit_tx": "0x096f74c91dfdbe6e891db484013fbc054072fac079ebbb8888f2ac721a437c90"} +{"index": 57219, "batch_hash": "0xfd5f6bccd9507542454b4f3b32adc14d70edd9b2158637aaabe16439e8f3f8e6", "commit_tx": "0xc0186bebba22a97c093e9201e12a668336decf932bb110800267fb79c577df6f"} +{"index": 57220, "batch_hash": "0x3c1883c156d2e1b0b913ce62206bcf8a4dd377b7f3853feb69f0bcea4e37e345", "commit_tx": "0x787dae327f1d7d95d91fb76842eb4d8a0a100272f4e4287315cd6dbad824d783"} +{"index": 57221, "batch_hash": "0x03b2259cc100087de5d029df4305c0129b17f4a16fef535b6e4d7af53360bb59", "commit_tx": "0x16767c26a5c3daaea262dc9b81051abf90a0ad6fe952a9fb4a7500fc07816fed"} +{"index": 57222, "batch_hash": "0x09754b608738e9f375f960a9fddd366c879bcbaf230346ec3e5c00b78cd88098", "commit_tx": "0x5b41d71380251c6e8792a7475b26c26c66b0854038db0872690c8dbe8a4462c9"} +{"index": 58283, "batch_hash": "0x41e9283c3153422d6a56716d364dc17f3a052d3e742434a59871b43df18ea485", "commit_tx": "0x4c68fc4e838feafb35871cb809cd3ea4e1254aeb4271410d47a51047e953557f"} +{"index": 58284, "batch_hash": "0x0220a3a5c2b7df95e95e3e2fb3b6e9eb79d20b60807908c30772296304c270b7", "commit_tx": "0x636b8c16150815052b0e0e38675a7b96b691482486a60ce3445aafe42751a30c"} +{"index": 58285, "batch_hash": "0x99850c14ca5e0e5b63a5967cfa08da4ece712d10936da1b3235c5a2908f967f0", "commit_tx": "0x109e1d3348b932f304579db97f51ca2cd1e7b7505ce7e7cf3400e5d24b8fd006"} +{"index": 58286, "batch_hash": "0x87ec77267f2139293aca5a88986bf88a7bb9f4668e29b266ed01727f2f351685", "commit_tx": "0xc1b9acbe1083d66895e2a6ee82b30adc5a526309e8ac72fde96a83f79efa83a3"} +{"index": 58287, "batch_hash": "0xe11fb693777bd3b6ddf95375161c3c84439ac232c1dee26cf53302ee63e44786", "commit_tx": "0x243e363042e2ba6b2d960b2a0396f7138d88202901171f006bbb6422f63974b6"} +{"index": 58288, "batch_hash": "0x76ab1fabb4384c2eca03ba5b94be72430d0f04b8a2cfac2c6f29ef682dce1b39", "commit_tx": "0x3d32e5b50b27274ecc13b603de3040c3970be4a2ee45c924f56713d9fe8cc9c1"} +{"index": 58289, "batch_hash": "0x015d56f49144f0e800b5279e24f79b8c06eb526a378f8bc2903ffa01298ee1ac", "commit_tx": "0x8305b1c3c9f26e614d5f80415dc84ac398b6185b0087a8ba0428cdcfcecdd844"} +{"index": 58290, "batch_hash": "0x0103f92b5cfc1d8e91907ed9ce9aecbcc5151bd6584d3c24d62fe10f5ecaf791", "commit_tx": "0x91a69cf76d1accd81e8c400f20ed741105d09fb90f975e1e5b29b0e55cfb9bfc"} +{"index": 58291, "batch_hash": "0x71bdc8bfb34bdf660846b6f3a90f5f560d8176a718b980a5482b1f00c243e3ef", "commit_tx": "0x3eb1fed58793257c56c0a27e9daff293ab6023cb9db82302dff048051ece2693"} +{"index": 58292, "batch_hash": "0xdbfc916f86d86b0b4f94866c4a09788bbfe034cda7631489711f665fe74815d6", "commit_tx": "0x5548ee8cc58f16f62f03a99d76845be66edfeaf51c18d4fbd5f805b9b5e08278"} +{"index": 62473, "batch_hash": "0xa6695885704cf1ce2225a96ee0ca938d8f3e5d49c1adf175a4b5c76f1a597169", "commit_tx": "0xe62a04ea73276dd3eda1994d62901bc9385c72eddb9e005e0d8d178ed8f75831"} +{"index": 62474, "batch_hash": "0xe704236ed53a4c4762e3040d6481e07dac6f3d4e29c9bb5a41dc8533598a8b5a", "commit_tx": "0x52ceede8e8911296d31a130853f5eb7ebb181eb692a75d4cde7157790d5cf52c"} +{"index": 62475, "batch_hash": "0x60d2db9088b2eaec18a710faa356c41f1be7487f51d15c57cfb6c938730a9599", "commit_tx": "0x90096c37f7727cc241724e66f524e81016c19240ddc1b741fe761fbeb9110b58"} +{"index": 62476, "batch_hash": "0xe9588443303e0297e12f4531f08b5bb18a826b88c66ede6ff4c4dde81b52d4a9", "commit_tx": "0x55fce5bf91ec737fe9db250a4027c89e3fbffacdd3a115b5816b1062756c6d04"} +{"index": 62477, "batch_hash": "0x162566d01514d9456153383d024041a34e67c438f8de03b494a9c31c3c4b3315", "commit_tx": "0x15c7f54705dca4f4952e6009cf071c29e73567750454d590900dbe1706e8e3db"} +{"index": 62478, "batch_hash": "0x962256ffc99a53e8683eb8e4c15783877dce162c74fc8774b8d7196cf4f14b95", "commit_tx": "0xbd1b21b7d96c5109b931ba61a64e1800962a92689db1b9305f07c757b17445d2"} +{"index": 62479, "batch_hash": "0x3282cdc8fcdb412248470d3bc855f144d30d0e81df7177ad9cede81e4fabe372", "commit_tx": "0x410befdf82cdd93a04d077791a149d4b332fac51fd5a641e0c059ff5d34f8735"} +{"index": 62480, "batch_hash": "0x93610055d15323588771c29edda359089c7821456638985409d7cafff3e72fc9", "commit_tx": "0xa253fdf5384ed263e5a4d655b43ce67de04dd407c76f9441c15390306c97b813"} +{"index": 62481, "batch_hash": "0x85b45e085cb4b5cb6d41f4568919168404b0fbb0aa78b37789912a8a980d3432", "commit_tx": "0x4f2cf0395f9e208ff22f7748d9273a8c19d20546238febbdf8f1327baeefa28f"} +{"index": 62482, "batch_hash": "0x1b5b826d5aeb9960790a2dfa4901ce26e620d4f602146de3a4fd7d8d4ca6a12e", "commit_tx": "0x3719f89abeb6b5cb51d42b22f2e9ec9485f839e75bfc6c68f38a7046eb03cba2"} +{"index": 64703, "batch_hash": "0xc7286b250a6684687cabd47d183531d6f88411512d115ecb17e090104ba444ad", "commit_tx": "0xf38b6bcf2712947593e555b11ea5947732aeb3494683b24e40afba4038c96a9a"} +{"index": 64704, "batch_hash": "0xbaebb4a77a1d7539a2a40f06dd93d419fb9fc20aca30af170b5fb32a6870342f", "commit_tx": "0x19043b81c6da6c8ae7cae691e72fa99321bc3394e77962d33fb15ffa06558fb5"} +{"index": 64705, "batch_hash": "0x504849a219079bde4d3d9219fed7a23f05405b1032086149c054efd24eacf5dc", "commit_tx": "0xf66605cbae5ff4dc0d195c2903dff62509203cf1efb15f48e6638f315b04ae66"} +{"index": 64706, "batch_hash": "0xbaf9d4a36e4779377b94272b82d67564cb4537fd2e54a0e3852b26a0d48875f6", "commit_tx": "0xcaf4a14393fe49cea4bc921e452ddc6d044068ef099be9a40b47d39d8abe7360"} +{"index": 64707, "batch_hash": "0xbde4a810c46186cd793fa7fe3e8814b23b8affaea71b8fd21c0c44a700ffe649", "commit_tx": "0x7a9cd8702f3a45f123daf43a48440c175802ace4c5cd4d29fe610054d6c88f26"} +{"index": 64708, "batch_hash": "0x6b92777aad8523ec8dd5b87043ee1d475d8ff5942d04976d65429a792001aa5a", "commit_tx": "0xe470dc08d4062d8f565dfb313c904a1e4b4989d6458a2fab8cb05723c394c887"} +{"index": 64709, "batch_hash": "0xf953efc21d4da1f41a795dcd5c0577a7af54338876a71690445eb1b044980215", "commit_tx": "0xa5f82a19d54ad5eb69a0ebcec7eda53d7448c6c710298901d394a87a74953505"} +{"index": 64710, "batch_hash": "0xa0c48f931c3b95c49642e83b7bb076494ae286180cb1822888bc14de882e781e", "commit_tx": "0x35b39e62ca43e9174da7e42dec3c3c698f0ae957c6693665443dc0d3ce72a231"} +{"index": 64711, "batch_hash": "0x96bc36044f4fd41f62ee144b9ffa19b39870ed7741a90574658dd90afcc50636", "commit_tx": "0x3239ab52fa197f44a1b924c1c7a12714dcaf216aac98d9905c53c1649ddb4ad8"} +{"index": 64712, "batch_hash": "0x0e3975ad1725cf413bd7abe73e7d8269ddb8676df91812ca57522c619d16600f", "commit_tx": "0x43cec28e5b9785788df3fb8b957cded75dd8493ed6df669c3c97a259b911c5ea"} +{"index": 68993, "batch_hash": "0xd0b6aed754a2dc0b9615dc97b698e7ae646c21834a408d792db480a575593601", "commit_tx": "0x78d702267972030c3bf3700b7552018f632b627c1400ce455533e4b215bc4b89"} +{"index": 68994, "batch_hash": "0x6a6fe1f9e3f5a6e74c2a0fdce37fc09649ed515ce0cf5bc98d1c3233a9cf8413", "commit_tx": "0x06da05856099222fa3c681b0f354f90419a45985f7f0013a83d7e4d6dccb2418"} +{"index": 68995, "batch_hash": "0xfad10f17db34285ae17a0991faf304e95506e520a06f1b450da0fef02e389378", "commit_tx": "0x2f030261f3cf99928cd0ad337c63b4f0b6e9d6ed74c7d05a3fef6dc316038977"} +{"index": 68996, "batch_hash": "0x1efce44bc37251d7a56f923d25100063c2c3199669b4743763e610fc3ac51eb3", "commit_tx": "0x850ec46db2da526a1b5ff33b4deff6797aa2c855a749c62b3ee79f0f121390c3"} +{"index": 68997, "batch_hash": "0x3a4de1317dbab22d03d7e81fea555ad8ab70cd36fcc45ae7fd72cc22cb89e4de", "commit_tx": "0x8d0a5d24c278ea1627683d4358842fdbe47ed62a0bfa70847e5bd83134d6f22d"} +{"index": 68998, "batch_hash": "0xf631379d79fef7623be41a47feb5ddc62960beda283233f5850bee3952226412", "commit_tx": "0xa5863a6b676afb884d3b70152186d95f0820e1f808e8e5391820792cb9030956"} +{"index": 68999, "batch_hash": "0x407b6be0f799e422a26c14471638faf8b381b4ced6aed466398a359da4b6db5a", "commit_tx": "0x318a22d64795e90c746842589175e16a367d6cff2c2840ed8329ef7f366ecc09"} +{"index": 69000, "batch_hash": "0x30c4dc9c157faa12f8e0a7adf2ab9001439df3c3d058cda242fdd8f4e19bb931", "commit_tx": "0xaff62ef2ae1388484abcdc283dc85d1f3d272e395eb7a044a868e383bbab4ddb"} +{"index": 69001, "batch_hash": "0xe0283d1f31ed36f82a2d4db25fa9c288df54e5d12b6509861063a19ff304c5a4", "commit_tx": "0x824ce1c294c8d3590f23326c982ee107b573cecb01b61eae8884f1a15fb3b8f3"} +{"index": 69002, "batch_hash": "0xa72f9f60d14543bf72a314a58a1060339ca7d5ab36b163ad0d9330d96bd286a1", "commit_tx": "0x71ad3f91186358811f24bc6279171e4d0ab85432ab35689e5b55fc9b5b25e8ab"} +{"index": 70123, "batch_hash": "0x6285b78d5aea488e4be7199df01a108ed1f132751cef0bfd5a9711dafb92fffa", "commit_tx": "0xf9b927d82b2b8095f9478f2f0150e3e3284dff48bc9d6c7cd58cdb0a5b52be0a"} +{"index": 70124, "batch_hash": "0xf305586037a1b2f92fe862c155965166b406780e9b21c5b4e41aae888310b7c0", "commit_tx": "0xfc4c0d142832f0eb5476a6c242dc9366f6ec3a74fa0ebea7cc732d54174c346e"} +{"index": 70125, "batch_hash": "0x849721d6ab044323bf0f3cf5958a3ebd736bf26823ad8ff4a0382457931dbd9c", "commit_tx": "0x0b45bd941c61454ba70d51e70960a1c1c7b573ca682ed1f5b3a5564930090c4e"} +{"index": 70126, "batch_hash": "0xfbcbe5842907a9c734e952d24c87123f6a72bb3b00f3a4ac3677a32d337f366c", "commit_tx": "0xd8bc170d9edfe2d16e3cf8691b0562faedd306f6606cc0de0190b1b4dfbb2efc"} +{"index": 70127, "batch_hash": "0xe4e59033bf6482ec5ec2327e007fa95d13bae97dd2ef96c5e98dc1f83ede872d", "commit_tx": "0xaa17a0fa97c0b06d1e5479f3d5d1a5f26b527a72085d5790d6beb94e4dd983e6"} +{"index": 70128, "batch_hash": "0xfbbf7667b7521bd8549321b6eaf8a6bda8e07adf69a059a99443afd788fdf699", "commit_tx": "0x33a299b45b7af050f4392d80fb21215bd00bffe0b67b0d1329504d01eb515a19"} +{"index": 70129, "batch_hash": "0xa0337541ad1c28a43ad714c80e5827a565aa9745ec712df532cd33a4e068b30c", "commit_tx": "0x3ca3610caa7ed819d5610d9a11ebe0a8d3f0dd60d69220f0d7ba9c0c6adb030e"} +{"index": 70130, "batch_hash": "0xbeb9247ac63298e23ee72de8636cbceed720120e7d16fa111a11ffe2a8e26c33", "commit_tx": "0xab6d5a259585aab41f144e75937beab6c529945cc7581f40d4f611a653adfc9f"} +{"index": 70131, "batch_hash": "0x14eb93b6c28bacde2da2548039706a03bb3df8e4891f3f03ad3977926b429e0a", "commit_tx": "0xafeb8ab64a687430d27243608c762c213015ccfe7b5b211fa0ef7bbef528ebfc"} +{"index": 70132, "batch_hash": "0xdc94a8ca7f1a01aafb5257b156c90b46a1b3e64f81ad878d2b24e1c11ccf5802", "commit_tx": "0xa7f62702c3ff8a1ad8f29de0c1e70f7aaf0fa69fc9068c68e9435d720d240887"} +{"index": 76343, "batch_hash": "0x13204129b548ffbfdad0c0c1018e831d6c4619a7a10febd7f0c276149101d4df", "commit_tx": "0x45df72867fe3a5a6adeb14730e49a813f4b2862743d6145273773fbe19f44584"} +{"index": 76344, "batch_hash": "0xb03ab3de4ea692c9978abaf3826096c6541a216b177ac40b6eae9d01f8d07b1a", "commit_tx": "0x3e2b753dfca48918a26a94bfd2ac9d259656b93a95b6c07797b1a897260f8651"} +{"index": 76345, "batch_hash": "0x47f30c56c51406102683ebbb0bcff6e6517eb4de8906dde57f8662a9745e5996", "commit_tx": "0xc7bd9e61a52f35eadde78a30a3fc5c2e6d1572d33cf96ec626537ace819c49ad"} +{"index": 76346, "batch_hash": "0x5c92f53e79ec66fdbb552c571bf6c106e14fa446d4aad37214a860c3b29fe326", "commit_tx": "0x6b575e7b3573622b49de44842b677fd0f6aaac29c66aeb0fef98dffaa2f72e14"} +{"index": 76347, "batch_hash": "0x5b312c8c4c03d844d8c2c143eb8998ba86a4301f0f5475a8b3ea18f4c57639af", "commit_tx": "0x0281e0aad26cc0729e341b6c0f494fc591d5389856f69ed30c35a185755424cd"} +{"index": 76348, "batch_hash": "0xc2111e90d18d7b6a1ddf5fa3a3740a493385551d436c2ee4b3e2d11b9434e887", "commit_tx": "0xf69cf3488eb7d41d4b1f37b78678e277a397928fe918fc527e6fe32ff44a6972"} +{"index": 76349, "batch_hash": "0x89c7e1af0cd202abeb4da2a6e81d937a0e10aa81f8f6ff0ff4455ed09a20a577", "commit_tx": "0x2567a9e70c1cf827a56b72b95a5007d30cd3cb3d007f2f77ba94cf1e40f941c9"} +{"index": 76350, "batch_hash": "0x1db88704585d1c0f0f9b448f3c55c0a340eb076294f5122d9f578120dab168a5", "commit_tx": "0x659b3a9f02ce70c73a0d012983ed16feff1316243f8e89578827cb0388f83b2a"} +{"index": 76351, "batch_hash": "0xfa391620edaf6185abb29946edd171118b8de5c497c10b9206dc3b26bbf488df", "commit_tx": "0x29bcb6531b470a1a76cb6ad1981aaaf322573ab242af086bd72e2852f8cca68f"} +{"index": 76352, "batch_hash": "0xfd41de7885faaa3fbd93099c76f88eefe1347efe5050c3bf6d67a43f81ffcc6c", "commit_tx": "0x89165fe7f09ff898c53938c27ed5a491ca84fb4a20faee4073d2942c930a4615"} +{"index": 78293, "batch_hash": "0xafe9e32914396d697d7bbda482a626c61f0cce96ab42ec5cd32976cdb9fb7e7e", "commit_tx": "0x8aa3e8006eb677138679f6026f2887a4c5d82d205ed169cf8608f671da6a2eef"} +{"index": 78294, "batch_hash": "0x6835511f2344529a17a4d97f8a5aaac3159448edbb16ffc22e670c16b2566145", "commit_tx": "0x9af5453b50de3d835ad2e7a71069a35484b80ae9569f377c00ccf7d7e6558874"} +{"index": 78295, "batch_hash": "0xb190096c7e0e76a1bf112089ada14c28227b24460d3ae99052807997196a1ccb", "commit_tx": "0x394eb5699f45b037a074b2d14953de65eb6fe0ca557d13540acfe56c8e1c5dfc"} +{"index": 78296, "batch_hash": "0xf1e1700c36e1072b14d72c35de9f52c9bca81085df5e0ab6cd2b7d350db560c9", "commit_tx": "0xd1068ba8861cd3296509fe53d656299a6b789f16bf15eb49c7a995420ae37f52"} +{"index": 78299, "batch_hash": "0x765194d5d1613c0e93b06d24e06595883f93bcf9db696f97ab8a2d38373f0342", "commit_tx": "0x0bee64db7144099ffddf0590f44556a79e740080107bfdb95bcc890b8a695775"} +{"index": 78300, "batch_hash": "0x3b0b5f4ec64655be05c3e24f2d4551d4a8bb9bbf2b0749087e56e11a5890a099", "commit_tx": "0xb3269b4c244f60af717521109028819384a308e0a4fa361e5c4a74f76ab23a61"} +{"index": 78301, "batch_hash": "0xd7592cf55c65769a09e3dab362c9d66b826e658986b66a9e92b5dbbc7b7bda61", "commit_tx": "0x7153a31b4e0d198f33a0f43a7456ff42d6c8fa21857691cee7cd55ab15082c2f"} +{"index": 78302, "batch_hash": "0x4a5cf0cfc84c9a735ef25e23e87b6fc0ca32c3377515210d9107bdf8701b6df4", "commit_tx": "0xee606b562bf6dc2089f8793b1ffbacf1752445d6ee2d9fd54387256cd30a5a72"} +{"index": 80843, "batch_hash": "0x21bc440097cf4e41e7e53f4befe4b37b3bcca9457dd7423b3e11647a3f2bbb9e", "commit_tx": "0xbfc2910218ebbfd8a17a6d8fd1b85fc635220b9bfacfd2a35e79a9e6395550fe"} +{"index": 80844, "batch_hash": "0x8ddb7434db1c4a1663ce9748dc891ca8ffb1ed8817214ca5ee1d2ce335f714eb", "commit_tx": "0x037f93c528ec2ec22bdfa1af0502bcee158fd3c222f18a565feacdc12e4df85d"} +{"index": 80845, "batch_hash": "0x1a7d54035c2c65f59e05c6b33434eec82bde6cccf2a29f35379a116aa1342a44", "commit_tx": "0xd81efd6dae92d29d03f9fe85435798e52943d9606dcd68439ce2dbb736caf7b3"} +{"index": 80846, "batch_hash": "0x2b796ca9f97d049ac5c9ad1cecd1e1665e5804be45c748dada8838650c8e3961", "commit_tx": "0x663c5d6e957876de4f8b252b4860782004337aca16f7bdb290679f27d553cc12"} +{"index": 80847, "batch_hash": "0xf297e2b12ff6c0b094671457567dccdf01d7e5a57e7a5bd754079c67643421a5", "commit_tx": "0x8f0e4f38f6a41dd53a7911550f0d1c6fca2502db660e68a3cc6b758533818345"} +{"index": 80848, "batch_hash": "0xef41fa5b5a1f78e1f1c00ba5d64134b7aa5ca1ff5286127ce9219fb1596471c9", "commit_tx": "0x107977c8538f2e1564e31f99e51910f793eec7820e8dc4f318f39db0a395141c"} +{"index": 80849, "batch_hash": "0x7f74288854db37fb00e5b28688aaa33a8de06973384fec87818de303ced474d1", "commit_tx": "0x37af0272dbee0d98f3f182a948ea6f906da908073dc9f4f283c7c87566fdbaf5"} +{"index": 80850, "batch_hash": "0xfeaeaf02d69d9f8d9d3eeea88883f70bd995187bf787232b2781a862a500819a", "commit_tx": "0x0291f23c3cd4277dbd6030fc463a526fc61e7125e18c825533d32ec1d6ff4f9e"} +{"index": 80851, "batch_hash": "0x2c49ecc682ab335609d6ca86c4fe3ea785647b2eb5203233b56e3ec0a16f55a5", "commit_tx": "0x6076cffb4c77ebdc87e5246d7bd4ac57fba25f2546ec92a63a36e60df3c424fe"} +{"index": 80852, "batch_hash": "0x4cd8f89f0b04f600abaf7c6744d013d91d72701bb0ff536470bff09cd5ab8d32", "commit_tx": "0x89f4db417044657455075753296ea50b67af440aa69a281cd8d9006f31586cfe"} +{"index": 81233, "batch_hash": "0xc644e97d5f34c6143d779b953a24d3002bf522dd60bf7d60e6fcce0d8fa15a97", "commit_tx": "0x579bced11d0bccb86293036b20bbbb796f7cb3c078e43ab852dfe1a0a303d817"} +{"index": 81234, "batch_hash": "0x006d40f0e90af89244cd8f570dd3102c6a9e7bc4a6f2619e9dc42d0d443692cc", "commit_tx": "0xf203263e420d1057510b974507fbe84c08b36537e70c9cd6ee2ccc0c24c73e12"} +{"index": 81235, "batch_hash": "0x0534fe28fa7a0c5573d524b315a2e16de16a239c2e4449289b5e890fc31d035b", "commit_tx": "0x7dae3123b03157150ebdfbc52039f3742925fc574bdcca67f965152955966d69"} +{"index": 81236, "batch_hash": "0xa8226732e3f4e2a404397b0a1862f9bd887d27a96c47d499685a42b7eaaed35d", "commit_tx": "0xcdfc01f5256548c4d2563486559135f92ae4aa52bdcfb40294100193998db101"} +{"index": 81239, "batch_hash": "0xc70163a51e0c726167315c66872e668ee03fa68dc771972fd70c0deadb12197f", "commit_tx": "0x62508ad3c30606da12ed9353b49760ce72d23ffe0dea17ca846c59cbfdc4c6cb"} +{"index": 81240, "batch_hash": "0x4f966bbcc5a8ca654540438336126d7f37a12a618b17d80fdaffce94c9e44b9b", "commit_tx": "0x6a93adba2ed7cead409040652a4abc64620b413ae0f674799e910242d0a11940"} +{"index": 81241, "batch_hash": "0x5c2a21c65ded25577d1de5e550161d01b508eb467938b8aa33f3249cc206f936", "commit_tx": "0xf0ff1cbb0443c38c3427b08004413a9abc7e0714e2ba621bc6c85db2e447e694"} +{"index": 81242, "batch_hash": "0x873894d26f1bb6c82769a8a5c670c54a08839d430e05f0bcbe673aed558f646f", "commit_tx": "0x9e0bf1819467927d85ba999c4c4d299e74fea929433d3cac31b06bc6ea05cf4e"} +{"index": 83313, "batch_hash": "0xa924ea449e7f5c5bf57e0e4734a7d7d7aa2e9264f4ff3270653e764d1e4f00de", "commit_tx": "0xf01aa8478cc8d377b50d29a4b7aa193f547241bf69f81ab570df7fcd7240a682"} +{"index": 83314, "batch_hash": "0x8f64f53ea5c2a4361cf1f89b014c77f24ff4d1141077e92aa488ee56739080fd", "commit_tx": "0xb69665b2205b4c8546d5edeef7463837db26074e3fa1a075041fa265768f7fab"} +{"index": 83315, "batch_hash": "0x9f26813180f43709d115c7d40e8beba491af438c0a4f8dfdb4e2de11595bfb22", "commit_tx": "0xb722de8d20f566b7b9abd8c82f05a81765a3ec27ccaaf86f2abcd18af9f81b7b"} +{"index": 83316, "batch_hash": "0x0b691836f3b24993f7cd342da98327596b226ca4fca004dce91abbe3ed06878e", "commit_tx": "0x365e3f0c9ff0185dac4c4668e98e34052278e3b954ac93609a483b1fe47e7ed1"} +{"index": 83317, "batch_hash": "0x93c019dd9bc642ade9d704fa2a65cb9c35e65987bd26b1016afc99b78c3d720b", "commit_tx": "0xb956bd822dceff4420a03b6f15e3aff52e85a37f27090ffdad70a62a666e855d"} +{"index": 83318, "batch_hash": "0xe873fa917c1cfd2e3349d82ee1c00ef03e535309baeb2a485b265fdd46485a32", "commit_tx": "0x2b2fd569688b6bf079a45e501111ac1804ce86a357a9f1418e8356dc8d99cb76"} +{"index": 83319, "batch_hash": "0x79a958c301da8a380c9f2837f14d2bbece1e1f87046e32e9dafc7fdf12b43138", "commit_tx": "0xe22f20dd328d889c37723e891ded395aba396bfa9b2ac915996dfaefd80b13fd"} +{"index": 83320, "batch_hash": "0x2ac154f8b08d4f2794d99766774ed98b801a1fffae95defac80501a622b1b2e6", "commit_tx": "0x07e0c3bb35e944370c8941b96fc7d35d875828312a59066dae0a119a87548540"} +{"index": 83321, "batch_hash": "0xcd1f2dce31b930a1809b68f6071be3bbed5bbcc135dc82db8049bc0df0f0fb50", "commit_tx": "0xc968dc2e3fe61f59961159a6979b041454d6cb949b9cfea347db18153dae2949"} +{"index": 83322, "batch_hash": "0x21b4be3236e0bd7d2d5c4cd4cecaab00470eef31491733766ad95bad43ed9270", "commit_tx": "0x477ad96a0fa4a2a4ca1e481a6be023791569f1558a7c98f8287d75fc8eb3a481"} +{"index": 84543, "batch_hash": "0x9140fd598d36e7447c051eca7361284fdc6c8da8e44d1ad87ca22d8157956636", "commit_tx": "0x168c3baadfb72a7e31f08443897920c000001ea66587398160e7e25af4d2e841"} +{"index": 84544, "batch_hash": "0xa85dee2a8d37537c38bb87b21bd2348a31a2c5c6747e2facc3eafb02bcdd9b5f", "commit_tx": "0x6be1a2d4554149286d34260f59cf0f5a95b8dca04554a7cde7bb05fb24e94e07"} +{"index": 84545, "batch_hash": "0xd8627ee0a1076485d7f4f67e587eeeb54b7616566996679421846751a5d51660", "commit_tx": "0x28a25839fad337c09f84cf3a03433f73d3f42bf021074a0a0621ddcda13aeb71"} +{"index": 84546, "batch_hash": "0x6223caabc086b6b68c8f11a40e8bc0631eb6ac782623a5b29b834f174d4ece90", "commit_tx": "0x87a1d2e8b9014d261761fa21bccecb1b9e4a9214579db6ae141adc8451456caa"} +{"index": 84547, "batch_hash": "0x760f8c261074965aa11a2a33ff150cc19e6e564c31e0e782008a0d813c059542", "commit_tx": "0x8b65fe996010716b39d716adaefa4d93d8908d8d604aa7850efd332c626e96d7"} +{"index": 84548, "batch_hash": "0x9cecdc426ea74362afc84eefe91efa595044531e44b089c02238f2725c3d155b", "commit_tx": "0x71b18cc717bdbf33e22ace1391a0af4f52f1e04ba41b5162ca36dd70528c7609"} +{"index": 84549, "batch_hash": "0x865cef5248e559052fb31a40456a077f17af894c4b330cab44d9991185ddae61", "commit_tx": "0x4785d4d6e8af105055e42dea51eb913087f905f7b03f2f3d29c8ebfc8881a184"} +{"index": 84550, "batch_hash": "0xe6a9448429788b38b65c971f24043c44b7c1b8044897b9de19740f22367579f7", "commit_tx": "0x0667c39ebe93aa73484fca026c19f74ed244e1fa575af4bbeaa410324fc5074e"} +{"index": 84551, "batch_hash": "0x28cfdb72bba2643dfb849cc85abf586020032f619b26a783825d9b4b7f242b6d", "commit_tx": "0xb51ee2e221647fb1bbbd49c7aa43952882025034aeaf506b6884124f4640a119"} +{"index": 84552, "batch_hash": "0xd486b17a0f3fd04cfdd9585eec20333d7fd2c80437db0a7c7f53b6354bf0f4f5", "commit_tx": "0xfc9c0c87f72b94cc1e60cfc82a5e9865387049090937a944d9234d2e6d3c8338"} +{"index": 85543, "batch_hash": "0xaa416d97bf72e3c8a41de1bd6f10f433765987d119e2abf17f94a5411e6dc5da", "commit_tx": "0x8993d5a0b8568c8cb09cd6e9961440429c7bc69df4528342049abec545ccfc41"} +{"index": 85544, "batch_hash": "0x398a8b5222e793e392193000108e7e1618ea4c1b8663f6ac31389e11c387240c", "commit_tx": "0x850d845dd9fba423dc5757e51c7c8048062e5ede544f80ee9a3ffedc1fd7f12c"} +{"index": 85545, "batch_hash": "0x9213db0fa01123c497eb85fded765ed3dd763071c0f850f89c3d820ac04a9ee1", "commit_tx": "0x432795547278bb0d7cce3d42aecfe3a8441c3cd96ad65652f6ca51f3aba819bc"} +{"index": 85546, "batch_hash": "0x36b5dd1417f4d82b029bb04258640bd0147b37e4203bddc34fa620c9d8fe2d84", "commit_tx": "0x833ccfc4769efbb5980255f53a8fe0d44d090c824c6867e3662b462063928502"} +{"index": 85547, "batch_hash": "0x47d5a501f70726649b071b00ffa898d8995022b4772ca0eea51c70b00f630502", "commit_tx": "0x248149c9cac2cfb23b699482ab17a477b25cd987bab77da52dacd5ead439ccc3"} +{"index": 85548, "batch_hash": "0x6e67a219ddcbd9e3722e509856ff89c3d1f032ecbcba92f19c35c92419ff79b4", "commit_tx": "0x96ac6ad13ce3e2576caf402ba8d576335e6b3f7e91d242a262f607ec07d99181"} +{"index": 85549, "batch_hash": "0x8616c0e347a207335cc2f16f5a474683f40300563c2149a3d7c881b626a5c295", "commit_tx": "0xcbec5ad0e7dc6da404aae46484d3614fb020ff4dad3588a5ff6f7e9280e1a79f"} +{"index": 85550, "batch_hash": "0xbd9cb7d8cec6d82cc0f7690222974a62cd1c8c3822e7d4825ec9bbf8cad4f863", "commit_tx": "0x85ce3cbc9818c6d3c75fa1091dd6997af6ba979114aeac072fdd98ec07756c7f"} +{"index": 85551, "batch_hash": "0x784ac5b1b916f583c8706080f47ec50c4235f6940946969aa9aa19460a18485e", "commit_tx": "0x16d698cea6e3ff89616cd9267e665372025ee8fd1a107788fb02baa96c57cd6f"} +{"index": 86113, "batch_hash": "0xbe07be9c252af9de721ecdbe09bbc1ee3c5ae66cd0d3c5eb32cc9ddec469ad77", "commit_tx": "0xf1f08d4192274e5376f471c29c8098991d88970f6e73c340995d6da31e2b873f"} +{"index": 86114, "batch_hash": "0x5f2ae29fe28eeb9ea70f66b0717a503c17ae90b31ad47bc350ee59d896ed4a94", "commit_tx": "0x234b69f97fd280c09156643e91d07c3cba0d0ea44c210d3d08198e4ae576aee5"} +{"index": 86115, "batch_hash": "0xeb53aeab67427e1ffea7e759d4ec61d1b5d63539a32763178bc3b3931659bd76", "commit_tx": "0x40fe2f7d2c55a1c23e48810ec07558b9ffc6ef7a3d505250861decda4e6d2a59"} +{"index": 86116, "batch_hash": "0xa4cffd3bfd85e107c3822cd3fa5fc39ca136475ba7f13e5151807b38eecd6225", "commit_tx": "0xbff72b7f4398f014a59621bb61dd6e39c8089490f584ad7571a144964403e995"} +{"index": 86117, "batch_hash": "0xd9f25d547509a2c2e6a4b6559bf53a15d58b1f149dd193d620ad796d5edd06a4", "commit_tx": "0x362cff1ce4a852879fce510faa0955343d45f5038e94964b338a9fe1a88bf0a4"} +{"index": 86118, "batch_hash": "0x0d8652a2021a100322f943184560fedf65dbaf408028b42eded42b0adeb53f8a", "commit_tx": "0xbb35991cdfda2ae01c37ec776fe2f2ea11d9be64ff32cd72aabc0e5c6649fa8e"} +{"index": 86119, "batch_hash": "0x872feb28ed4f903e1e39229043bd9a39f9055f1c502bdeac8d725792aee65e4b", "commit_tx": "0xc534a3aa837e4edeada156edaec689b5db2fda0329a91fd7adf45db4db14c2d6"} +{"index": 86120, "batch_hash": "0xccfa0def8058d6438a28498d7ffed77deda22c2a56fafdf552284ecee353d9ff", "commit_tx": "0x412da78a2fecf6eb1902cae75c8d2e1b17dea4bc6b763c363d1a1a7dfbcad3ef"} +{"index": 86121, "batch_hash": "0x5f7c13c997d578f81f07690cb0b6da5230f7cbcfcb6be76457a1c0c7468a2f30", "commit_tx": "0x630cdcaff0a9d8dda189101aaaaa441529c9ad61831336e41a5188ca73866d6e"} +{"index": 86122, "batch_hash": "0x08909773fa8a77ca3ff768c9f6ff970cd5e535487c50666e3e56ec248fda424a", "commit_tx": "0x681d8b4c3bb01e0566dacc697bea04286d492dbed0759285157393e64767da8f"} +{"index": 86213, "batch_hash": "0xe6cc4990bcb7437fc3c04a74c55ae7b2b73a2c7a1b9a4ad2023c874fbeec9b03", "commit_tx": "0x09ae6bf4a8241d042e09c8720abb59d7c92d9537007ed3d0b78fac4c7132231e"} +{"index": 86214, "batch_hash": "0x65247ed198709eec4231d1526b0bc15a0455f0d6644fe5b4566a810918893876", "commit_tx": "0xd98a05ff3d84c24f174185a16bba3f77933adb75d797e3b63297e13dcac38a71"} +{"index": 86215, "batch_hash": "0x70421793664d16f80c717a58f45dbeffdbed666c26f7c0de7bcc71cede1fbe76", "commit_tx": "0xd9bab04ebb901ed3ade94a1bac62b7a2163abac8696d149a642727c8ea197503"} +{"index": 86216, "batch_hash": "0x89b5c5b4ee126a06b81bdf9dc30729579d751ee44151c8e238c21ca5102e66df", "commit_tx": "0x6a57b3bb20b433e5b15df43890828a4a80af791ceeddd6d351bdd29d77f9f7fb"} +{"index": 86218, "batch_hash": "0x8ecb6045d8367c07db5ae025c161ccfee120c8e498649f72ae9494f620904f2c", "commit_tx": "0x5e169287893a25a18be03dacda558c3fab58d5e788e706f1146d84c93c7899bd"} +{"index": 86219, "batch_hash": "0x135e3032bc3d279ebd8ca172f95debcff1699ef9afaa2a014eed3f39c8ad32e7", "commit_tx": "0xe6c9fd1dd5c32f77e883b49421754aef8e9aa90981c1b09ed22d0468d25ea4bb"} +{"index": 86220, "batch_hash": "0x84e20f0ab25a10aa44b563f64e434aa34ee91c70d2c2cb4a22aac8f57b7a5068", "commit_tx": "0x483a0f0c88dc5cad10f3fe8630e2832a88643d670b62237f71d1f69bb3e6639d"} +{"index": 86221, "batch_hash": "0x34e5eee4d0941c75d268ab3c15efdbb9f9f89ee5f54fbfbd22c7dfddda7fc652", "commit_tx": "0x6386472a331b1086f88d683a5337bcfb512a1a9c3a8b3a62d07219678b9d93b0"} +{"index": 86222, "batch_hash": "0x3521f05810bfd1b8de3646431c3e5730754ff36fbe9a867090b24219d12789a3", "commit_tx": "0x30f47c502b05aa14cda6ce151ddc33ead496bbc2e2f3ee616e120e4fdf135d08"} +{"index": 89383, "batch_hash": "0x5036a3f27d72122d70e2a42cb7a70d62ba273c6f1ac2a4b26979b6f2ca4309c2", "commit_tx": "0x9a4e163eb4f665f4921795c4e2a80b7ae0bc60fdf7616c62bfa048cce3d6c109"} +{"index": 89384, "batch_hash": "0xc36a1b50260fb81dde0fc9c7d428fa213740affc269b742f88a37d66868a0135", "commit_tx": "0x0d1e6f1dbc94b2135db993245b138d0d3c08e2f80ff6622165c8aa070978c2f0"} +{"index": 89386, "batch_hash": "0x70435ce8c19d58dfcd940af0083400f126ff46b8ae93533baa4e4e38116291f4", "commit_tx": "0x27a4c82aca27ff5ac781325257ed186055211a629ff373205c5cdd665bd86670"} +{"index": 89387, "batch_hash": "0xc668ec1da0f18d79bb470ba5180676783f54c27a76f4bad3575fdefa05cb55ba", "commit_tx": "0xe0afc01f6782fbd49a6b5abc5414b3b65db8f8483e94098a4fefcbd7f6fbd601"} +{"index": 89388, "batch_hash": "0x1fd96bc086a60b4d5b2c099e18977a4f8bd6bfd43908431dc6487086a1cba0c2", "commit_tx": "0xd27ece0027c6c8050531a158895a363b02251b79579ae349a6df3b7fef513d2a"} +{"index": 89389, "batch_hash": "0x582cea67d5dc9e610ecd3b961a7fb49fae35b20095525cc022b2d60866784e8b", "commit_tx": "0x2aed4f95b922c1e7c3922d8f12c27a54a34fef14e81ffcef6f8bb2d46eaf706d"} +{"index": 89390, "batch_hash": "0x50294826a93dbd2c36731fbe8eae4e59573e432b730f33b9695603e3711cadba", "commit_tx": "0x34dff07f35a2ce456c7dceb974b5903e7058015c9521aaec143b0dd62e1e9e7d"} +{"index": 89391, "batch_hash": "0x037e5389b739b4f58e68ab1ff7636aeeeff4da35843d23c0cf9b1b7295a5f8f2", "commit_tx": "0x6600598948dc7a86ff513709fa67ecd2643c11796b5e5e789c93eac1fbff8857"} +{"index": 89392, "batch_hash": "0xa0f50e178714721b224e9d89e6afcd662cbee38867afcb5553411731bca4f0fd", "commit_tx": "0x008874dae4d93815a96f048bd7d4f63a288c708c022f18272c134697b4df59c4"} +{"index": 89913, "batch_hash": "0xb51c06ffee5de0579d82cfbef1ee38d31c7e66502734cb5a6766374daf99c157", "commit_tx": "0xacf02dce004c0b9f40d50b885b9aa6f19c5645d27c811edfc2161e92a816ebaf"} +{"index": 89914, "batch_hash": "0x3782a1df439efc7610c64b8fe6946447be8c56faf3bda4ae7172357869e0b51b", "commit_tx": "0xc7ef0af7a8850c12d0bbd5853c0a69a70f466402c1c3db64fd59f2ccc0a04082"} +{"index": 89915, "batch_hash": "0x69249e299acd5e088dcac5ca28f80c6df02c819890335f8a12050f8346e1cf85", "commit_tx": "0xcd978ec0dd388a22e70a616f8afa8f148ee8060fcd82b41b942beae899af6330"} +{"index": 89916, "batch_hash": "0x9b6b391e42a4c7e5de4cee3dc9da0e91fb93a384b2403796edf214bc0bc55689", "commit_tx": "0x9dfb4f3b85d979d412a0661df1334e31a461802af29bb1b755a5aba61a603ef8"} +{"index": 89917, "batch_hash": "0x08f4482950dc3a30103f3ceb3954699681ccf10dc1aeba09106f211cc5df19ae", "commit_tx": "0x53dca18a07dccbe7dbcc8cadf994ee2311a600e91dd29090f03b4a3d801e8810"} +{"index": 89918, "batch_hash": "0xedb2cb4d15e488ec922114320e7240662d5c404dda1375ccc820386b20cad1d6", "commit_tx": "0xc2330b4b390f43fb5ce93eff530e63ef0e9e12412256a25c162efa015e3a83d6"} +{"index": 89919, "batch_hash": "0xbb7debe68ca8383f15984263fbe989dd5a1237a07a6d55cd6e401678cabed3e6", "commit_tx": "0x08091e80d7eb7bd5585e2c1d90429cb270d7429146f7a0fff9826d4bc01a6a59"} +{"index": 89920, "batch_hash": "0xd46db1921d23ad5504bd55dd971501562f232fdae9bddff30bfbf549eed95350", "commit_tx": "0x5b4275d737e43917c219e6eea5a03ca6c9975cbd122c4bdcdc580547ff275641"} +{"index": 89921, "batch_hash": "0x2b01a872d1669b631ce1ac505e135793f306bd5a68ff81ea37701859f07bb631", "commit_tx": "0xb7e547a0c154cbd19021ce9a1b7f9ace7b1e127b3cbd1797fa0ce82865caccda"} +{"index": 89922, "batch_hash": "0x45a60759b7596dd2c9d900bd828795b52d8c795357fd88bfd3fece97e6a9ad95", "commit_tx": "0x07037f6c5512507f3cc56e7ca96db1c84e16fff2508aea24165106edacd4fe26"} +{"index": 93333, "batch_hash": "0xd39a2521dca68c2a4132c0a2a82793f2643d5728ed8b50e889e255a3323dd689", "commit_tx": "0x2e54224b184f968598a28786152d5aa0554823715b9a3051a46a5340c97427e6"} +{"index": 93334, "batch_hash": "0xa511d572f0f33d087d56dc9c05d69361e207889dd439e60ddcef6d16e2b99707", "commit_tx": "0x6c4de9b70517879dadc46b42699d9c33eba48a4323b135637de6a36936a5e383"} +{"index": 93335, "batch_hash": "0x2933ffe456747e141088214248963ed2e0a36d58ee8c765f0c50b081e681a886", "commit_tx": "0xd9ccd641e5afa2899ef56132430568e7447975a6704d1ca903d1303d28e0b01d"} +{"index": 93336, "batch_hash": "0x59fca1076adc6d1d26d1033156bfa7301fee1496c0d2ccd049c19943d9eac666", "commit_tx": "0xd9a4ed5932324c2afe3b4ef51a7a439eb18b823bb76c0ffaaa4b61e2b78fb214"} +{"index": 93337, "batch_hash": "0x0c514492bf6a36b1092743481b0de283605b1f7e169cffdb11bd02203073a244", "commit_tx": "0x5c6d0948544e48b3e0d18a2d165fb624919ff26ccb4ab9f19eae60d8d7c8c007"} +{"index": 93338, "batch_hash": "0xd53ab3a960fa40db11677499a3966edc23860672e954039e187798c30178b245", "commit_tx": "0xa624014eba5bd37f9bd9c698062d81fcdf9a8f095bd374c66fcda608613e69bf"} +{"index": 93339, "batch_hash": "0x32f7c2ff77fa178906e535264520b934be3c6f28ac8d8f35d99243a9e61a3d25", "commit_tx": "0xa37634e4d2ba9a19008901f42b850b8cce727a1a07102db11ed99398aece9195"} +{"index": 93340, "batch_hash": "0x7124ccdb3bcb97e4570cb2607c7e20d439d6498de607e1d4500b62434624b4f5", "commit_tx": "0x8a22ba5d9591e3d4326cfb8fcde609efb06ab42a800f044a421c3a41bda37c8e"} +{"index": 93341, "batch_hash": "0xc2c98e1a2d2aa421b5d9ef1e3998de1a21b176e831214716b6c121ee1a45784f", "commit_tx": "0x965a66405f5f24f33cffd0b3ac5a032f607e17b0cc403a7e10843a4e4d50ea9e"} +{"index": 93342, "batch_hash": "0x8e70f886a18a28d77c09781e328fc2f7140be38c9ec86f847d8762b797a05a1c", "commit_tx": "0x016608c448650b09ece0c6628724d452d43f89e6a069a55b6da17e56671de084"} +{"index": 93713, "batch_hash": "0xd30450f5f57fadf495d77061d0be95ea2f26e47e605fbf87297086eef932fbf5", "commit_tx": "0x8d72c908a1dc2d202b8aec711f1ce79822c792ee76ad3498b0982bc54042154a"} +{"index": 93714, "batch_hash": "0x2556494aa2c02f02c9a4371e22941fa24488560c1c77e0fab86fde38c2320ff7", "commit_tx": "0x708d9466b29597ba1c5af614458dfdb9f6c8c989185adce2f9641abd75213041"} +{"index": 93715, "batch_hash": "0xaca6ef67769c1534f345d973e6e14b16000c8e592271591e172c80a39ab27407", "commit_tx": "0x5a784a885f92b8b06b0adb4d3186e167e4c45149b8979a9ae934657f7b6b5ebd"} +{"index": 93716, "batch_hash": "0x86c8851c1ca3a8db418f0dc325d4ffbc407bf58a53c85703658412f2ef112234", "commit_tx": "0x204b05a800710c9cedb451419ea128d7f5d4c15267a6a338a8bbe802e7c608b7"} +{"index": 93717, "batch_hash": "0x0635f4c893a2cdf7a09fbf7d97bff985d5be4cdf4127bf13351c50f5ff34c8fd", "commit_tx": "0x3a20e578cd82e9504360fffff7e7801ed17de8eaf17ec5d0facfbd77c838dd6f"} +{"index": 93718, "batch_hash": "0xa97e9c2e5d046a452056135b420c9953471f6c9f9d069935b96ca94d4fa867c8", "commit_tx": "0x24e8553549eeaf5331077471da61990a9caac167432360bc0bdfb2a3c1e7be9b"} +{"index": 93719, "batch_hash": "0x6cf21402cc4724f9e6d36af3e139df9e311d7d3e8da5a3cb0a07b1557829dfa5", "commit_tx": "0x53f1cdd263a3dca21ad408e067fc1bdd8de46444492daf657250e97a65409d8d"} +{"index": 93720, "batch_hash": "0x37eb3ddadd0a7955244c81e1e84162822352e1a99aae0c87603fb0ddfd740eaf", "commit_tx": "0x082ac08f577c8cd9ffd552d4ea235058b4380ad72fe571b309330e8b7e0f225d"} +{"index": 93721, "batch_hash": "0xaf9e6a8f543869145f927b7ed19ceb21dd85add07f757b665be550c95ac2d4a0", "commit_tx": "0x39e2e602bb085c0598e77e225edf6ed86334426459219a942e4892c4860a1595"} +{"index": 93722, "batch_hash": "0x389f39621a0854a5e53239e15556914d66fc633694a9ccac4b039e5bc4de2614", "commit_tx": "0x03f81ae51e16b66a0a0eb15a2671c9a14ad44cb3deac3dfac3cbff16068c7ce7"} +{"index": 95673, "batch_hash": "0xc5c64c2817035c0da58d72b5664bc33bc9703140e7a3cfc07bbdfdc03c6f6452", "commit_tx": "0xa0cc9bb66e25564cf8a1b273886b4376ae7c534398b38d27d87b6455dfcbfae3"} +{"index": 95674, "batch_hash": "0xfb02c405a699749e8daf3c6acdaf75d9d98921bfc33b53f196efc8fe7fd00739", "commit_tx": "0x3338ab74ce1bb3231430dcc40146d9686cc5aee097d386571984eacce7a3c409"} +{"index": 95676, "batch_hash": "0xfe3b234518dee5f34e476b5a173f05d094ca5d1021e60cc616e3a3150fc2a30c", "commit_tx": "0xc2d53711445f5d47c48d12e12f4a7d615ca67bf7b5c7c6df83a99ccfd7be1077"} +{"index": 95677, "batch_hash": "0xd721900b6ccf81b95b8e8bf787e1e40fcd0a0a63e6cdbeff4e7afe0c32acb486", "commit_tx": "0x16998d3a879aa107282d93808b46a83d3714f5ab58d1c3c66b605323106b17af"} +{"index": 95678, "batch_hash": "0x40c2fd403ada1fca85b4e2131b8b2e5fdd7157d2c227375fd8c3caa4664b74f2", "commit_tx": "0x4ca8ea0a3ce882a6f1eaf8620a4bf7f7b6b74974c51418109d637f14385d38d3"} +{"index": 95679, "batch_hash": "0xebea5fbad3be45e8ff163b1471fcb8520fa22dfee9b710b2b781105dbebc66b2", "commit_tx": "0x691113e3c5497f73d13984df58cf67f233610757753b83a5f17e498931ef8a2f"} +{"index": 95680, "batch_hash": "0x095c5f3f402b7cc3220647ba076fe0e2e85ac7ad2e62a0703169529e26b8eded", "commit_tx": "0x490243867a6192cbfc19ba0f35b80749c808bc1c5562c71275419503ae50a4a3"} +{"index": 95681, "batch_hash": "0xef77108d88cc8e1839125e2aaf02071866a778d381dfe242788a9c4502bd7178", "commit_tx": "0x6f935f3cc60ba2355a093a9d2f21d84bba6ec8b4837b51dee627e2960e96f765"} +{"index": 95682, "batch_hash": "0x5c004718001ebcc20d04f646620967f67da9b175ac81249fe3c0adce001dfcde", "commit_tx": "0x95de11556255bb511d8359a66764765d7daa90f80f4408d98bef4ed3f96645c7"} +{"index": 100883, "batch_hash": "0x2a3d2860facbd7afbe84d7e10fdbbae8ce3de401ca0b3a719dc21a5b6f08da76", "commit_tx": "0x597087226a9612dca933b0575826bb4f0cf6c59fd6fbb427afeecc5a7eeebe46"} +{"index": 100884, "batch_hash": "0xb054c088a160fbb2adcc62fdcd1f51b079873bb6770caed2791f08a2dcc3ef56", "commit_tx": "0x95c712b0c8b810a38946908be22c082f253621184cc3bccf202ebfe5170872e8"} +{"index": 100885, "batch_hash": "0xb5e96d66ba789bd1c3f99a86840110ac1e4eb64a04618eac68e460219bdcf2c2", "commit_tx": "0x3cb8f070c06c3d31b0b79f58ffd0243f69c4d1b03579d4d763c1d86a9e7d9d1c"} +{"index": 100886, "batch_hash": "0x4543fb2a4826c7412e5d83ae86165e9722c8ac0c72d5a819dbaf0b4808f3aa2d", "commit_tx": "0xe3966835ddb5a4e15611a3c63b2d0c842fd70767457d0c3948620b1bee3004ac"} +{"index": 100887, "batch_hash": "0xdc95a82736e584b0345fe6f32c072308b148d4169b994883b46c2834bace5489", "commit_tx": "0x85f84390a5ebcf57a6d47dc0e8ead41e7f9734f09871fce177dcb1f4e649ab07"} +{"index": 100888, "batch_hash": "0x81f2c96020db2f8bc844ca5d5386a9d8bb240135c93ea1555576ea5b1649a068", "commit_tx": "0x74b970956a2245e66fe972a8f79475398edd55595cbba73f1585b9afbccb938e"} +{"index": 100889, "batch_hash": "0xb41e55381d6d50c28ce0499d4cf75a4ad4e3f806af8dc104ee978079b10d896c", "commit_tx": "0x48b8f4ccf80faa93290c24ef78a88aa76a7eec53227c75bdb73b46f54ff027e6"} +{"index": 100890, "batch_hash": "0xbb04ffb181a4ae8231ba1d6decf4074f1a5d75fb48300015cdb4564c0126b901", "commit_tx": "0x2b9950a33c087e52cf1a1b7dfb21a1d6629520bae9632e424203d85956293416"} +{"index": 100891, "batch_hash": "0x1048c8f18e8d5de3cba952fa3270c24fbfde72509da0130acf8a303170bbf271", "commit_tx": "0xcbed636402d35ccdce5a892f586c96e0db04d696524691635d4746da97ec3ee3"} +{"index": 100892, "batch_hash": "0xdbc50340bf8d8cbc67827eab8526fdd1d143b446f238e7c8d58a682e474a57c5", "commit_tx": "0xb3c3ec2cc45bc63d7b0b6255b1e6c0fb20190d39514f77e04c6cd522d1b9a3bc"} +{"index": 102503, "batch_hash": "0xf0c7d15bad8cb6f8be043cddee29afb671b0cc2717013fe5f7117e6e635b3e55", "commit_tx": "0xc9e55d5fdf0bd9f280b51b04d05068b81b6679b1622131a3c7daceb55f6c1297"} +{"index": 102504, "batch_hash": "0xe4cfe56f1e8b76e0d85b43ea4075cbd8f3aca30dee365989002767ff07a71e30", "commit_tx": "0xf631f4e5d27a974a34872082bbade1e95dade5bd3f3ca9ed3ace7f74d2cf195f"} +{"index": 102505, "batch_hash": "0x6f159c378ed48c8cb7bd1dad3cfa5ef57f17da275ff170e83344b43771d26f69", "commit_tx": "0xee7aabff3b68d6060398735aa9b0cacefd821de4c48bc19ceba81b0a492e8772"} +{"index": 102506, "batch_hash": "0x27fb12d0c0200d63fb82809f6f16e393f73be4f8cd6bd59ba7975c7e9ff52561", "commit_tx": "0x24b8f89ca2a2ae76c9984b2cb527a8419720a3572cef0b34b3f6e45036b8d872"} +{"index": 102507, "batch_hash": "0x063242cc829d2c9a08e64c1be0ac8a18fbaa9bd1635809315cccfdb148c02df8", "commit_tx": "0x50bd977ab9f8ff287d0ccd0843b274b1608da7c4f5fcfd5675533c1694f0df02"} +{"index": 102508, "batch_hash": "0xc3654be81bb1c1ae9fabf0975f9b009b61ff0de1d5dd2ce82fae98eafb3fa9e8", "commit_tx": "0x04361b4f06eddfd4a09955071432fd4d39f2144e5ccc54c99a7c35a4ab6ca21c"} +{"index": 102509, "batch_hash": "0x8ab4ba7881e1af745b40a99bc2af22513d93df462d0b196be1af12b6b1eea236", "commit_tx": "0xdead47601ce85990f75e2f41b6707348f2d83d16bddd630892a02e66da613be3"} +{"index": 102510, "batch_hash": "0x54a371e32f6770db7f9de48b59e80654b9918fcf0fcb71674f035363d80fff12", "commit_tx": "0x38a90b4db26e77b152e78d3e35aa73cbfaec86272120709e8cd6b162b596a494"} +{"index": 102511, "batch_hash": "0x948cc3f9812afe115726b1a89d7dfbaf8669ef502932261c232db588d5dc4bb5", "commit_tx": "0x31be9458f845afb5cfefa4ad9ff02e6a1f78ffed6ff45e73418ae7009c11938c"} +{"index": 102512, "batch_hash": "0xc5eb3255fb0221542ff42ad91b1281a3621781ea87c6775f754fbf1644cb1230", "commit_tx": "0xa0ff5f6755aed551a1e7a8283ba31ab750d2fb0c276f71aa940978a4d49304e8"} +{"index": 108393, "batch_hash": "0x1a46c85016e1dce8f3adf19cedc3f2cb1aa8da52cfd05c34655cc1233ee94981", "commit_tx": "0xb0f317f3e6802487c82bd0b2da30fafe4641684914cebcc33c9062a524415ed4"} +{"index": 108394, "batch_hash": "0x8e228b0273e680781fadd466fcef31690ce5d28d9849ce1c271f30942c31a20f", "commit_tx": "0x846aa74fa618f8327437e75df4a1d47c98ace76361477b75e29108178e444209"} +{"index": 108395, "batch_hash": "0xa5eea9928c39bd50d4e3936221328a48e6fbd9ec5dcfbdebaaabf586876150f5", "commit_tx": "0x15295ed0da213ec2ee426269143ddb6b225e0fc9306d192a6af628ae7bfe1fe0"} +{"index": 108396, "batch_hash": "0x92c86079260550a4c84cd34b27a54bc66d94ac11b50e7ab3639c481247e169cd", "commit_tx": "0x7d6a349fa8d191e627fde7c24b4efad4c18fded03aac30244743cc4ccae8a810"} +{"index": 108397, "batch_hash": "0x9ae0ec3f13b1d57019aebf693874f9929db61bca6fb275b24da6db3f75ad27f4", "commit_tx": "0xb2a832d247bed8371f5a9e6526ccceb160ee001d3edd261676f17a998b1eec86"} +{"index": 108398, "batch_hash": "0x509cd87ca7e5510242416be7464c1fd7051cdc3dbf452806cab1c883751dbdb6", "commit_tx": "0x960b2aad8cfa3a73c8c6dd88f53987a110d5ff1e0a2cd2a53bce4b1442bac789"} +{"index": 108399, "batch_hash": "0xf171e87a736c2c4e02653bcb7806547742631a251228c0ece60600c740c48083", "commit_tx": "0x53ad61461acbe483b260decb47b2b7f3154fd64274370d6643ec9b20c586af6c"} +{"index": 108400, "batch_hash": "0xe1a54c5c5365ff3358ae1b13449c8e116f8d43e3ce0218ed1779e9ef3bba2072", "commit_tx": "0xe15c265a9cbbc7e295bfd7ab0654d235ccf220751a71979e9342193c21e07fbb"} +{"index": 108401, "batch_hash": "0x8a7e5a7987719b0cf467c35a7562942f3d52623d79e19c64201ca43871eb2ec3", "commit_tx": "0x6459027770def2f4d088cc92ccedbb656c0b73362796ebaa439445ca34e68328"} +{"index": 108402, "batch_hash": "0xdb7771258c4bd362caf3649ff0480a28eda62fe4259bac7c80243498cfcef72e", "commit_tx": "0x94150a95b6b5002f6b6a5efc045911460a4a5b48b6a990fda0917ba01be23029"} +{"index": 108463, "batch_hash": "0x4c4bf3c90466baf0bf2b59fb32648f61349e334e6e1368c969f92b8dce16026e", "commit_tx": "0xc610104841b1bdeededf195caed4d9ae0a0de14d544e97473ca0c6cd49ce46f8"} +{"index": 108464, "batch_hash": "0x39560f49f3dea2f38cb50cdd5cbaa9122f1189ad076a6191c4ae8bb457a0e67c", "commit_tx": "0xf2b2b28fe43b66383c76f516192b01336eed12893e5c397f40193fd104eaebc7"} +{"index": 108465, "batch_hash": "0x83541be7e9899537fa0d887d8426269f72ff2549d9c1a15f9de37fff1a6ad21c", "commit_tx": "0xb304c4a2e2e82336c04ecff79653dbd30957a54e8836c76ffa3ece045a807c9f"} +{"index": 108466, "batch_hash": "0xcdda84bb6f2ddc7e51fa771383c07f77f2da6770e60a81d631392a575a9679f1", "commit_tx": "0x52d13b026615c673454beda7ee25aac5794b4e582e8425d68c7ff9ca38dfd4ae"} +{"index": 108467, "batch_hash": "0x41b295e9a1f5bbbc0ee491d376254ef8a3c53bf6477ecc694366a10c1d72df3e", "commit_tx": "0xd43ebd5fefa7339d57653fd953b4adc1a51fab9717123620494e298c8a822046"} +{"index": 108468, "batch_hash": "0x5755f77f01a156040fbb9e867c8588f606a6e9da5622d520d641beddd5846681", "commit_tx": "0xf9d5dd262d05428bccb3a986b650411085fb326acecda1079749fc79b62314c7"} +{"index": 108469, "batch_hash": "0xafd2571eebe21a556a8888d4e42518e62f6e032f406c3f32ebd013ea766423b5", "commit_tx": "0x12f0b4f100367660a2604fd7d3cff7c4610650e36fe6ada71cb8ea00defc2086"} +{"index": 108470, "batch_hash": "0xa70e39c2c49ac2cedbe8123f12f4ab99594aed5180687563defc13e757ec381b", "commit_tx": "0xf9ecd220ec5df4cd467e0f7d724be4424cc160eb55506537cc5e25278560343f"} +{"index": 108471, "batch_hash": "0xe87e6e3a22093cd0be8db5183151db307ca097a7222c2600686d4937325de115", "commit_tx": "0x19edfc54f01ead0a057e40b184aefa2c0dcd51642fe191dc0262ae6d3f90f225"} +{"index": 108472, "batch_hash": "0xeda9b8b6ddfad345256ddb13ae8a84c7ee75fe8f290f7a1c0fe3649ea27bdc9d", "commit_tx": "0x3057cf93d8b6c9c28094c4d04e83e192db59a3d64db5d24c27bf01a6adbe01d8"} +{"index": 109653, "batch_hash": "0x5391cc31aebcce814e89111522aee547d66fdf1428e46a461b0781f8800a4f7b", "commit_tx": "0x606b21983ee9e6a0832271c4d9aa7b18e6930d5249e8364b170a3f896de4d452"} +{"index": 109654, "batch_hash": "0x800a8d934ab1701d3f7ddbba7ea7a5a0086f39830c3bc70dd84aace92f81f9fe", "commit_tx": "0xdb8b22d658c6ef3c654f66c3d249d2e96f757ef7e7a876ac9f7a069d4f8d1b62"} +{"index": 109655, "batch_hash": "0x94c16a5d277e41e4e7096bbbe6544ebaec15594fb03c7c656c7186bf0498e147", "commit_tx": "0x4089e0eb262f58fcbfb4da09582167bb8febe316ab66448d234dae797ee6cf04"} +{"index": 109656, "batch_hash": "0x0c1b47c4aa12918253c100b98ba392694b91e13d088c54672a9890371848d91e", "commit_tx": "0x2f353688d4b9779113f8cb0b3ed98bea2264da9d98e87a92fecf9516a5b3811d"} +{"index": 109657, "batch_hash": "0x38886b7380980d505239052305c756af3445e8c0255be42e07f081be252523d5", "commit_tx": "0xab42b05f1a48bbf9edf160a284367f4a613db906610efaaaa5679453a64b93f2"} +{"index": 109658, "batch_hash": "0xb6ef6d37b57e4595cb987669274430116a2e3a696d65fc772771663421a9247b", "commit_tx": "0xd2f2db9db91f0a70f9d59ee06fb527fd0705326b03985df4997759d115e3fb72"} +{"index": 109659, "batch_hash": "0x7b568ccc74533f556d94d417c89b7facc11b7d7244082c6fc3c825ede519a8c3", "commit_tx": "0x1d144b080c7e0561f8f0b0ec81a1b14bb798bc15a95e30515e6b19bb64e9dc98"} +{"index": 109660, "batch_hash": "0x51ef5a6ecb43bca237731bcd9d39980082d3b96cc98e9ced99a7f0c88bc4a105", "commit_tx": "0x493312eb585f286481dbc3be0aed4532f80ec38e6411a9ea63757b2256f486f2"} +{"index": 109661, "batch_hash": "0xa1e4b459cc0a3cd82ef26c3a76a08683948713ed51a1b4a58b67c5bdacb3db10", "commit_tx": "0xf35c8566030b2e932245d787ab94fd7fc5acdc274cdc82f9d45caad140d35a8c"} +{"index": 109662, "batch_hash": "0x9c29ea2146ea4cc47aac64fc42dfe68c5cb8b729cecfb777fa5b877fd56f321f", "commit_tx": "0xf40ac08d0cfbe40cea38a26c9e48e8624a846565c81f7f609b29356bfb2b0591"} +{"index": 109863, "batch_hash": "0x9c85dd4fa21dc081b2b8405a50312a06c22bdb594a8c5e7e1edcd5d9cff05aa7", "commit_tx": "0x857ce5ea46b9ce43ad5a21deb9548f45ff4acdf5371c4e73381fd45d63c4c62c"} +{"index": 109864, "batch_hash": "0xb33742370f04e2b5e665944b624898e1a7bcbf81fa0d863154a3ef831acc2994", "commit_tx": "0x30b6389f613d0773f1bdd883a413576651fd8f2d6b2603bd73603af230597baa"} +{"index": 109865, "batch_hash": "0x4c27c3f5bd49c3a576bffa13f7da2a71233a781c042e6874a4bdf8fd2f035bf9", "commit_tx": "0xfaf6a962151afeb9d15e4c65494bbd8d0d37c0425fa808b1cb1a2769d14d377d"} +{"index": 109866, "batch_hash": "0x76c9a34b6de6261ec8e39ed7556478ff6f4fe955592b7fd26577e95d128f9560", "commit_tx": "0x834c0deea073548807d0c1d3f8d4086c905163c074e12d8ca534e11d9b1a365c"} +{"index": 109867, "batch_hash": "0xe0304b90e1a07961f43ff33dd584eacd08bf451e8adf906f005249db3814f7cd", "commit_tx": "0x7f33838f4bacb786c38e37f1a69b41f3082091b75caa5a9ab3acf079b839c07c"} +{"index": 109868, "batch_hash": "0x8b27c89b49f7731eb287a0d85e76a835f395d38c196b7503e0fa42a64577e40e", "commit_tx": "0x821d678e67085c07b63bd3ed11fb6a91dce6af84dc3e2542d37061088415fe90"} +{"index": 109869, "batch_hash": "0x11f233e688f804eb4fe839f73022b466a7038f7ea2851f4a4d47c51d9d6f9890", "commit_tx": "0x3f2e568ea46974d472483f853b195b3de2649d7b4104c9cb9e19d381357a2345"} +{"index": 109870, "batch_hash": "0x182ba0c2b906612e3463aaf68160725144eb4b34284b30b7a899c1a0060ad28a", "commit_tx": "0xb15cfa5f2265a1eb3f613af759290188fc2a5b1774c5518b44e626f754112712"} +{"index": 109871, "batch_hash": "0xaa1fb4ae3eafb1941f28c7f90b365f0159cbd33ae951dfb0277eab06f9fbb104", "commit_tx": "0xde239f590d5d11dcc22193d3b8a6f7df3de806eb7da393d67b0204b24943fd76"} +{"index": 109872, "batch_hash": "0xec40b31b65d4e5ba294f1213c26fa3125bed0c6f975227a1cbc9259fe930d5b5", "commit_tx": "0x9b911712e40c46f4691b9eb38d9aec25e524bacc4997bf1c90b660dcbc5144df"} +{"index": 111123, "batch_hash": "0x3346773dbaa0fddef9cbe7b9a38d289d419c80110a19ec857e051dcb638ce34c", "commit_tx": "0xad2653bae1d28e726c26bc41f46be7fc518ab2d988fde7f882431dfc820a65c3"} +{"index": 111124, "batch_hash": "0xe981cc98e0647651befbe2f9dacb7de794075ffd92c4911d2aaf60693e8c682d", "commit_tx": "0x6f4d4ddb90eda491d2aa34f9839454d393fd2deb2295039d539bc5459eca2f80"} +{"index": 111125, "batch_hash": "0x26273311bcdd72de267059f21e17511e7cabfd06ae68e56a4394ccd1738a4ad0", "commit_tx": "0x5e9c7b3663bb04eb06dbc11193020820811a35eda4ee9a46f8f54ac88e9f60f7"} +{"index": 111126, "batch_hash": "0x05f8906899e17df3c50c7b570d736dd9d0a2cffc868df486bc550a806b19b8dd", "commit_tx": "0x5a4896e200ad76131a3c2654c5b591a3205e0357777629595c83e27f1c686b49"} +{"index": 111127, "batch_hash": "0x9d91158bbd63832305426928d9ee28273f26f172cc45a6a9a3d5c70b8b8eaf99", "commit_tx": "0xfd3836a3d3d16b04a50363b64fc0374b45b2549b7810e2901a15a41b77e84b1f"} +{"index": 111128, "batch_hash": "0x3ccf6b4c8dcbaa0cb5e2e625e097bf3b5ecca7d5fd2fd871d0f69bb1c4f5b0de", "commit_tx": "0xd97b52dbdf07c8a0cd8d8ea24bca444ac70433b29301e1c56be71997d31460ae"} +{"index": 111129, "batch_hash": "0x005e629164062df7e69fb73009d6d2e8acb160c8b903cd5e543893ff74fd713b", "commit_tx": "0x69551d7e9a4c19bad5ac53200d263f2bbd47e902e890242597aea8fea38b6a69"} +{"index": 111130, "batch_hash": "0x4f3bca78aaa73b287631f352ff217b028d2d0dbcde2d6f1ec18ff72d57ba680e", "commit_tx": "0xdcb9c5d6c51abf48c91044bbd72b6aa927b528f5b0706444a8dd71a2531ed2eb"} +{"index": 111131, "batch_hash": "0x5db04a198f341ce62e62151dae7c18266dc45f4142045a6bcb8e9f6e282c6072", "commit_tx": "0x7c21742a19c46971a77a7ebd4f4663aedc3bf74ca34b066c0407e46656316b7e"} +{"index": 111132, "batch_hash": "0x1211b98f2bd8ae4dadda44d8922040b9d866853f40968fda80b3d874ce349c68", "commit_tx": "0x0321276efc4ca198966a1e64338d1fb47eb1db2d7ffa68ee62fddd32075d01e5"} +{"index": 118343, "batch_hash": "0x577fd196b6826d283b944360f953a7e419ff7b4a737f48b4418de96187937b8a", "commit_tx": "0x3e457325215c4094c7de7a07bed9232bbadb0cb1b39b2e8028a3336bfa097776"} +{"index": 118344, "batch_hash": "0xa2f79e555b1d4437ab550f4c1c5f88a8158fffb9fbe7aad05584950884a5e173", "commit_tx": "0x2cc938cb2cebc844b2d1cfeadfff52f79080067daf725915be636f9e0d57ee6c"} +{"index": 118345, "batch_hash": "0x57a2bf7b57607ec733b4ad0a7bbf710cb94a9aaee305d865d50586bc2caaef15", "commit_tx": "0xdc12952e03f4916a905000b750f48716b9773d57c74a0eb5e5387a1e6dca6ca1"} +{"index": 118346, "batch_hash": "0xa1e7ce270bd13f9ffe4d3c9968d7878a399bb61d28929e9b2898b7dc21e96151", "commit_tx": "0x1f82e5f3fa43f86df43c71f8a03bc3c5751c929b1c99cc0fd4caedb5d962a0da"} +{"index": 118347, "batch_hash": "0x8abc4941afb8759d9840fdf1ea6d7f7d5b2a6d991f946f3becf4973d895c8aea", "commit_tx": "0xc1683d440966944a7ad297c42411c772a024c9fb76b569c4712dcf3a19fb78d7"} +{"index": 118348, "batch_hash": "0x3cc9963574c79fb622d0cabeb8c0e249bf8430316b7871498d8c3829a29ae592", "commit_tx": "0xa184a3fef49adc43ead046dfdce48d252f0a6a7b8f3eba0f6ac4fd0691536d48"} +{"index": 118349, "batch_hash": "0x33230c6da5396544e673013ce1be229684320744f924a88392e90e2f8c554dc3", "commit_tx": "0xe88354d1c93cceea9098294d8c76b3dad015d10bab69ee86d258b7deab48cc90"} +{"index": 118350, "batch_hash": "0x9f7a51e459b02297d35cab499e4ee422913b6fd0ada527c4518fff4dd69f062e", "commit_tx": "0x67f92ff2f6a1e875c37b3173fbfdace819223dc785f555d1e6970cf908360c1e"} +{"index": 118351, "batch_hash": "0xd42a23649c0f67898945fb4767db5b3967f0330aba41a2d6d426d0389505433e", "commit_tx": "0xc40baf701d222d3175e1a0009c2822fbcf1e5ea14607076192949cd4f3f84f23"} +{"index": 118352, "batch_hash": "0x90e57437aa3a565d576dbdd0b145581b61a23c78e9df08a9ecca9b9b7db4c588", "commit_tx": "0x4b2725f5d4e2e746ba53c4295005ae1fe069dc03077f87d32ad85d03b1d47262"} +{"index": 118843, "batch_hash": "0xed549befff4f53ccff1793b7d175d1a94f876410ee1f052bcb7e24fba7ab29ac", "commit_tx": "0xdc9460a517ecd315a0b25e9335f62055ee0809c0fe13e5a70416ad606c432c7b"} +{"index": 118844, "batch_hash": "0x315e7539ceb9b323f476d23dfe6567710ca56190d7a63047d53a4c46a25d61cb", "commit_tx": "0x39186e56f1e17d6d4aabed40ad39e49147aecf320ff2596d63e824d006a8c68d"} +{"index": 118845, "batch_hash": "0xd3575cff1e388ca297aea4885708bf4ada3ff1c858c8bb73a888e0030ad89641", "commit_tx": "0xf0f33c9d5e308e5fbf6339aa120ed66bf6e3514cd636a27b3762cedf70fe2d6d"} +{"index": 118846, "batch_hash": "0x65a7d42f423283c0bb90bb6d06eaead81ad19b05f266e0e78037e1cfafee8645", "commit_tx": "0x856337667408e985a3a76447631ae7e3dc5f3bd568fa9419b7c78f683d8ec51e"} +{"index": 118847, "batch_hash": "0x0fe4f995c1fe02d38e521bc8fcbaed38ff35e412ad5917a2fd9b79ec744c1aef", "commit_tx": "0xa4eb09308d9a572c02a00a58e041a526df787dcca93c6a02f247566980931e9c"} +{"index": 118848, "batch_hash": "0x890c9cced4f23908490f7b973a765c2619dcddb0a9fc276d496a06a433f5c040", "commit_tx": "0xbb5a4b8e5a69b8f71cdb8edd73bd436afd523ee413fb840e94cc530a3f18cae4"} +{"index": 118849, "batch_hash": "0xbda4c33deefbaaf15d95347ff921bcdcf29da38b90829c48a4941d601f154222", "commit_tx": "0xde6f5104e0580560d44f1c65d6612a68bf7a60f83129811f933291de50f5b531"} +{"index": 118850, "batch_hash": "0x176290330082c5bf21bc072683b4bcb9108e75e99e3805a31375345da1985d24", "commit_tx": "0x6aec8956ddd4004633aafa0f8427fc0cbb7f27b9fc18637125e3733c497a28bc"} +{"index": 118851, "batch_hash": "0x71f825eb2c835a54fc6366d05436a1e12d39744260a372e3cfd0f1c25e065325", "commit_tx": "0x988b7776628f0aa32619964abd34a2887b1e274636dd7534a775a2f7113dfcd0"} +{"index": 118852, "batch_hash": "0x89a44785022b073642b8a4ce2557a56e6833de7eb75bcf9c12b8664ea81e1697", "commit_tx": "0xf374b472aef4afc6bcadc85be70f460da9de92093a9121ed4603c8045ac5819b"} +{"index": 119693, "batch_hash": "0x8a7331316693e75f852fb7fce148178ad08ba171e8c5361379ee8852cc3084a0", "commit_tx": "0xc5f797470409ecb7bb3a6f400e752bfab8aeda062c21d12edee1625b6d9c3dcc"} +{"index": 119694, "batch_hash": "0x821ea4404a15ce048051f0de4605ca0c35976b45ce932f0dafaa35f831df860d", "commit_tx": "0xfe25b0da465c414ea2cd4f64edcf9da9dab3324fbc254dd96122f053920e528e"} +{"index": 119695, "batch_hash": "0x831ec2036e6412ad01238da3ec38a366a9dcab3764c89e2df1fbdf95b38d89c1", "commit_tx": "0x6e9f027cc8a7d005c643b373a7cc96db7629050119a9f34ca07efc95c8d1afa8"} +{"index": 119696, "batch_hash": "0x5c91ea3d95abddcb5eea567cacf85a1579d006092d8c78045d864ffd9c043a5a", "commit_tx": "0xbc9f93a9817b107a72c6c697e3b8c09025e31c620f0a73f664110873e7709eda"} +{"index": 119697, "batch_hash": "0x5ef4d0e803ceb2418ead15259121b30541999b37a0cc8cc7b23784e493489925", "commit_tx": "0xd16cc614d7d367506ea9fe4b571bcd103bc156f6d9307509e9b4d46d3116d41c"} +{"index": 119698, "batch_hash": "0x7685ee2cf7a84d71dcde765c89c8e0025413e874aded9ccd6da477869e117dc7", "commit_tx": "0xefd276b2a517b6fe11766e748a262a68b11345fdd1f997ae5a6bb846712f96bc"} +{"index": 119699, "batch_hash": "0x5b52a3a7b9634038f2f13e44bd5ea9f2399abd53fed337b4f9ac15341d75c24c", "commit_tx": "0x7cbf60e3028c459e1395a4c9a17c3021de3b2c41b86520ee3856cebd19a30e36"} +{"index": 119700, "batch_hash": "0xf7114007f7929bc5141bdbade7539d1d63f35269f990b723423c0fba6dfbe70a", "commit_tx": "0x92a415e217d6971d14aa3e34d398356f33731f0e86f902dcf7fad1df3388070a"} +{"index": 119701, "batch_hash": "0x45f6265fb693499f65a44c9bd89d8e6a972e0e51d37f5a342f50828fd4edc8eb", "commit_tx": "0x449d1a8f4ffef8f18dc31094c0cf2240949ece280ac4ce23aa2b6e40a1fdc4e4"} +{"index": 119702, "batch_hash": "0xe8d3c74ebb336feae3a1da9e4074063840c11a89ac85c104a6a146fa3037ff55", "commit_tx": "0x8fd4ecc3cdf2d87eaf8bcd3b74373adc00edba204bfcc1c0fada5d62217e7d8d"} +{"index": 121843, "batch_hash": "0x89aa0e6ab8d2345c19522628b8f5b05530c971afc849d4578485060cb1fe9254", "commit_tx": "0xdac5b8a2df1bf34845434f90d8d8ea0acb29658ed37e9db3d7a4303729e3edfa"} +{"index": 121844, "batch_hash": "0x7819ff51143a8aaa72d937e35f881004c5d78266c53c63459e5cb27a7650a4b2", "commit_tx": "0x1916ea82bbcb7ec70e6848afb91cb7f124ecad03a4202d0a489400cdef372930"} +{"index": 121845, "batch_hash": "0x089661b72557db5c32e121b7b41fa1831b377d8d26e5425faab846963cfe98e8", "commit_tx": "0x063d460dcb266f825ac5a94e36bb8d5b5fdc3f8ec894b04b943ad0d4d3eac831"} +{"index": 121846, "batch_hash": "0xa0f85953e06a080207147654da8ea41aaee607b6e63fdc46072fedc4f87637ed", "commit_tx": "0x4de67ac3c546a50e8c7f1c6e35b87c4c6656c28aebf13a151020c69dfa9f6c78"} +{"index": 121847, "batch_hash": "0x0af9d14b41d181535f1047270df79d840cf41da0f6b970ad142129e5c6a30541", "commit_tx": "0xe6529226eafac36907b2af96bf95a25077ff2f4fbf75a7dc486ce67ce77ba355"} +{"index": 121848, "batch_hash": "0xcc10ea0b50d95c59341caeac0fef36ac1006085b20849cb62833fe4891887121", "commit_tx": "0x7c8e967f433083fdf181cfbebc1d2cbbfcec54b63be96352cf9aae2dc380c146"} +{"index": 121849, "batch_hash": "0x478cb3c95a6fe0d010efc31511de26254cbbdf8d3366bc276e21754f014c539f", "commit_tx": "0x87dfe513ae02c85e4f7211b6f2db70460189ce0cb84965eb7e53ff10fc170e87"} +{"index": 121850, "batch_hash": "0xdf1bfcbbc27febb49d8dd544ca4ffe2cfe59a16cae4292eb0891c7b4e956810e", "commit_tx": "0x579cafc7c7ef9533f16ee4cf509f2e97dcdb0caa29a20ba848a168177a0c62e8"} +{"index": 121851, "batch_hash": "0x8797a0c44348c4f84968dd96fdde82fb32059dbb21821c17638a342f25fb009f", "commit_tx": "0xf72a86e6f419fd28ccf83dc358b91af1c53925db530ee32112370938025cc70b"} +{"index": 121852, "batch_hash": "0xce14e9ac07e98fd20fa87708b03203bba34bb30513254d937a6a8b64dea31e0a", "commit_tx": "0x391132b405f8cc85c7ebcfcaf83141c03cb4cc44465c21c871a4d8358523ece5"} +{"index": 125643, "batch_hash": "0x68c961bd6d4abd0c88a02fb44ec15f0e26662f5e33aaedd8a46dc85943681a11", "commit_tx": "0x1d8558bc02cd6334dc2d66196591df375d67a0e7fea8734aa3e8d81c65e3bd4a"} +{"index": 125644, "batch_hash": "0x3392e042d98c9ce743a40e1e41a10cd1b5f8742b567897f09c95a4ce0678e4c2", "commit_tx": "0xeed8f5bc29e156dc73e504da1fcab0616a8d104fefe9e6d078b926e6cca05882"} +{"index": 125645, "batch_hash": "0x91f5bd9bf89cf695d7b1e1194d059f0b260fb1637869865534e2ad2ae4124c2d", "commit_tx": "0x22053b21c86c844a382688fe682acb7a149f99b0b27b2a8db5c2b936970ac62c"} +{"index": 125646, "batch_hash": "0x239e5fb2bd8f6ed40a8b8da3555ce5bb1ee28628cb65167de650734351f1205b", "commit_tx": "0xb5451ba839e3de29a637304e657a8e892dffb7822e59e3ee444e9591a451dc63"} +{"index": 125647, "batch_hash": "0x898363279d343d542d92db16387d70ffe43ea777a0a3c250d813c9a46c5d7df7", "commit_tx": "0x46529bcfe3c6be15cf2e11d38f466ba856a252a1458d63af86fcfe724c641670"} +{"index": 125648, "batch_hash": "0xad09c652a16e18f7cb3617f4a24c51293a946552ff9196354eb6f132bf3bb931", "commit_tx": "0xf1c8ab636e2348e7d6388b4d39438f6807d942f72eede75b4e25bf0e34edc6fa"} +{"index": 125649, "batch_hash": "0xf71bd1b2e9ee472aaa6c26e29f6d0bbe81ee256d40380f19cf6dba45f1b940cf", "commit_tx": "0xfc536d16a764de3e1158e193b169c61dfd39c269c49ea457b6b9b68c8645343b"} +{"index": 125650, "batch_hash": "0x625d2526558096627398ee613889822be15b04d6e2dc6cb73718eeee0108d6d7", "commit_tx": "0x0443a217c2a1ac90cea87f3c9f463d499bf839c924a70333f50aed2132c2a9c6"} +{"index": 125651, "batch_hash": "0x8bdeea7c68cee1c578f5e07ccb55158e9341095e356e5933d97d64bf9334e5e6", "commit_tx": "0x55e7efaa218a14514ea40424f9654959fcb754e8c6c6c74650f2a61a1af75e59"} +{"index": 125652, "batch_hash": "0xc534e172d597a1546005b4f4223d2ea0ffdd2930d9f4435c948f8f30801daca7", "commit_tx": "0xebba9775c8a0807bafb7602d2017a8f16b9d8de326b775822b719aefb5a9f14e"} +{"index": 138853, "batch_hash": "0x67d451c73cb5bf9b4df67a929d75cd9eacd3549e65f15c4d849ff3022703102e", "commit_tx": "0xfb3a501bb72cf3435beba2c32ebacdc70d19d538b139c2701334a0896f937430"} +{"index": 138854, "batch_hash": "0xcac22017ba283106da8186fd7ab827f50d823d89b68e89cfbc360f12ea5bd249", "commit_tx": "0x97c47612112ee5f3c5894595540c11ee67723d5240cd6f6a67118a1aee65ae6f"} +{"index": 138855, "batch_hash": "0x536e45a66d97f0b309b992adcbf79b107ef4ab1dbdfb24bdba3567b22b152536", "commit_tx": "0xbeaba74738b6f751855feb72160f8ff0aa14784ba6698477c8597f6c7f5ccb17"} +{"index": 138856, "batch_hash": "0x3091a9a8260d882c125da50298609ee1c0507bd96865fac622002b182e00a609", "commit_tx": "0x329923737bdcb1801ed645b755d8d781409625e2aa6183ee36db9f160b2ddcbe"} +{"index": 138857, "batch_hash": "0x7b8fcf9c7879e3659525749d41f160a2c6621ce333739ae8a57075f2c96570b7", "commit_tx": "0x07dccae51bc870af36f28b4004f51fe0533fc4cafda5d88390cd81c542d2ce24"} +{"index": 138858, "batch_hash": "0xada47889a2d682c95b0c3f56a0a03bc8df2c15c8b8d0fb61d48d11614bb6c5d6", "commit_tx": "0x928a1eae242c4346a93fd29e971d5b6de33a056c2a044d1b6dfd7e45df4f6495"} +{"index": 138859, "batch_hash": "0x2598a16781fcda16c6b4aa7c99e0fb60b4e7f86cb1afdd0be41dd83b10521f25", "commit_tx": "0x6c51015042ee56161439d13484589568a69d20900d87e00b5124a590db47f64f"} +{"index": 138860, "batch_hash": "0xaae96de9a3514c44fca01ef6035c88c02ca782265e7cdde416e5edce3b527441", "commit_tx": "0x657de27de6554f11928b066c65a9848df5ba563c2516c70568cea6573197a31e"} +{"index": 138861, "batch_hash": "0x0e2a3202eef8c7d9cb133ac1a92afb4c7ee5405d95f64b108cc2dfe8370e15c3", "commit_tx": "0xa0adbe26873b96e213484c19e4f5efa907ae754644c94c62bc265363d8fcbc46"} +{"index": 138862, "batch_hash": "0x15a4aa639416c1b9784a9f359b9a38c4dd079dac8d4573a020641eb21e1b0c6a", "commit_tx": "0x81c04fba2bb281a191b18525ca527d4096f80ab7f97c39d54cdbd178d22dce4b"} +{"index": 143943, "batch_hash": "0x77c41a7e6446fb5ec9648e2a37c216895190c3df247aca1eccb4ae754a36115d", "commit_tx": "0x163c4b60372467f4de13351a3ff54db56466ccbe445c949f8dfa4cb6b96b7083"} +{"index": 143944, "batch_hash": "0xd7935de1e4f1d0c4ad127ce24535d1786b5e929ec418fcf796473e0e371f5adf", "commit_tx": "0x83f56b5a264c0b68297c2392be4fddfc22e08d1782ce2d1101e7748e7bb6c90d"} +{"index": 143945, "batch_hash": "0x6e1e5d850c1d9ccc626b1659cd6197298bd7939c96352635679b59ef393cbe1a", "commit_tx": "0x59e64589f5339450b3abd9a5312507ff12504388ce7d18284a479b86539fa5ef"} +{"index": 143946, "batch_hash": "0xcf709ab03e26beebdeca2f6d2b92029e1b8e37373bf696b8f145807914a3728e", "commit_tx": "0x982dac6e26fbb393c7a9c18a14ef1b0231181eb610097195a6d50cafa5d78baa"} +{"index": 143947, "batch_hash": "0x0df6fbe8264ea7941f41a1f04cff3188ea494cbec2d99a14df3bb4d9472aa941", "commit_tx": "0x57f6830681a2609f1028c206d8cf95e34de1ff6ba7e64f34291106ab39cd5377"} +{"index": 143948, "batch_hash": "0xf00561304989f798a1cf63e2bb0387aa7356e6b2879d0f74d6151aacb40ec3b8", "commit_tx": "0x1daeda09d36b7af3619b9c05a96be5612e2de09e936ca67f29e695439a4a8d81"} +{"index": 143949, "batch_hash": "0x64530c0099fea9669899a5e4a915029b250a95e57ba83f5e90b2b10b5ef634a9", "commit_tx": "0x3bcc376c70ba70e65e2cee955fa82d1775346a05956d97eddb0118e9fe9c2a6c"} +{"index": 143950, "batch_hash": "0x498944fcb7a8715c863f6dcf9a3a051ca2c325ed575444a340030d4f37fb05b8", "commit_tx": "0x6e06d4c28eb9a03fa2c37beff1426a2d25662cbd16348d6217e75060e0223c2c"} +{"index": 143951, "batch_hash": "0x24f745da1b336a0a18d8dc5ae5c111f6dfb555eba189ab2d249fbf109d4a8b54", "commit_tx": "0x5509bac96aa6817e1f1cfefd14ff8168340d90c5286a32604b3d891c0532bfcf"} +{"index": 143952, "batch_hash": "0xdeea39195d1b6a0b96cd7e97e7704d1268e811e053665bb75b3f5baeeb077ba4", "commit_tx": "0x7b9f11bffc703d3d32d1551eb910ad656633db5f7651f022591068d9a9d5a807"} +{"index": 144023, "batch_hash": "0xa189ad0d3debe2e5c5686e7c93b64f807d02ffe8c96fa87a0df6d59659ee823a", "commit_tx": "0x35c91149dd33c7e5ade4d897dbc484c276d2a43601f52a651902bce93ca14b2f"} +{"index": 144024, "batch_hash": "0x20c6f6fb71a374e82c7fdd569533d5013ab1443b41a43a8ebc92fa6ffb785cf0", "commit_tx": "0xe8c3c00461475f862a0fa24bebcb09946ee75aecbfd35d7a2b6c95af7a0a6f9f"} +{"index": 144025, "batch_hash": "0x7b7e5c8aa04debb973b4e6a2bb2f09f0e17093fa131dd9b07515b91565ff255e", "commit_tx": "0xfe8aa8538445ac7bd4a843e59e77e9ce3c9c4896e429c359796f1c38375b289f"} +{"index": 144026, "batch_hash": "0x1b8d12d9527f8b407a10a5627120e75b45e41c3100666223c1573f76c547dfcf", "commit_tx": "0x9bc523c24da0d3b87e81376b35969b1852013a5a681e073768229cedd9678673"} +{"index": 144027, "batch_hash": "0xd2bf3b3f2249e42e6c78c84992d015adf89b2ed72f33960af02f0704b30549aa", "commit_tx": "0xad3ddbe369246d77c90f144889124ce8dc3cfc43d3942ee3307e27b2fca89974"} +{"index": 144028, "batch_hash": "0x951ba921502491252b384af155d6aed2b6de068fa9d6b093080c03177e74dda4", "commit_tx": "0x754539f73fb4ff186a8300ce20017832d4277d6a7b24759eea8520891e9532ee"} +{"index": 144029, "batch_hash": "0xaf26f4d8775c27d3d3552f35afa88a97f2837648132a64e403b7f24474b18ab1", "commit_tx": "0xf02a827aebdabdf6acc14faa885466af4be2784ca252074102170a92271f443b"} +{"index": 144030, "batch_hash": "0x0f46c67252b4777d2ec844ddc927de17597b48a6229ad6dc03122f725c0b793e", "commit_tx": "0x99e8c8af7167a2b0a66a404f0b6cdb329e1a31b40416147e36f368d19da622a0"} +{"index": 144031, "batch_hash": "0xd1369a3e4ab4bdf911646c5700dc8a968a6328bde01eecea3625fe5b7102b564", "commit_tx": "0xc90cc0a5632f99f82f5fec25881adcceac83d787b23475ef1480ddc7ef5494cf"} +{"index": 144032, "batch_hash": "0x62812ee2e89949f9977cb079d6696bb301fb5836fb7c94064e7d1be343d3d29c", "commit_tx": "0x47f0675b70753b5714d0a341fdd7d9ea071f812477a43705ee0a25d831c237d3"} +{"index": 146013, "batch_hash": "0xa53f6419d58032b992ab66f75180d5249c637909ffae36dd34c5cbe648304f58", "commit_tx": "0x0b07b98a9713eb450bc4e9ad3eb811b9995c6a38f7633c24c24f9d5cbb2d88a3"} +{"index": 146014, "batch_hash": "0xe45cf4bed12944928f08bbb0023f0de60b6538299545132a9f3f5e18d5f4949d", "commit_tx": "0x58c14d30e39aa419e5b76b839611d01a773410c220d3b6101f8af89047e74a9f"} +{"index": 146015, "batch_hash": "0x1ba02d7c2a28c75d4af94ef3f23234da16f3c94453b3630c359bdf3dc824b50b", "commit_tx": "0xda5d643ff0e3de50114ef0a2a18a923338da87d4a9aa8501df340a61cb0c4745"} +{"index": 146016, "batch_hash": "0x9471350ad2f1bc00cd61b10f64bfb825006c7f399fa9479a46648cbd666b9dc3", "commit_tx": "0xc3d03b029a1f565052e0ccabd5ed3a07b6f70c66713c931006fcb1a961b89ad3"} +{"index": 146017, "batch_hash": "0xad95592f740c437499e3c0e5071fc2dddf1b76637879153a3e63bbbd4dfe57df", "commit_tx": "0x9dd20fdcb5c59a22c871d66816a4fd49cb371ee5f01520ad63950099f6a48d51"} +{"index": 146018, "batch_hash": "0xec65317520d601abd36b580770c36151c77e3febcb9901bffa81cf269c592269", "commit_tx": "0xda25adbb8f6eb6b9531562959eb1d758beb9f4341ffe99e380b8dabe3692ddaf"} +{"index": 146019, "batch_hash": "0x966118112e39089f8bae223f8fd4ce31fe864f141d68a7582c3346044f9f37ab", "commit_tx": "0xe85ae075bb6eea6defb575f2b25bc5add3ff3af26becb3245c9d5f1f083a1c7c"} +{"index": 146020, "batch_hash": "0xe0f8f461e3746677e8a9e7e76f19b201843ee3b684b347e89cc4c786e90861db", "commit_tx": "0x9af9a3a2b7fe461c52b4585c49383ff6ffc283b7cee1fe6df95d205b20747f32"} +{"index": 146021, "batch_hash": "0x22103c23ad1934f5853fa29ba6db1e2cedb30f16476fe217f5b9a2ac5043d7bd", "commit_tx": "0xacb3031ffc6dd0293a912cae09d21dae1ff9c0d45ea446f61ed5c9ca3f70d5a6"} +{"index": 146022, "batch_hash": "0xbf922479654117789a71fc1d8794057c16bf1c992707b3fbdfb854cee1105518", "commit_tx": "0xbff61e3dc35a44985213921729fcdd96510c18690ae32fed6a3e01c41c4a54c1"} +{"index": 148483, "batch_hash": "0x1db0cf9847d27eee095ae9f2780b52645aab0cd08e4714013e7b9f5d42705e60", "commit_tx": "0xa7e1308ef8eec2049a374344bbb77d67e7a974d106afc3aa19692c77b1599751"} +{"index": 148484, "batch_hash": "0xdf012ec92163f3d2aeb27e8baa607eebe223ed8b40c71e8718e03deee7f6c225", "commit_tx": "0x71161d578f82a7f1158f2de4dfdf6aa9b57eda6b8dfd1bf4f570d799ffc5389f"} +{"index": 148485, "batch_hash": "0x774513b8a73988818e3f4366403beba913f81bfb005c69d3084eb99b22ff005b", "commit_tx": "0xfc94c3e50fee7cc551d32188ec33081df8a0f33ea198f6d1f863059d646ec0ae"} +{"index": 148487, "batch_hash": "0x6a7a98b41f0f77568730d03cd417a331ab0717e1426e7af401323918b874cf40", "commit_tx": "0x1b4cde0e065862f2aab26dcf3d07848eb87e4d913d40cdb95100334ca92c5cd1"} +{"index": 148488, "batch_hash": "0x5bf6e408e6f93bd659090a3a0ea280b415b33668faf1a74b78b910314a31b272", "commit_tx": "0x0835804e9bfd5020bc076eb9a1d684415e44d4913928006a416550f6d671f9c4"} +{"index": 148489, "batch_hash": "0xaf9955d47bffab0d38b1b29d3197e5160bdd14b48a9294c62a16ae5402e8afa3", "commit_tx": "0x9a6bde6b5995d73a3c193eb8708469e49581a6ffd3c98f085dcc177741634af9"} +{"index": 148490, "batch_hash": "0x6a76306ed05877c82e0daeb5f4feb69331ed1bdbacee4d28f5ba2a702336b90e", "commit_tx": "0xd198e7c75103e588cdc22ed006d43130f6fc83f74985edefa969fc961166fe0b"} +{"index": 148491, "batch_hash": "0x85ba38731c849203ba1006ce43ce2dfd40293204beccb77051fbbac72c5cfa9a", "commit_tx": "0xfc930002d9f15f3f88867c0cfd2f493b942e07ea0ebf1a3224ca2f8839ce4bba"} +{"index": 148492, "batch_hash": "0x7799b1147b19eb6aef7db2201bf47e6eb42c5c570d0e9f5f55457dc6ccb2343a", "commit_tx": "0x7f772366dbf631f1055f656fac4eba615b69e7c54efd1bd45b49e3c708424723"} +{"index": 153583, "batch_hash": "0x22f811b07ab647899284eb37636a87b817254e3c9dce892c4ddacea7e8f9c6f5", "commit_tx": "0x3a8e923bb17a2cbb3f716b190850bc8aa1d613d08ca434bee33883097104b80f"} +{"index": 153584, "batch_hash": "0x45de76e6b64bc0fb50a55c21afd5b9e394f6735fce49b22778dbd31330eba368", "commit_tx": "0xc003e741a8b6769d6f41c7e6b39375e783c3f8a7963d58f82033a76016400394"} +{"index": 153585, "batch_hash": "0xa03a0ff2d1a728f437c95fd5309b06dc71d278915a16ed81c47d171869e6d823", "commit_tx": "0xd46aca18234b727126edb66dfa4a8dacea43b992e8e846bcbcc2b28f6ad1009e"} +{"index": 153586, "batch_hash": "0x0416e6ab688b4f4eb72db7d375100ffec3383f35e47821618d1d1a75f704f92d", "commit_tx": "0x1b700052e901a04888b43db008bf7608ef13bc79e86dc328b0594aa12890c3aa"} +{"index": 153587, "batch_hash": "0x66123ae6159d4f5ce8abe922e2a8af5a6e4af40d159e582f12d447f7fb665834", "commit_tx": "0x3dea0d6a0b061a7ca6cf3c66ca20008e3a878c6c715f1aa718f578fee160fdc3"} +{"index": 153588, "batch_hash": "0x3f57fe5a5b8edaa60a1af544798fb50d748f819a386f891e0d9b65702f1089bc", "commit_tx": "0x52391c13ca99e530c8a35b343b4a3dddfad436df187459646c20f08e4ec6c5cc"} +{"index": 153589, "batch_hash": "0x2b83f575973a59ced9a0f1d6859e1eaa3df3c9c3effa1aefd8bcf286ab9eba61", "commit_tx": "0xe92a4cc483789ba846d34d226609164b135431f13e8c3310cdd092bcbcbb6345"} +{"index": 153590, "batch_hash": "0xd2ee93ee7bb7424ebb165830cbe350f9b43152419c5234df8a04a08fb4a461fe", "commit_tx": "0x1b28ceb97efe6c5cafa45f10e335a0b047d7171edb3e542cb078c6578290f8da"} +{"index": 153591, "batch_hash": "0x2cc50dc777eac5f49efe6198c8c6cf5ee73c3fee78a48a1b69ea7dd8ecfbcf4a", "commit_tx": "0xa274410579f15d5fb8daefa084f82f90336f3aebc55a40c931ea0dc0ca212380"} +{"index": 153592, "batch_hash": "0x5d91dfaed3c4a4162590908e9a45f58575a7253a2c3f5e87847fbddb004f77f8", "commit_tx": "0x2034d84b0015b84c237422a9f02da495b43dfca9a5c18f52445784d3d6c3ee55"} +{"index": 153994, "batch_hash": "0x4b73d237cae3128838b7bb161cf1019d22ddbecce3c670842ee242278c6c9d0d", "commit_tx": "0xfc755b68571b105b33c7f260ba9ba901710206fd5ca4d242c0b3da23bef24eed"} +{"index": 153995, "batch_hash": "0xe5e51da11b2cea222904409ad176f380f42dae765e93f75dba4f5558eab493e0", "commit_tx": "0x5cd10f0dba5608c16a7657a064026bbb687e343e0463ba7479dcbcdeb33a9fd4"} +{"index": 153996, "batch_hash": "0x2e00e106d995b49336354633e6b592c75e039300376d6fd401ea6f2a149f2021", "commit_tx": "0x808f68a14be666415aa57e9a6b9adb46a7f0c3c55de0bcfe522e1f60496730a3"} +{"index": 153997, "batch_hash": "0xad008b6717341f84bf5c7371463f96d5da9db30c2cad49628bbc62cdef19a12e", "commit_tx": "0x6740be9a8178b36d6d8b5c5205a35eacc98273017eda35e5a27cc43aba84fb2c"} +{"index": 153998, "batch_hash": "0xf27e85127bd616745b7043ffb3e31c8249cb90ceda7aa010ccdeb6df011bb014", "commit_tx": "0x6a895f02f09699f4da728b6d820c7ea9850834af13e60af228bac321e1778e4d"} +{"index": 153999, "batch_hash": "0x3916800655bce31b28fd04ba1a9021bad0566669bf652c8f5c3e35fce20dfc41", "commit_tx": "0xa0b1a8f54e95867cd54f326fccebfc37324265390be286e9fe891a173d4073f2"} +{"index": 154000, "batch_hash": "0x019aec56ce20179211f06c7b303bb0caa4fcfe973705000d40ee3a3a7afb2113", "commit_tx": "0x2ac011e1bbd303f28bcffff097fb250dc7987050ef67df37d68939b8152eb224"} +{"index": 154001, "batch_hash": "0x09c403da97a196211f64fbdb9a93042d4d60f638172bab1cef31f620cb81dd7b", "commit_tx": "0x4f4d798f066cd58cf476d81f3fa9e68053db9a5a73b7993cd15401db7447a0b5"} +{"index": 154002, "batch_hash": "0xe1f292cb50b34a6f5030e8d3fbe65f9f05ea182afa1215d2a23dcd1a672f524e", "commit_tx": "0xadc94c67a8b70ccc789b28c11e00d0bbf5a887a949fe2e396d85506b2bfb1d72"} +{"index": 155963, "batch_hash": "0x6fa0a57c2ca668ae8b6429de9b885569809019122873544f3d6213a1afcb37da", "commit_tx": "0x2debbb68035433db22ea6cbb04f6ac6c2b6011165d4dbc1693fc74dab49b63ed"} +{"index": 155964, "batch_hash": "0xfc9a2557652f137a2b3d21b3fff30b97889f3646fbac167b5b76910c0c28af58", "commit_tx": "0x75755e495961b514a350989f3ac3505ed183943bc5076b9bbb3afa1ae27f5a20"} +{"index": 155965, "batch_hash": "0x3e6a4427062ee3b3428afdd218e4d163ec14733285a7361cecd0b69101b051a0", "commit_tx": "0x612210134a8d286d6e00f863d4136f7c48affbf92a87af2e3e8a773e6bc9fd4c"} +{"index": 155966, "batch_hash": "0xe28eb67e783083d775229794f2c8ee800638e56827b8f9457fe40a80bb5952c2", "commit_tx": "0xda6351ff429a4a1c62ee8228d413f838120471d60e072c41e36c82e6e4daa5c0"} +{"index": 155967, "batch_hash": "0x8910b246ded56979146e30a693b7782193edcf4d2737d7e6d5de7d0823cc5fcc", "commit_tx": "0x06f85c879dcff856c5f155bc6461b4f453d99225b27e79176bb8413e59a79664"} +{"index": 155968, "batch_hash": "0x17803150b8811aacc3ae6a439da8e7d7a44ccd0d2a430699357f17c4134f652a", "commit_tx": "0x9ae81f5739d3aaf51013aa874ba13a4b5e28d987c0931815022e2b2ba2663cf1"} +{"index": 155969, "batch_hash": "0x798a815fc313a9daae6eedcf788748bbc5346f5c747d1691485f356d9848638b", "commit_tx": "0x59a730020862f2fd8c1e1ebc60b70190d17470898f1bc81169cf78e1b774eed6"} +{"index": 155970, "batch_hash": "0x0840aa993e3352ec8e1f8f6299243b0a72026d1614bf82acbb2adc6fcdd81759", "commit_tx": "0x3f608b1dca892fe7be51df883f9ce5c9354ca60f1ddaa5037ebf6b744b79b048"} +{"index": 155971, "batch_hash": "0x52ead2361d6ee87ac0c26cd0128bedef23b59b2222654c7d96bc2393bbba210f", "commit_tx": "0x3cc1a7fe1a651331cc2d20089802ebfd7ec41281edfb3cea3678352aae5fa00b"} +{"index": 155972, "batch_hash": "0xcbe02b593e312d8dd15d02d84ec3f172ad500d74b8bbca969f457d499769e3b1", "commit_tx": "0x4d7e849086c31c2f17c70f041db76453c50e4a060eee2cd2f3321118b3aa9fd9"} +{"index": 156513, "batch_hash": "0x068b8ee8e7df6483113e4bbceb1a21a4e2732e194cb7e7bb26e82740957f3961", "commit_tx": "0x748222208f33a26dd346fe87af2596f73a971bb13f11f684ad59d5af9c68cf43"} +{"index": 156514, "batch_hash": "0x6024d7a591a19c4494213dd16b64e139ed62c6e86e8337878d27769f8ecf1a8b", "commit_tx": "0x35e29fa54e02fe75e62019b24e632e30774b90f4860fde056debbf5b7d4de575"} +{"index": 156515, "batch_hash": "0x674a8f450dd9409854f2cf066d2ebefe6931965e36ef2b75ed67e1c7867d4a99", "commit_tx": "0x3b3eb508113286d8db6ebd0f50ee138e37b9f2386e621bdf5301699602454e73"} +{"index": 156516, "batch_hash": "0xf3179eb64a3fa9454093b6f02bee2358725683de9be7b1c684cbe1e7f66fdde6", "commit_tx": "0x8cff6f2a9fa516fabf0ff8d2edd57ff940f7791234d6dc79bf7bef6d88bf763f"} +{"index": 156517, "batch_hash": "0xe2b6edfb4840d3f89a826ab5b2babe8946e4013c8b4cc94ded65b7b48ae48710", "commit_tx": "0xacd0548a4044a1ff709ac73cfd9dc2c146e2badbe9a06f15e620b834c7a68e2b"} +{"index": 156518, "batch_hash": "0x68346a8edfe2aa0a459f1b3a208c9e933d88a7d10fa17cde302d177049934d86", "commit_tx": "0xbecadc1279a64160c8355a25a5a3ddbbcf1189e420f1add5464c5ccd19b878dc"} +{"index": 156519, "batch_hash": "0xad0ffed678d4c2635846491164841352a422e46cb5708ec75fc48d90af5adc8d", "commit_tx": "0x2107dde4630ce5c798dbf0543ffef9c0df6da8199371c6a41277423bfa6b1831"} +{"index": 156520, "batch_hash": "0xb062d48f34ae80bf644254e0225851f29d6ea707bddca3d420ea77bf20276fb5", "commit_tx": "0xf684706f4c5f8805948c5ed07a78219eaf7aeb1abe7f9ae6355aa31e84a1f3fd"} +{"index": 156521, "batch_hash": "0x0b0bade5fb37f8375b433bc253241c27d7a3f4be77a0de9a91ca06223914c14e", "commit_tx": "0x94b89efb8e4eaa0a91bed92ab69335084212d869a4dbc9fa3c09dc99a06e47c3"} +{"index": 156522, "batch_hash": "0xa16bc536bc81b6b304ce73a86c03f90ddf7575c99dd6c32cce1578bceb6145a3", "commit_tx": "0xe9e13aef1da6d169a627c79c3b67cd0b86216eb123857822ee4f359111be3828"} +{"index": 160363, "batch_hash": "0x71cebfe68192debf9a4001ee47de36c7b029667a202410d113cc2b598f9e4484", "commit_tx": "0x386ef914bca2b1ff57089f14c2b89341ddbebe23408a3ed373eff4f7a35da8ea"} +{"index": 160364, "batch_hash": "0x18399a5a724e1806fd2c3f8ad0507076dcd0395a53f49dba6d7726b81a8c74ce", "commit_tx": "0x35428c008ffe317b63dbc4eb9a5c5c505e70a02005a2b1ad104a4159b98742f6"} +{"index": 160365, "batch_hash": "0x9aa71f4cd6fabb7b997e2e4ee921ccf81a924ecc5505dc5770530a8b4e6c5f5e", "commit_tx": "0x70e12937b3bd6750594f78e23ea922d799041b686312734acbc0b70b3a544a94"} +{"index": 160366, "batch_hash": "0x337f5bc921447db8a8b76df49b169f6ce2854e887d9fbc815709e13d5187afa8", "commit_tx": "0x5d706018b8f57bc9255ba290234b50f5b6b915126cc974f233c69682047f4ef2"} +{"index": 160367, "batch_hash": "0xf839c60910b200e4a69e33d27957424a784404bad423f78b84a7571c94ba2e0c", "commit_tx": "0xb94047a04fb86ec34d6efdb9663d2ed020f8eb1c48208a6979deedfa7a84d65a"} +{"index": 160368, "batch_hash": "0x5b9b65d35490b4d6c124156e8555cbcfea176378ede13c4588338dae48e5879c", "commit_tx": "0x0526f2aa36fa5818edb7fb88bba7b8894bb3462c0bd9bcd640939c5cf6320b52"} +{"index": 160369, "batch_hash": "0x03bb46e849a1da9290ea84ab118cf020698b7f58d701a17c2c6f9bbe3e5ca86d", "commit_tx": "0x63a9fa1da15d759d7b3b432142b63a82f630aed3034fa32215ef546900d26bfc"} +{"index": 160370, "batch_hash": "0xea424b1522477fa99ecac4081e4911d6fe50a790f1596b24ae55a26f9b19a59a", "commit_tx": "0x043623a06e7069398e30a3a37c7f92724de1bca1c4cad71580d4e0a545ea6c05"} +{"index": 160371, "batch_hash": "0xb5f21dc5cf91e2c4866a7c43085ff70b6bc79665eb2a89bd29c31f7f2ad5682e", "commit_tx": "0xac1b635bc5c92609c84f294c3f1f5f4ed8613f8d8b21728fb3a77000747725f0"} +{"index": 160372, "batch_hash": "0xbd78180018d633fa9bd0b90302878c2ab4f17c0a8382acee4a09c2000d1910d9", "commit_tx": "0x3c8ba39ac1271914acb1ee1766634ec0f2dd2f9e2d78620f736f470074d0f887"} +{"index": 170623, "batch_hash": "0x48adfcd91bb16bfac65a94aa3dab32c5b9124d60a8563f9e4b8d906b4a1860d1", "commit_tx": "0x01b5be9f50d3b0a03a9f3c9fbbb5da5202398370c9474779702d7525ecdbb347"} +{"index": 170624, "batch_hash": "0x01f71fc83b2c935b72537a70654c70bd34b7e2a17662e5bc0a5221e6aa2369bc", "commit_tx": "0x3ae0da3596b64284bee4202a303673e18793fcfb276cb86dffd93c676178a654"} +{"index": 170625, "batch_hash": "0xf7a90fac29c216ab5016cf19613168a8a0030df9bfc50f01682761338535201d", "commit_tx": "0x6bd4c8e30b9ac9d6213c7cf1c9a5e14b5c4882ce0019b222970bd4853576987d"} +{"index": 170626, "batch_hash": "0xa86c7d1cd703fba0e3a943aa696110b3733b47749277a4d230b750323f5e48d1", "commit_tx": "0xa71b0d3e736ab921766e86f8f3b7082e168426c40f418d0c1d4364c1345c8937"} +{"index": 170627, "batch_hash": "0xec01174a5fc4e5bfc374060fedc39b0353321a87a876a781a4c984b4781cb74a", "commit_tx": "0xedcab54a7e9726ad05f141dde014a0681f33a9c517bdc9b3832ce525f0974c9b"} +{"index": 170628, "batch_hash": "0x3dafb6dacdfb9f53ac58d28e9827e7b55e2724a15ece14928cef826bdb5f4fc5", "commit_tx": "0x68d5f1e9ac80edc46cc561c0b16c7caedea89da7a2967eb402cdb133f0775041"} +{"index": 170629, "batch_hash": "0xe0b5c6ad86a8933b15800eea2d64e5fca181fe66fa7a1355a7bbac5cf879baa6", "commit_tx": "0x0979cd9d232d37f22387a79bfe966315d1bbf1eca69d24d028d54201a81fa9dd"} +{"index": 170630, "batch_hash": "0xba49b31548d9071440c7e7d98e478f2e78494e25c70382777160d921b917d2e2", "commit_tx": "0x7ff7cc0134e147bc531eca9bf8de6d0d7cd179a32254b122cfc44eb765f7b3a0"} +{"index": 170631, "batch_hash": "0xcf90b67d8c5cecf558a60263c9faf874ede2660de2f13a8153a39bb1e017dae0", "commit_tx": "0xc7e2861894eacbb5e152c530c012ee59f6f829ccad4b2fface41c9f548bf06ca"} +{"index": 170632, "batch_hash": "0x67868a0eed6b4f620da34e9824b18b8aa6d9f79790145ecff8517f35be9a7c55", "commit_tx": "0xe42f5f7229395298b92d889177c998b2d98f1cdcafa1e1801e57396ad9ab404b"} +{"index": 171172, "batch_hash": "0x97dced595e307d5547c251f2109d4cf40a5e956702e021162fa72259ea2fe0db", "commit_tx": "0x94046e71b8537c60bf712b1d4346848be39c7ae1083c79b9efc3cf682e022078"} +{"index": 176353, "batch_hash": "0x6ee6132d9d9e2839598639f0a2fbe2078cb0b2a37efad2fd69721ed6fabecedd", "commit_tx": "0x9e077b32a597ec97d4f56adffcf7e0fe497617b70dc33aa2e46f7c17b1f4e73e"} +{"index": 176354, "batch_hash": "0x40a311bb1cd86c2b908cefa2bae7da95fee4c8886b5368090c6763df0657a555", "commit_tx": "0x98930ccbe6ee45e74b9cf3141144086b106d434f48bd59977d1afe5710d7228a"} +{"index": 176355, "batch_hash": "0x7de908b72a22aafa60583e1a1613efc9532aac85d9b23748df6470c587f2cb5d", "commit_tx": "0x71c15ccc22df89cb27795c6a3b1501d0e14f18350faaabd5907547059a3f1239"} +{"index": 176356, "batch_hash": "0xddaf3f7d0074f6f924785d7c451eb83352f468e506b18b40998cf359475ec7ba", "commit_tx": "0xe72f4fa4827e7333c95cadd776d94e7a78f8edcbf4a7b86cac4df076b98f2f0b"} +{"index": 176357, "batch_hash": "0xaca2377dcf2b2d67c93f11072493165f6e4009f6b1f9d92cd70e9773d210a4b2", "commit_tx": "0x7d163cc4c5400328d34320fbda6d5905dcc26005fc3d67c242abddc601480039"} +{"index": 176358, "batch_hash": "0x143a5d774fa4151d87ab80a552025f886bd92d32b0109d4f2c1518e77b900cba", "commit_tx": "0x3e9293871d2e1974ecf3b27c8cd9fba0e382055d29befed77fbbfd64374fbae8"} +{"index": 176359, "batch_hash": "0xec360bf91adc16de820cb868d511b9747fe9d43416ffba0f97c21086f9e0bd7b", "commit_tx": "0x98312c2c76d2fbf8d9aca67281aed5246e41cae03f478b57576bb50a15ff4aa1"} +{"index": 176360, "batch_hash": "0x27490a1a078bf3c101fa5f87e1bde9dd70c7d1b44ff2ec7d0a9373c3952c9488", "commit_tx": "0x8d3ca0d06debc5095e4a50d3fe217ea3664a4fd417fd6971274e2f38b2ee67de"} +{"index": 176361, "batch_hash": "0x932876f3e82ba17ce2768f95b1636217736465109c0fb938d960ef2afa426f8e", "commit_tx": "0x73140cf277f82aa975dc0c69be1029f6038619da55e1b17893d5d280b49d51e4"} +{"index": 176362, "batch_hash": "0x21bddc89a6fced07fee9b5e6bbbcc90507bad6ce21e247694d4b21323fea8241", "commit_tx": "0x39354fb6b7131c898741b2e1797b075f7f696449ce9cd668be1774571bcdb4cf"} +{"index": 182903, "batch_hash": "0xab7fbac4fc9d428589aa3ddef5ccd178a07efe193b4f97324c7f486f41f678ad", "commit_tx": "0x91ef90de2f2d3aa0815ce88f72c940b53c319af8d8e89d3724caa36bb1fde3aa"} +{"index": 182904, "batch_hash": "0xcc50698a906629664b46a1abefb1b702dff6f326f3e5bf21fdfb70cb52bd0bc4", "commit_tx": "0x505ccc8f8c914711a976b61d1db7ec981009a7705db0b2c2cfca1d4cf5ba3ee8"} +{"index": 182905, "batch_hash": "0xa0cf153c4361f62d508dc5fa20b97c1040a62413929f22cea2c0a376ed1c158f", "commit_tx": "0xc8d87e201fd8072eeb79a7ce66a11097e5acb5faeee6cd1a60800c06e480c867"} +{"index": 182906, "batch_hash": "0xe67fa1137f8c66f1494d13c7442969b30fbae93a961d24d66940d99b81d0379e", "commit_tx": "0x755ba1563971fe85fee41903ba4451c88fae83e09381463bbb54088948dfc058"} +{"index": 182907, "batch_hash": "0xdc11e94aae33921518cd3e516dd9a230d0ee98ec86d24accee78b5813fcd7561", "commit_tx": "0xf297b463f25474aa6de00ffbfa786dc2105840fe092a84af51834bc8bf1d56fa"} +{"index": 182908, "batch_hash": "0xdc15472aea7ed23399fae47af6f49cb18871e98139b325631a4303552cd8d298", "commit_tx": "0xc6ca52ab1b89875b36ad79f43f5f68835c1c182907d15b3cd301fa2e88f88005"} +{"index": 182909, "batch_hash": "0xcff17215612fd7a77f3064ee2ebe41c1729e343dc41c7a96351f93a79df20a13", "commit_tx": "0xc375ed525f5df1bc4122e143a50777438c987862168c6369b78a3f0de77ca5f9"} +{"index": 182910, "batch_hash": "0x5a46dc4dcf6b83a0fdb5f63f5a3ab3bf10e3d20bc2d63d294c9f8b6779aa243d", "commit_tx": "0xa44a5d862cdd9e19195d3df3e0a9b558c3086c8b761ae17fa11578dbb9d1f9a5"} +{"index": 182911, "batch_hash": "0x0cedbab7864e031c1729948ef094d47888098e9c974418b628e00801d26618e3", "commit_tx": "0x5cc8d970af0ee1dc80a0f2682186fb2d63fa919a6fa32deb8b19c3261ed3c093"} +{"index": 182912, "batch_hash": "0x3677e2b02129ca0a0bb60fbf40d21d9028bcc43a5de380cddf07253b7c95e8ca", "commit_tx": "0xd4345f185e134411e9415c0c6ff095365a793adef7747de15e686c6dceae4f4e"} +{"index": 186604, "batch_hash": "0x837539353f02de8cd5436d5ca6fc8e8f44d7c278cfdb0f4ab173f6d64232dda8", "commit_tx": "0xfee9acce93eb220b27365ee4c69575b1732b51249b51adcd60dbe9a0be0b8492"} +{"index": 186605, "batch_hash": "0x56757c31b45684eed0b23600b9db9c29c0b7e6b1349a8ff5b9c3c09a78e82c70", "commit_tx": "0x02f7de345354a6b0da4fb4b7583aaa12778a093ca00a4699f73de0fa98df63e6"} +{"index": 186606, "batch_hash": "0x27c61903b39992ad167573a743184c1cf2d1c212e76d6c6fcde4f09cae064a1a", "commit_tx": "0x85f01e05891d23f0bf052814acb98adc678b2c2135bb8cc33cc0c18578828f8c"} +{"index": 186608, "batch_hash": "0x1b2cb4b2f924af0323d53aa9556d76463b1c1a776c6e0b89f97ae4553815cbee", "commit_tx": "0x59fb6a3ecc775fda0bf6e7fd2380210c822c3413b380973279aac1000ed57ccd"} +{"index": 186609, "batch_hash": "0xd3efc9e90e4f846ed51cc2c785a42a17c75800a57de8114efe1f13f78b4577c0", "commit_tx": "0x1c397de91fb7e8a0238027c5dbd0788ee24d177b05dc30f177839d77b1c3b872"} +{"index": 186610, "batch_hash": "0x280fb85d43e52762dac5149193a20bb314c0c13f5c65435c73883f2beecfb273", "commit_tx": "0x3b6649a03113c21d3e26e142169567123fb78e019a6c49b6946650572d7658fc"} +{"index": 186612, "batch_hash": "0x7a292652df67bd16e6b3e307390d810ab46da113ba5ba2b979be352e99195ee3", "commit_tx": "0x4ad8acd266a9f1fd85a42536fc05e2443da54b0fe61b7c85ed3d3f3f3391322c"} +{"index": 188913, "batch_hash": "0x129a7b1025eab8e65e545ff3374837dfdaa0ff58cb08d9fcb5d71f095af3eb1d", "commit_tx": "0x0ed720308b4f478e7726a3999379c52198b255b22d4f16a2de9110ae1752561a"} +{"index": 188914, "batch_hash": "0x7dab8c95067283354a290e122ead6960ce9484f36bf4d62fc17c30d89a432b8b", "commit_tx": "0xdbf369845c726e567adf73362e78d743e6d8f88e711245f857bbe71b1d2773a1"} +{"index": 188916, "batch_hash": "0xf434f1b8b8c7dc9db2f6d5d7b96ba0f9d6b5f020c3ae904d4b45edfefeb49f85", "commit_tx": "0x5995794a16018b57b97cbb6db5b4c5d6473ed38f1aa7cb65577402bf6dcc714c"} +{"index": 188918, "batch_hash": "0x7431a37930cf2a5354dce285d0993af5184f26803183986090076ab1e1087719", "commit_tx": "0x207bfa6a5b06240a4dd5ceb889a62ddc6496ca596a111fb2fa4a85aca7b56556"} +{"index": 188919, "batch_hash": "0x06f6fa98aed559fad0d0ece11be33f6797f7bc2589305384091c4135a4e259b8", "commit_tx": "0xeba44001d35693c973ca42d8baee12bfc64e857b330d182b2545b6369c035863"} +{"index": 188920, "batch_hash": "0x85506c35deb6536a1e958770b55973efee4527f5bce44869896e9ba067f50c54", "commit_tx": "0xb0dbe7967eb3c693b517f3c7f92e0416c45a0e5b9659ad978629172d89b4a336"} +{"index": 188921, "batch_hash": "0x98c3b244b41bde4e4406b91e611ae7a774158382807ab03e2420499c411802c2", "commit_tx": "0x114b22cd97f940a2e7da9254c90407a2b6947f1e7f365671e84edc1a3a5fbbca"} +{"index": 190413, "batch_hash": "0xa336b3ad429a841a43600376433731bcaaa589c3bf3842d5deb38e4a08ad9310", "commit_tx": "0x7c9f24da61dc355b3d43f88b0b6f12b291ef29e01a222518afa7adb40af04461"} +{"index": 190414, "batch_hash": "0xedd87962aa7a553c9ba4f957da2bc3f7dd48b6a8fbb458d80eb0d0d130b469cc", "commit_tx": "0x4e278dc3c689421d35a776ff0340a93df0a5c432cc58ac49487462787bbba615"} +{"index": 190416, "batch_hash": "0x3d5e845ba9fd11175a07cea8de7bcbb724cedf282991f8a880d65b66fdfde2ec", "commit_tx": "0x6320336ff953ff78219afcda745be9cf4fd496302be4bee0498cd13e04a3519e"} +{"index": 190417, "batch_hash": "0x46c0f1747d97b98e01f10942fe329d976f6e1d5528e5b61afe5c8251a8e163e5", "commit_tx": "0xcfd198bebe83505de478ba8588bce9f32406cd16757a9115dbf3266a7efa096a"} +{"index": 190419, "batch_hash": "0x1937f9f1adc09d8bcdf2654cfcfd076eedc8dc6fc7a9687b4e6b8bc166e1608c", "commit_tx": "0xcdf9014847d93dd3a22b1a88d9b05a665a0e4a4dcfab361c060b5efd88b17ccc"} +{"index": 190421, "batch_hash": "0x447293bdf0a78eb788df77fb34235fb171e5d6192b52c0fb01933f75cbbbeb49", "commit_tx": "0xbafa00a046589009a4f5b85f9f250f7d6aca5f7cf349459b76b023cb298e83df"} +{"index": 190422, "batch_hash": "0x9a3da3cb17ccfbaf6def8e0f542c689b924412673f01415b2e5b70948251702d", "commit_tx": "0x9d75514cc4e490984f5cf724135a522afd9c06ea1d19835b4d5cd2268ea4a53c"} +{"index": 191883, "batch_hash": "0x010cb621fb735bbb9be6b47c35e611131cd71bea7de0b84731dacf093308a7fa", "commit_tx": "0x5ab7203da57a81e726decba689c0a4af294c9ae5e19f37e54ed0517d9c2b2dbc"} +{"index": 191884, "batch_hash": "0xfbd1e1a0ef2843e1b35e46e34c831f280177f959e4d63477a2e2e5aec95bbf74", "commit_tx": "0x4c1cb2427ea9bf554eeceb5b30c3f8a9611d77efa045eba73a60e9017c9f3b36"} +{"index": 191886, "batch_hash": "0xde8cdd7397a65078f0b4b93a2914b738e860e5cbd4eefc25495b5856ead2a7d6", "commit_tx": "0xe5c1bf075574a37140bcf822ea043903b53981f1b5c17b97e61c004f3b33cc51"} +{"index": 191887, "batch_hash": "0x54cc8375fc07dcd4a2c8c1d2ae82467e1b3ee662102fe7fb7df1bdc1d4c7d159", "commit_tx": "0x459c05a4cfdc49bcdca1ee50444cc9cdf46d17ec48ee358039af333477dee47c"} +{"index": 191891, "batch_hash": "0x9642110f9e1445a1b5fa05d04a5c8a01709673831edbc9305d7f3b52445e46d7", "commit_tx": "0x671ecff6333512c06b1fd8ffbb6c316f35b61d5e103670b8075e6140d0fcacae"} +{"index": 191892, "batch_hash": "0x7f2dea64efa45867fd5b1d9df5fcf91dcdc8c571be4410aaa287c2faf1c2d4e1", "commit_tx": "0x30b2c8bf750230a48cfc7199ad6ed2774cbc17eecd4f4ea677002abe3735f1b0"} +{"index": 193533, "batch_hash": "0x5bb9ba73c13d46140c89f65a85febd1be3f6f9512c36e45de4a58233b62b39f4", "commit_tx": "0xb5e5bae65919f34984aa2104c2dab3edddd10e2ac4acc4fe977aeec28dd4b568"} +{"index": 193534, "batch_hash": "0xb8d5a140a3c15cd7a858cf022b4d03c0ed39bfbe32709407076d6345b66a3a35", "commit_tx": "0x86017ccca3624e2fa8bf0556db726dc27b77583cb14fac577be5264cf3f30a8c"} +{"index": 193535, "batch_hash": "0x88202a6991233a4926bfadd5c9f11cb0467e513513e2c108ea28ee26dc2eaa9f", "commit_tx": "0x6ed7b3dea944c6f86960bc5b91466c9d54c27a11786d1181c722305cd0d5a76a"} +{"index": 193536, "batch_hash": "0xbf8ee1277d898de19494ffe0ab8a606318b4e01eb55d7ebe951068bd2b778a1a", "commit_tx": "0xd5af1d8bed205f714a47011666bb26c3fab85de12bbac332fc0be76bb6866387"} +{"index": 193537, "batch_hash": "0x60060e837751106b6be346aac30e46e41cdc294c3972cc7346ebb77794207e84", "commit_tx": "0x96221bf5f82885c4ea351feceef30be40c22b5b4fe0ea622ec68bdf5772ccb79"} +{"index": 193538, "batch_hash": "0xbe5e96a5c978248b9e135604265aaf0190558375a0a93b2984d2231d21cb7237", "commit_tx": "0x21c915dc0b133520750ff4dc530187f90ae94642c33d2ad909f9d1f686bd7bb4"} +{"index": 193539, "batch_hash": "0x65f30090cc9244a270f41e6d779bc5ed8eb26d8620af756608f1491c61bd4913", "commit_tx": "0x345734be57387c2e85b4fd2bbd5df75a16ea9c028fd4f6f93a21f7b86066f5a6"} +{"index": 193540, "batch_hash": "0xb151ea71c1211732f2db355fb815633b16025c9f09718210d9621158267a5fc9", "commit_tx": "0x729dca0598bb24cacbd36be181cf252c19b3968a0a17716f516aaba5bf2f7229"} +{"index": 193541, "batch_hash": "0x54da01fefe1d190f5d064f5ed2f53583bbb5c4e5d922443731bd9c8a7262505a", "commit_tx": "0xdf5da94530b211dd0b20d5f4d65205a459cc95d74479c3251ddb96dcedde6f37"} +{"index": 193542, "batch_hash": "0xfaf8eb92b42a043f951e89331f9974bf101c2802c4f3fc72b51ccba94e5e62fe", "commit_tx": "0x5d0f1384cd6b2c38ee109d404296536038e23a35166af94ca3d3f13adf09c699"} +{"index": 194753, "batch_hash": "0xd8df6187d66380a0a17d4c6b051288d7b322cb5228bfad6bba25c4776bf0868e", "commit_tx": "0x9d47aa4a879d24c8569c75a2ad700392bb8eb28099860fe7960fadfd340e1bc2"} +{"index": 194754, "batch_hash": "0xccaa2f9161bcbdd71db8fdeca9e0373e5f60de46a8197bbbce2c4c510f20186e", "commit_tx": "0xef0b5a878340ae4a2b26efdbc6040a1dd4e07ba4a14ef51e21c07d3ff9ecb7ba"} +{"index": 194755, "batch_hash": "0x411f0aebc6770d7856521028e711796e8a71c93fd97ccd6ae14a8ec9ed515092", "commit_tx": "0xe77b2b437294089d96503243ede64f2c663ff4ed90e34f74e54c5dfe18deb293"} +{"index": 194756, "batch_hash": "0xf64530337950f254e71c9227b2f47b0e54325075ac4cf35531c53ff9e41a887a", "commit_tx": "0x700d6b5fe16b6744882249c617ea76ec259e7f460a544c6b4b9a80d053cb872f"} +{"index": 194757, "batch_hash": "0x01c60daf379ad63bec10fd35a8af3b2f539ebe6669d9e4ad50b5c1fb76771a90", "commit_tx": "0xbe6908c1248a4d02c518003e07c0f608314bff287325bec88ca2db25e8d58d6f"} +{"index": 194758, "batch_hash": "0x28331756007a8fc22a6c10cbfa09b159ddf80c3b14a2679b879db980afb49c7e", "commit_tx": "0x6b7ee11766c4155d45cecea7c1c1bc89870719c678d01967776d641bcd816f5b"} +{"index": 194760, "batch_hash": "0xb54a7ce97d072a68d77bf15563bb87594aec0a620786a0585a05af68c666603a", "commit_tx": "0x2a34a69804c637b4c310e9da7eb2cea05028895fe9c8872887653d48a49fa3db"} +{"index": 194761, "batch_hash": "0x48a69f0b29dfc5f629cb406b69f536d6134bedcb321fb4d124fe807de6d7dc60", "commit_tx": "0x5ca330e15186355efde01e2a1b7045cd67f45bf6652691acdc9851115fbfb434"} +{"index": 194762, "batch_hash": "0x7d26ac322aa90422ead5f2ed03cb8884524900e4ceb052a8017a310b8227e9d0", "commit_tx": "0xf2359c981dace201db292a056f1836386ab0422058b82e08f61da2de3e02fad1"} +{"index": 195213, "batch_hash": "0xeceba4dbf16db1f7d50bf6642e438e00aa8a4a8a4bbeff6a129911bd9d788a62", "commit_tx": "0xee0921b8dcf4507864bb6b67a24a83df2dab60e7acc4d9a5e7d1b7033a6ba70a"} +{"index": 195214, "batch_hash": "0x97952a19f553e3ac48b3ce0c02e34ea947f3616c474bf1efe4446cc29d4ef8e3", "commit_tx": "0x1477bc5d38fe4d944a81f07a48bc67e2ec83e6401de2982fdb66215ab93fc8a6"} +{"index": 195215, "batch_hash": "0x26b820523adc066c8c15510708b9c667d92523b18d9b2480b4676aade8d7731f", "commit_tx": "0x4dd82429af3739a61cf3cd56ce0e3b82ee2fc161308a1a5de9e2bdccea254905"} +{"index": 195216, "batch_hash": "0x05bf12f6dfb8a91281750b7909ef5565c75ad83bed9b9665d3470643814733d6", "commit_tx": "0xa19849ca8816e47926eda4aa05a5c62f6c0f8a6d3c45928da3fb0621ae9138ac"} +{"index": 195217, "batch_hash": "0x687a26acdd9e0a67e366459f65721147d18867320643a87bbfb990eaa231d987", "commit_tx": "0xd40acb74e78f1237a89b3db04e51e5efd327d662f3cb1545c8b1b1a1c41bbcab"} +{"index": 195219, "batch_hash": "0x2e4486472a992fe2489131dfcd38ae1280d3a3ff581bb668e076b755097acb91", "commit_tx": "0xcec07aa971d0451b01549d930bd0470017a18b098f58d8f68b2cb818fc72bdd6"} +{"index": 195221, "batch_hash": "0x0c9acf7b48b44a3a2c08ab41416e45d2c5308076b58233f2345c0ef3f939b102", "commit_tx": "0x3703d75871cf185ed4d1c41f394ea7702260dc573e9129084a64e0f87bbb33f9"} +{"index": 195222, "batch_hash": "0x2458fc70070050a292b0e35a2107b5041acc85b0fa77b2a589d780bdd03fd085", "commit_tx": "0x33dc5659fe5e97dfc152741f39e018750d8a7eeb8a80c73f4206c7f4d51f0cd5"} +{"index": 202293, "batch_hash": "0x5ab08f5134f37c36a847c0088c23adbfcde8fd720e446f400a729253350e1ea3", "commit_tx": "0x76780903a3c2dc27033e774631e837377b89416c1bb0a80c11de0de446529c08"} +{"index": 202294, "batch_hash": "0x44d32b0c6981eac0830f6bde05d4a0a5e42dba18d37d2204252d7e2071fde848", "commit_tx": "0xbb8c4273162e6c459edbccfc9e4e3115268c25c4a5d7f07ecc073640fdbb6c18"} +{"index": 202296, "batch_hash": "0x64525e837800ad62fec9b6271a006e328c715c92ea6164083fb7e728ebd4f322", "commit_tx": "0x677fc50bf20a3b528190837ba463d9e08b1e124a4350530bcabbf92f04daa242"} +{"index": 202297, "batch_hash": "0x2070f7e68f763d47dee77aaff00e123cb4f3f0342739acb985355746616588a8", "commit_tx": "0x2905e92ebca6c63cbc164e7dfb3302feb377e10055a54ac8b3eccc5363e16d2f"} +{"index": 202298, "batch_hash": "0xefea136c867791d04ee1e3b46a1d9ffa0ba3a5449f14a2aaa917126c5a20c418", "commit_tx": "0x01076aa637bfb5fda71899ef4f4a805f97dd1190955aa7429e8fe60513a8befa"} +{"index": 202299, "batch_hash": "0xef5be0827e7d8d7e6c0ee823cfa034c685843a5884596b77349bcf281d3f0c48", "commit_tx": "0x994a57278179105fa0ee560d4a27318bbf9c51dc3c6068f838421ec71ec7cf01"} +{"index": 202300, "batch_hash": "0x7a1507dd5e6bf8dca310496d9d532224fa36df2c924c87ddb2dde1a52fd2d46a", "commit_tx": "0xb075b22002320fcae870695aa9590773950abf50ef3568704deaed78d53bdfa0"} +{"index": 202301, "batch_hash": "0xc03fd586a458a814662cff770ddf5228533d1d2679cdfeb76615766df4a17a1d", "commit_tx": "0xadc1df62c6d26242edf08c5c40050b3f23bebe26487c4a5b868b3cf65e17cf31"} +{"index": 202302, "batch_hash": "0x865576f3f4cd0d267bc7ab20289760650e94e3fedef3d4f30f9be17730ce9780", "commit_tx": "0xee8febd9b310d30858027c5aefcb9810695996ebf079db1c6e4efca0648451fc"} +{"index": 205103, "batch_hash": "0x83c5d658eefc2a10481fadcb741cdb5e1b9694ab938b933cd1f4afccfdca5aa8", "commit_tx": "0x1fe0c42c96cf96f94a4c9fd2ce04fdc71cc6e5b7d95b303323189d8ba8beb072"} +{"index": 205104, "batch_hash": "0x994fb681209cbfd4191302ec9ff516d7a7c2b802f62c62ac5714187bc5d73b21", "commit_tx": "0xffbd8f02b3cdbe0f919855beca3ff531e28dc40daa9f59da2273bb1dd1a038a0"} +{"index": 205105, "batch_hash": "0x5c5b4bbfe8e79fded964670163e2aecca16c1daf7cc628f977f050096987763c", "commit_tx": "0xafab5eb5a049959875d20314020e6fc4ba96e7f839e5c6af51db7a5b20be13dc"} +{"index": 205107, "batch_hash": "0x48b87a156189631d82157cadc63e797033052b8907d900330e3e9c2cf01a6bcc", "commit_tx": "0x4b726612a3d21d1c8d5e4aaa71a418185a678ef43857d040b8ab1bccd809ca48"} +{"index": 205108, "batch_hash": "0x3f85a738ce524b2f74597e66a5d61f5a76f27a3f077c21e62fda5d50ea02a441", "commit_tx": "0x0090ef97f9c2c1c3a1acfdded70faf2d3e07a94e901fe4b335b880cbc7304579"} +{"index": 205111, "batch_hash": "0xd51c2367a5ed74ed3262b79454ce0e3e059182ebc1d49a7c883f5868b9c0714f", "commit_tx": "0x041d294bb187db92e8441da68e76c64fe2e4268be1ea29cbbce4a84ec926a43f"} +{"index": 206953, "batch_hash": "0xd35a6eaa81666217c575ebc1d143a64bb95356d7b8f69f92dd497a010f695a27", "commit_tx": "0x21db702b826bfb42d6a193a8e31f0b4dc2c0e9409ca5cac2ddcec254d03e9766"} +{"index": 206955, "batch_hash": "0x374941d3318831802f185eec8239fe85241151217ba1a6dbd8e3474e8d746baf", "commit_tx": "0xb1a34540426dd10a0512806d2750939b1c5dea238b0e35460ff9e6b2c7ca9266"} +{"index": 206960, "batch_hash": "0x7eda569de033a5da9d8e0c048eb35b1eb2f853defe08d33fc6f6f724be3a108a", "commit_tx": "0x9beb6ed5f546bbe301113352ec2add6f053471819a9b83985f14c362d090dec6"} +{"index": 206962, "batch_hash": "0x6ec1b58efc5204180614421cb6545db11ba1740293f85f2d3f67af2bf7ef78b7", "commit_tx": "0x949b1d8aee3d5c714b1b7248ba637598f0255555d8eba5d5268edcdf4c8552fe"} +{"index": 207203, "batch_hash": "0xd7b3bb086b4aba4b0ae21eb9f2ea7118f5758d6613bf96472a9b40e53c54712d", "commit_tx": "0xf79cee838fbb900813c8295df3c1623c1729e714529cfa37e7494efff1d02397"} +{"index": 207204, "batch_hash": "0xa624a829cd7cf3ccde071c519f0b874a900e6ed539e9c75c329a08f85b6823d7", "commit_tx": "0x4be9264daec7397f9e594de345daf022505133b99f62b0a0bb433603741b73e9"} +{"index": 207206, "batch_hash": "0xb51665608e4ab2d573ff1c0ca45852f62cade13472b27839144f172380ef4990", "commit_tx": "0x3ca1a86f6959a26402b995e5fcffa49fffdb3b51f77a3d8a179502353b00c8f5"} +{"index": 207207, "batch_hash": "0xe35a7de8c8cf1e96b582721b5d8a8fc71bc32622fa8655fc3f4f5b7b68eaa7bf", "commit_tx": "0xd75f497da3c33acf112c9313fee7a3cb1ae359e73970ad9463d3bb86a2a72cbe"} +{"index": 207208, "batch_hash": "0x4c258d9ceb5d1aa3280ababed4774284c11aa825011c5dc0215f29dba65ed6fb", "commit_tx": "0xdaf3e7a4c6d49d6805cec68b5164e431e7ca21a0527cda7f7778008837554f53"} +{"index": 207209, "batch_hash": "0x817e99f880750f9fb50e777efb7c55a4faf19040bdf049637bcfa93aa279ac92", "commit_tx": "0xf980d2ca1e011011fbb5476cb4ef640e52b3595f9869a6394ba74f512819bf3b"} +{"index": 207210, "batch_hash": "0x7ebda66cbace587ad60078e8a8122bd2ec589deb1e16c831277443f7e4a796a6", "commit_tx": "0xcb0c93435cd7aab0f4ebb346784676af62817ec43b70bd813cb120cab58faaac"} +{"index": 207211, "batch_hash": "0x149b1136b67edfd97de09ab48da27f706561bdb4dd3300fe887c70ff80c67ec6", "commit_tx": "0x90f52c63ec02d563e07d2d61aac9c23593af644b26e0c4e6f95d14368aa19356"} +{"index": 207212, "batch_hash": "0x35efface0a8f78dc793946b1960f053b40cea7cbccf6091f8f14d0d4454e7be1", "commit_tx": "0x7a9bc276884a270d7b1031f2002c566d94fcdee88887f342b105a9a2a3a0a08c"} +{"index": 212813, "batch_hash": "0xdc6ac8f6139e29f8f3879ebbd29321fc7c574b72c25767b08b803df9731b494b", "commit_tx": "0x86ce178f13865b6221ec808dc0dde6cf4da775f53d0c5a32e6aa3f3ce3b2db69"} +{"index": 212814, "batch_hash": "0x64a4d22aa9225ff8672f4d1f9e5ddff6f607adcf144f5d61534c0991cfb1aabc", "commit_tx": "0x70572ae569a5634863de9e42ac80659bb0b1f61aa50894c0992759d10b08dcbf"} +{"index": 212815, "batch_hash": "0x3149892dfef1a11a32882dfbed120a4d3768f1125778d5b87fd7fe7b3dd1950b", "commit_tx": "0x4f5046007455d961d48e8fa85146dc73d0d052b1f832c5dea992d6248f07bcf4"} +{"index": 212816, "batch_hash": "0x3fed2912749bb5199628fa60c03d509fceb30cad7e4c5faa86e04e7031ca254f", "commit_tx": "0x6184227716bfd72fd23b50ff625fea13dcfaebe09a678a69f266fce6df00547d"} +{"index": 212817, "batch_hash": "0x72ed5033177319cd91bca4aee8b08d74de811d8c849c1e804d289ac6957de3a4", "commit_tx": "0x2058d72a664c4a92a4d7727d2ec5985ea5a7ba8c42dccd004126c08f8f6993bf"} +{"index": 212818, "batch_hash": "0xd0dd5558aa687e95e15f6bc0b9e8f79c5eb3670f74b5a6d2b628581d5491c35a", "commit_tx": "0x04aa9d5dafbcffe4d21725e25b311484ec3fba704e266738b92f23eb70e9cf3f"} +{"index": 212819, "batch_hash": "0x4e1a9e57f4624012d7113c4fea191ba4ad87192b7fdf9758b04ff9f7c56e670e", "commit_tx": "0x9d39fbae60d6dc450908251ca973a90fc48c7b0e91cf7de261a4f66bde13540b"} +{"index": 212820, "batch_hash": "0x5b03ae73ec14beb5b1af3b1a1c4ef233d17e4e0e381a4add594293a08bcbe815", "commit_tx": "0xf3efe655966c8f7fc8c1c504b6f2704b7beb87ec10bc7034c5a1d28697e14c85"} +{"index": 212821, "batch_hash": "0xce71b962f1051071d2c262b9f62102fd899a5173b2e43d28cf9f330ce4fd6339", "commit_tx": "0xdc8fad191a9d676b9c407236eaf0a328aecf05ca86386bfe70a3ae9381be9217"} +{"index": 212822, "batch_hash": "0x33c360471e7929c6049e8a0d0c6f8eefe0304c020ce25a76447ff5156510d575", "commit_tx": "0x4c2b732faf9a6c25c0d4280a3d62a5f80211875b36931b7103b087a67a6acf23"} +{"index": 212863, "batch_hash": "0x14d62afac7c67d467387bfdfb493e918772eb2a9269bb98f500d463b96075be8", "commit_tx": "0x2e8436b9bead44348a11f073dba3cc2dde762213a49e6951143b9f87ea088cfa"} +{"index": 212865, "batch_hash": "0x0037bfc23cfa61719c29d2c0ff22e8092be23cc27c1c12bd8477f99f7f95211f", "commit_tx": "0x4b953bef89fda810ee476bd183b17d0aa58c70efee435125387991d8ded9f98f"} +{"index": 212866, "batch_hash": "0x3bf9f9e8e7b61b5c2654b56779889cdde36e2648d2ad8c0bdf609afdec773954", "commit_tx": "0x845c2d5d94a6929f58f7a60d96184da007ac6e62475ae26e78ff50215502223c"} +{"index": 212867, "batch_hash": "0x2c401871d52922f8224ca70fc9ac30e1dda9354e92f765fe977da2f2d96c5cdb", "commit_tx": "0x144876e9ecd7df6a15955430c3cef71f2a6d42f60cb1f9ecfdc02cdc7aca8f72"} +{"index": 212868, "batch_hash": "0xf8525299cfda6508cafdde3f93ff73496c44e4594490328257c742b4a7ce7b9b", "commit_tx": "0xb1b778448796d9d043aa200f6ae59615e9c592b0b81deea3cd8bb541f3b113e8"} +{"index": 212869, "batch_hash": "0xebd2cf8a2a259778d2b383bfae2c57a59f4dc910924983342062158a405fe456", "commit_tx": "0x33627c6fc574f156389a203fae9bd5d5381e35a445ecb2512716a6c56d5f832f"} +{"index": 212870, "batch_hash": "0xf66e867d8386450fa76434f75fda5cdda7a8df3048944fad5013ab427df2eaff", "commit_tx": "0x41de8ebd944d42e8bbc1d8600d5e987e8d9eb5dc3d52c6941482b0dff32c171f"} +{"index": 212871, "batch_hash": "0x54fdfa8fce20897dcd4fce82833f0e9ee236878f94aa98fa9f0f368e5500bd00", "commit_tx": "0xab428f422ff16a56a2f7aec789402220933f2cbda44d2efa8f148402fd94298c"} +{"index": 217043, "batch_hash": "0x15402f4a7b2f82f216412250ae17fa63e0f3cf9f3a776c97e9422bd3e3033dcd", "commit_tx": "0x5c90f879e4b3db1bea83d7054d1be07bdefec4b0c5a9f3442017bd663902f61d"} +{"index": 217044, "batch_hash": "0x2714b9273abcebb7e2b3387060d658d5a5224ee8a0c39e2b97185058179d34a7", "commit_tx": "0xdcc1ef2d7e55a13658ee29963edc467ca12aa698c04ad6021bc243e61de8e733"} +{"index": 217045, "batch_hash": "0x96b60cbea40e961062be12af4456f58ac62c7a01c5907db80c94652922fc5b09", "commit_tx": "0x4674b4ad7de2545d191af3f3d801a7d43c7c826f3d6d25b78f124d76217fec77"} +{"index": 217048, "batch_hash": "0x19ce1fd242ca8395da7f3da673266e8c1c3a01ab18d8640fd7f496af0f09e35f", "commit_tx": "0x73b7b1203f2ddcc9762de3f41a3a9864209bcd646051e5ad37bc6b6079782906"} +{"index": 217049, "batch_hash": "0xc0b1156002d31eb9ccf9f5ebfe8b0d7f376b24cfc9d1c6128c23bf35482c2490", "commit_tx": "0x5283e3c7e3e8998bdc67fcd54520cb12c2987607e103f1f651a0d043fbe4b220"} +{"index": 217050, "batch_hash": "0x249ffb3a9076722b0e82d0abd10e683393742994525cad9a7efb8064f8228713", "commit_tx": "0xd3b7f328cddab50f44f81b51e16b287e6f326f2cab64f60add8f8eb88a2fcb24"} +{"index": 217051, "batch_hash": "0x1c1f15be45157f636b7074a56cbcce93280ec84b6b0f4d815d7dc5c7ee26be4c", "commit_tx": "0x33063d569dec3af7654b3269a0bf7ff727558eaed74d5e9f946f3842c32d3796"} +{"index": 217052, "batch_hash": "0x29288e8112462aebb485fe23a0bf10ab727f430b420db2b6f98f00f3ce584e03", "commit_tx": "0x41d95d32e28fe7b4538fb662e7570ff3f6b487aab5eb120692d56d183960f8e1"} +{"index": 218443, "batch_hash": "0x6fb0536d300333198c354a1cfaf01eb0579bb1c32d673dad9e824a04dcb0754e", "commit_tx": "0x25130967a15dc8823385fb46e07793ea7265dc52206d8a85f879f3d9e67a2464"} +{"index": 218444, "batch_hash": "0x953567a496eabd6a32e4e1bf0e4c422d1798f5a7547fc5cfcdf00e8624d17eae", "commit_tx": "0x13cf479ab8df75725af4feddaa055697cd99f63e83d74c365105df58bf10524a"} +{"index": 218445, "batch_hash": "0x0314bb8a0a18edb2afd9f4ee94867a6a8314661c905c7f7df2df40f5e92ddce7", "commit_tx": "0xd24342cf894cb97860c30d6bde8cbe9ca46451e7645bb175a05513e113284a49"} +{"index": 218446, "batch_hash": "0x52c282a121274e49c2fe899aec713d5399d713ce9a362cd166762dfa67da31a1", "commit_tx": "0xabe0fa0394e6adc1cb852bcd2ff38d02de61e7ebc0c52b3c39d840bec5b519a0"} +{"index": 218447, "batch_hash": "0x7ef6e28041e5573b9c5c2607a6b0a6ab532fe05d8ab85a0308badd2cecf2bd12", "commit_tx": "0xb299a8de324c08ffcfdf9cfe810d9be5249e3d16e00e4e0b15e52c899b59dc61"} +{"index": 218448, "batch_hash": "0x0f31cc742ca725459d8bfe5cfc5b33dc8d0386d0589f1f93bfd59f31e042dfa5", "commit_tx": "0xb3fbb6f153d9586adaffbea3228a0d779fe2f36f2228ad8e2279db1aa2300930"} +{"index": 218449, "batch_hash": "0x1635fe197ed0d1574f5f0dff0d4f52db0f1105b06b81f3e76eaa580150f366b8", "commit_tx": "0x1a4d0b64331542f26111d5366c6c23d020be1382463689faab42090d9b41a280"} +{"index": 218450, "batch_hash": "0x4323628ddd32c2f622f2f833fb32304d1bfb209d89ac9a970ae240a5d0f3fa24", "commit_tx": "0xab6349ce88278a7df501ddab8a527ef960a6919abdef2a3c0152e9b4c38d6443"} +{"index": 218451, "batch_hash": "0x21e36b0530a97238d34f67b2b86e40406ae6d238212ab096e245c8f89aa9f30d", "commit_tx": "0x381d3405819370312b8a6215f76df52a3b6a7d6e7c1b6dc970c5f3ee2768a701"} +{"index": 218452, "batch_hash": "0x37fc87437477d4c21cb8dc3cbb69bcf8a5bc19cead7b83e22014d3fa6924f9aa", "commit_tx": "0x86d30c66146f3255c4dcb9c71e897725316993924844f96328a06e07d029d5fa"} +{"index": 226803, "batch_hash": "0xcaf2632c125a8cb5711f29494543703558d254d3feaf976fc6d2d212464af2bb", "commit_tx": "0x8445ef0a0675da072681bdd0ca2764d1774eeb2e8c88c125a7c05f59bcb0d812"} +{"index": 226804, "batch_hash": "0x6053cc23e25cf42c9f53d9be8d8a8a5cd8e45896c33ccb834c3d350237040e5b", "commit_tx": "0x9d09a719a08235dc247b21fcdd13f1a644df11af2f9ab45493550f2aa2437568"} +{"index": 226805, "batch_hash": "0xf2fc6d27b45e00a3f11f0d8fe716cb41825493a508a494e94b81d5cba0407974", "commit_tx": "0x5ee72868d7347e3f96c3032a9b72931663919db6e134ce09bc0cc2c102c8779f"} +{"index": 226806, "batch_hash": "0xae67f5a0603c4040d17cc974525ad8a72cd891ecfa419603eca7440f77d5858e", "commit_tx": "0xeb630e759636defb4b2f672a881f5deda4e2c14e17586139d1903fdf1024ecdd"} +{"index": 226807, "batch_hash": "0x252947ebecb04013e13725d46718461ca8c0befa5598f9251f99c3d9586b3601", "commit_tx": "0x381dbc0f711427e5becddd044ba42a359c7f8ed40afbdf714e12ab35b6844a55"} +{"index": 226808, "batch_hash": "0xfd86207e346d6964856d4223cabe342986c52b485c7f0188876c26004bd742b7", "commit_tx": "0xb6d15c4ba6342a5c603157f8b87670ff0a2aabf6ebfa6add7f39769cabd03315"} +{"index": 226809, "batch_hash": "0x97a403cd2146eb36293f4e2841287bab394c41c3c0b2b50d7c73278f1c1d764d", "commit_tx": "0xa5d1d7b2bf2115afff7d9e4ecf2eca9ae43e28bd3c7e4b0654e64f0442c54d1c"} +{"index": 226810, "batch_hash": "0x1b599cd94dd08856bb20ca2400e1bb0d51e7ec83f62abc769571cb5bc766254a", "commit_tx": "0xb15521325e766a94cdc86b76738d40141099a0b810f247cb97c06ae1188bb81f"} +{"index": 226811, "batch_hash": "0xee7f7aaf9a6b873a22cd7c9e29496bdeec816ff5a320b34b54ed7a0efdd9acb2", "commit_tx": "0xa8f968b5027e65da9dc39ba5aca1cbc6d3fb6d2f3f677ca38439354042335141"} +{"index": 226812, "batch_hash": "0x11d85f5b48e91e0af61af8b8f1105392108656fabc962d5602f9b770eda78ac4", "commit_tx": "0x94fa501a880781aa75c8bfb130827266be51c11b14bd9f740d42f57d3e2d3a8b"} +{"index": 231603, "batch_hash": "0xb3e0a6ed27ea568e6acd8f2b1fd5c1d88c549db1cb7b21b600058453a5f816f3", "commit_tx": "0x3417ea9378af99be0ffb5f644a08f76b322763945ca32b54482684193e7e30e1"} +{"index": 231604, "batch_hash": "0x0c294a5739d1eaeb17685f4ca69c1365daab292d396b510a9d57ce7b2aa54e0f", "commit_tx": "0xf62cf207313950b047062bbae17af9f7f545923dfa0cfd84ef1fa53c34430637"} +{"index": 231605, "batch_hash": "0x390f4803eddf79dfe052b9901b6df79eb4110b92f2a1c07001e244b2d73f7184", "commit_tx": "0xc129e62e9ea2592f627c643a9796fd5cf293c87bd24c5df08ea83e616fd05933"} +{"index": 231606, "batch_hash": "0x63cf9a2aca482d232f9dbd738d61cf3f7afa45f1957de5794a34e861da9d1695", "commit_tx": "0x21f4cbea9985b5aece495b8e61774e9f8e5b20603ee8059b452909e1b68da1ac"} +{"index": 231607, "batch_hash": "0xf9e42c1cf63e89aeaf96304f26bd5d5ab86ed7914fce2997d8ff3c8f40593135", "commit_tx": "0x959e0d3ebc9c3c6f8a157631c6ea82b79455b2adc11da437d16c25d81b32385e"} +{"index": 231608, "batch_hash": "0xb10222b6fcbc3811ee4526d6ac8617e8563d1d93e0a7090e07887ca0c2111817", "commit_tx": "0xfc3afca5691951871be55abae0a5add66985bb5a2308f615193d74bce2a654d6"} +{"index": 231609, "batch_hash": "0xf89d7d79241fc6c2db4e1f573f4358ba90ed9f2e66594e490ca37be28c390366", "commit_tx": "0xcfa89c0bfc2b2155e511bf03b4e93f1638874f6a4515b76a33be1738528297d8"} +{"index": 231611, "batch_hash": "0x4c2901a0964c8d226723aba3c04f33898b2d4953543377faa5ec2d155f1be3b4", "commit_tx": "0xd31b625e3ecc5d9ccaec53568dc1f9087858f31e1a2f5db849400b596b78bfc4"} +{"index": 231612, "batch_hash": "0x194425504f39cc16b61151a6590dc0df72f9782af410f04590d3126485ac309d", "commit_tx": "0x4802f766a317094a75ce6a82316f5d7241ea33725a1229079a5c027564b041d5"} +{"index": 233453, "batch_hash": "0x753b67a735fac5c5bfa9a1dbcb84db7790af5e7b3ec0d8dbabe8661c25b64f40", "commit_tx": "0xf666fab6c9a8911f4efe068c09ab299ca54a43d93486da5b21328631e8dcd11e"} +{"index": 233454, "batch_hash": "0xfe69c166ecb803be4674afc599d2ac4ad8dfaa3b7afaafed63ab6d74a1d30016", "commit_tx": "0xa6ec7e25cb7f2a06e904c7951f6fc55cb5520988629ee482ab5db512e483a4ff"} +{"index": 233455, "batch_hash": "0xb9f967d1bc95fcc44b48af8cb857af6c2dbcb82a0222c4f82567d04afd282381", "commit_tx": "0x385c398efeb76643822fd297acc22ab75314c48e231048c2e4f78f4920af8499"} +{"index": 233456, "batch_hash": "0x453b0984b55f55827fb4cb7ae27b1b40f4b98757801a36177f83761ddad82573", "commit_tx": "0x8a3993a7b0cf8a5d7f9800886f0a6aec359b3fd4ec6faca2f657592d7bee795c"} +{"index": 233457, "batch_hash": "0xb8d1b4e835b37948db463b486d50fa9ad6c802428cd526700b3ab8e87122e096", "commit_tx": "0x5e5fef62ce978ce881f914190a839d71beb2e6bfaae9a24e062411b10ef1fbf4"} +{"index": 233458, "batch_hash": "0xf266c2b69ebd44baa38412bd77e478ff1df8de3f13354fb8fbfcf098d36efd42", "commit_tx": "0x9b21fb178067da4c735fab209b7d832c968582369a80adcb5fc73e2f7e461353"} +{"index": 233459, "batch_hash": "0x5a5cf45ce1603c36a0b69643fa841f685e9ff2e37b29446df30740860e83a25e", "commit_tx": "0x48cc9fe57d9f2180ca7f0c307f666cf513fdc487ba7025595022652b2284382e"} +{"index": 233460, "batch_hash": "0x5588847b811172867786ca5fb844e59dbf21556207da5ca00c20eec510d981c3", "commit_tx": "0x7c1794c7116dc46728e7d07655e3ade0f8e49c1b3e0c2fb6894640f1bbb1c897"} +{"index": 233461, "batch_hash": "0xac04b7eb7f67a523f66f9481874c87629a16df5c9e60831e294f81b5b653343d", "commit_tx": "0x1175ea45097e8d21f81d2c1baebe0a365240a596307a6141cc489b324e5e0ff4"} +{"index": 233462, "batch_hash": "0x27eb8c07a38f69c264069760e0a7b9f9b2ddf2642eb143639b3f83c329c379e1", "commit_tx": "0x518705956bbd69045003a5266d65cc3ad4d205dd4f5146e37dbc16a18501632b"} +{"index": 236213, "batch_hash": "0x099d4d01fa6bb5fc9e5f3a4ae5e3a71c3e279eb234c1c8246798daeefc4c0fdb", "commit_tx": "0xd10ed84b8278448e1169b23eef400687d3ef4deef9229a416ca2cde4755ea6cd"} +{"index": 236215, "batch_hash": "0x3939686f769e1141bb41a32d5d4d838622e7646178494cdbd4441b88482b750e", "commit_tx": "0x32a06f27246cb9c7daf161c4d0cfb79bf7c9513a4bd312f905c5a7aaa84648d8"} +{"index": 236216, "batch_hash": "0xd4fa76fd18c5975ac290d5ffa65c322b461ea13b364ea37a103d005913946787", "commit_tx": "0x6a2b47eddbb839ea52ee9102b8f28af46a498d3f9d77860359e92b38460827d2"} +{"index": 236217, "batch_hash": "0x54e3532fbd27327311cbf0843ecaba7fbac22d56bb45f120da03f34f63ecac49", "commit_tx": "0xcfbfe32154c676500efa4a689d1903656f97eac2029484f62ccc10fbadf261a7"} +{"index": 236218, "batch_hash": "0x77ad3647a730a5990e6e9ca7942f041f50e15903077c352f4eac8f80c3e89aec", "commit_tx": "0x8c28b2976bdc6cd83f80e3cf09e7a4f0b97ecfd4c7723bbb64cc042b77ad3eb9"} +{"index": 236219, "batch_hash": "0x77f2480003cab7644c1f5ea1de2046dc63dc3af46e2270996c81368d5c478e41", "commit_tx": "0xb28a32df32579dc4e7d02141a0db31bbaa39193ff61f4ff799a5f7f18683dfcd"} +{"index": 236220, "batch_hash": "0x2a44c49cc98c6521dbcaa0af9e56a126980a846df68925fe0f178cb67e811d31", "commit_tx": "0xbf2e8d1255a7cdb3da6bf5f46861fbb038057d6f9aa0148208ae6fe3e2f654b8"} +{"index": 236222, "batch_hash": "0xdf7c737842725c7cdb68b5bef8f1074879bb23787cef75e19c34b1c3fa97c6cd", "commit_tx": "0x4acc43528635a6f10c9cbd83531f7af2dd62f51146d92a44c72b3d42c17805b2"} +{"index": 237093, "batch_hash": "0xac10501ac3c33ad822797a6b7e3a45e6664bff362096ac26c7fc5e412dfbc1af", "commit_tx": "0x5404c9f372a3053185242db68f88aed8a2bdfa71b828d9f2fcf6b82b88aa33ff"} +{"index": 237094, "batch_hash": "0x4bdee83370bcfff2c214e7f9c2060f3e76554c78b36d96f66d6b3781abb59b09", "commit_tx": "0x73b7f57cb7b93d8aca08a1a599a4a60d641237e0fcbbfa83116cf3b30e1cd9a4"} +{"index": 237095, "batch_hash": "0x27139e45cf04e657adadee7a9fafbc87ae6abe07b4b2903ce0cfaae64782b54b", "commit_tx": "0x72d30c241d862fc9194c6a1ea600876afa0d539ad3f1287038090cbb9bba358b"} +{"index": 237096, "batch_hash": "0xf7ea184f986a5796ba94766c62627cd1f508e510d88303a72375e023c96bb6ac", "commit_tx": "0x639f78623599c6a9ca27a8046cd6a22c8241f580e406317e3105091230b72a5b"} +{"index": 237097, "batch_hash": "0x2842772b30f92d9a72233a2f2b848fe38bcaf6a0ff009881e973a1205430c565", "commit_tx": "0x9339eede3bb23f6b91d2c71850c0045d57029882535a2b8682d05f6665be38d4"} +{"index": 237098, "batch_hash": "0xa18e7cf80d3aa73db77a948379579792124cf58219cec23fdf3260faab51a035", "commit_tx": "0xbe213fb5ca2342f64989942164e8a530b7896f646e3b745eff57b30a56f9f967"} +{"index": 237099, "batch_hash": "0x16c2aede8272e449f54e5ad6f0f47989ba726f36699bc9f44920dbaad98670b9", "commit_tx": "0x111bd7fce777839d5cbba1ea5800791e6a6c7df15b33f67ee3e9629a12a94aeb"} +{"index": 237100, "batch_hash": "0x2e32b3c0921afc90650675e9e4a92858b159a14ce7c596aff5b4d87659d0d23b", "commit_tx": "0xa72f381634b5a9f5731f15b40bbccd4f05e91ce2c628ffaca573b4a452d2368e"} +{"index": 237101, "batch_hash": "0x011e90c1ffe4303a69a7f1658c1fc3fd8a07e67527b0ac9d634d7f3b67d3a078", "commit_tx": "0xb59e655f97c6097dc44e45971179fdc99db610d022c539c30c96ff7bbd8f2493"} +{"index": 237102, "batch_hash": "0x93284087445d149f6b460fa089db5b959bb7de55f806a1aca4d302d7d22cd997", "commit_tx": "0x690e44abba53c88db16fadd05a18efb0b3731d649dff4caf7c7cb3c09d40ce12"} +{"index": 238403, "batch_hash": "0x2ee9e5007994515e75bb13cb24254b5950172b243e38f7849590a0f239c5d532", "commit_tx": "0x4f7adac2139663843f8da84d2237ac09b3d0967535626376af1cb4800848d05c"} +{"index": 238404, "batch_hash": "0x009ea715cb52b0a2996824b541aa840bd5cfeb75d2e232c6e7a98be78ab5aa7f", "commit_tx": "0x0db719cffedc0ca9044911eb049f4d448b222a237582e090b26fd0fb2b5dc8e3"} +{"index": 238405, "batch_hash": "0x5fa424514d322d958a309564cf70369ec50b9777d494ae6f0b762f872c895810", "commit_tx": "0x5b0837238febf5370c909e683b8dfb2cc7c55c604f9903274796cbd1cbe88e14"} +{"index": 238406, "batch_hash": "0xa1b30fc811c9c68e69902a2b0c4edc6f3ec24f3e2c38b4e1e8ea20a5a0c1b520", "commit_tx": "0xb987a13597e859add0cb2a70157e25c31862260fe178dfc0573078faa9b83e2e"} +{"index": 238407, "batch_hash": "0x0d5961cc0216a628f931267dc1a36f0bea0872a8d1c152079b136dbadeaa6825", "commit_tx": "0xce958b0db5209a082004940609278e836738dc1e1626e95d348bb2058cadea1d"} +{"index": 238408, "batch_hash": "0xe70f1e4fbdc066186a9f7b1614077298eaa4a14b0d1ed7a617776ec571fcf08b", "commit_tx": "0x9144063265139e16c27a295297f56dc7bcbce49253554eb5211d2afd9d24f88e"} +{"index": 238409, "batch_hash": "0x033fc9bd4a6c04917aa0931fbc48631980db08ce32e76e3880e425bc9715592d", "commit_tx": "0xa242c261c89c47cdfe135315a86ca6c26dfb5c32bec8802ec5fff5d3aaeb5411"} +{"index": 238410, "batch_hash": "0x8347f3b3d10e91f2b5b4ad6da6fc03b9e0ecb58dc1172a8377866c4843f66bd4", "commit_tx": "0x151b2246182283a329f2a010ee79bac3b95a647954000675216be8a7cd22f929"} +{"index": 238412, "batch_hash": "0x0bccaf4ca06751e216a26d374b24aadcbf74898da857428f40c478d6f90ddbd4", "commit_tx": "0x2cfb0fe4d82160ac55a4e2fdba221f2978b85d9083d0e7fc17aa83e6a34fc29e"} +{"index": 252313, "batch_hash": "0x1ea18e933cf2cc7f54bfade5bf6773199d619ad6534c824c87cae1f4cc79a0fc", "commit_tx": "0x1ff0204ba878e5f9bff6e8f05ca23e39664e717dc36843ec81eff8c637e9df54"} +{"index": 252314, "batch_hash": "0xd60f38374e99aceb51f252b3978e98ec82b6e9de95858ee6c2b2987465bfe28a", "commit_tx": "0xb280e422a9195a4192f05e73d639fd84d712c799deb730c641a2d0ef6546ade5"} +{"index": 252315, "batch_hash": "0x45101f10102557612343f10681e7b2c64084bac5c4c9972def35bbe10896ebb6", "commit_tx": "0xa4cea0096b584fcb2c3b5233631d1830b070104de6965ceaafde8038b26a7b73"} +{"index": 252316, "batch_hash": "0xaedab44946d498146937203d352bbfc5fdc2eaca54a363ae2d8c185e045c4f70", "commit_tx": "0xbafc4328101d9de50e722e562269444b5253b4d348cf529cc17e56783bd44407"} +{"index": 252317, "batch_hash": "0xc1d9d6095be4614496346694acd60921b49c76fd1c6ea4581a541c4a1123d00e", "commit_tx": "0xe5670864b37659dedd6b29ad94befbf549b70ac786fb769be288594289cfacf6"} +{"index": 252318, "batch_hash": "0x8447d77dca12d3d5d18c9921250dff9d4b2b8484845b4cedac2caa6030607239", "commit_tx": "0x765554925342e6866054e5a83f2bf09543c2b222b71cf7586d7e2c4572c8584b"} +{"index": 252319, "batch_hash": "0x8b2563345610cf8f273c5bfc5d9cd7fbaac5386bf45af6ef2782ebc0e2e7926f", "commit_tx": "0x129e37c591db9325543b7f0e567c25687b323c2ef745c294f68e6a3e96b627b6"} +{"index": 252320, "batch_hash": "0xc2c75784d6b683e6949d40e53a28b86cf02c597610db5b0a7a455eda5cdcdeed", "commit_tx": "0x244fbbb715c0ca1dbe85aef9ac97269e15e06644fc70ce4d99905a0dc21a7440"} +{"index": 252321, "batch_hash": "0x71c0ead56ccea83b0a282a829c04dc79dee4cfd080d61b4524b73ef1b1708063", "commit_tx": "0xf3f918a6c3c5ac28cd9c60dec2ef8965812e6c232870d3e30f990271b522b0a7"} +{"index": 252322, "batch_hash": "0x1ec4b0ed7e807310c2f2b3b14d618ca8f62901bf3e761d7293123457ac4fc568", "commit_tx": "0xb3206e0aec9885a88ffbf29bfaa3e61f5308f992029c19be3dc9feccae2d2fb8"} +{"index": 253044, "batch_hash": "0x195aa4ecfe0b6616629f1efb00b6d3565530fe551a8111adf75edb18718af626", "commit_tx": "0x54527705f3ed191ace02880fe3b96dd3cfd01f1a6a75a792d0d2366d811e3275"} +{"index": 253046, "batch_hash": "0x34bbc4a6364c89d56fb3175689b613b665677a3faee2fbb301d0d834648de1f3", "commit_tx": "0xeb8df841afec9587c9e61b1176a3d03cb3bd8d1b79d7b56b6c84ba9d05c544bd"} +{"index": 253047, "batch_hash": "0x869a8149d6c7041f48fd983e2b527260e5d3d9dc95f148290f92ab558f8cc47d", "commit_tx": "0xe770ad544d4664d8dbb4207c79b375541775649b7046c814efe7dde4ed568507"} +{"index": 253048, "batch_hash": "0x2afbe288cacfab1933f8d29d38425f53ca8f93888a6e4eb93236e57fe7f0a303", "commit_tx": "0x95d52ef2079684038d55f96e3931994649da540a32b3d93f292dc23ea8215a83"} +{"index": 253049, "batch_hash": "0x8d4890d26cba9f2c620f6014ef84315e03d4b62073248fa79275435363da3f7d", "commit_tx": "0x62ebd458d725896d5054f1108743c652ff2cbd487f4a31282ec022e11988c339"} +{"index": 253050, "batch_hash": "0xd8dfe69e2c7eb85de5a417b95495c2de36e2309619b23d733036106e462ccad2", "commit_tx": "0x90816c751f40a699deddcefb4d179a285e093e077a9b0ab4d20044fa0f1c0491"} +{"index": 253051, "batch_hash": "0x98091ed188a5282e43c8e125dfe21bd948256e040c4375446830a22b0b8a5b30", "commit_tx": "0x15931bab7418fd5a9d8af894984cea2eb8c2dc4748228e76b91197d409fff2c8"} +{"index": 253052, "batch_hash": "0xbd8f6c874b6535a3ed1c6efaee01f347cd0243412e216354871db9d032c553e0", "commit_tx": "0xaa43a72713698e5117b5cee1c5575a5e6a50a5d76d8c1f19025737ea388cab67"} +{"index": 260203, "batch_hash": "0x6a4b7c05863a14a21d859bff26158459099f93b3943b3c70c0ef8014ffef00cc", "commit_tx": "0xa6cda87137ba507258c05d2da0f270ae5def33d8ebabe5dd8d887604d764fca9"} +{"index": 260206, "batch_hash": "0x505f518997900bde7096dbb6010c61d7be72d11d940f6ff600256f0796dd25b9", "commit_tx": "0x82f2be1f390db80de3d2654d4c6304ee1f6914cc97a9c994cb74171f6576dc13"} +{"index": 260208, "batch_hash": "0x74914cc0ee9141e4c5e088848c6ad19b05424c79d0504e421b16e3c015760045", "commit_tx": "0x96698781f4462e56ca334076388e94dcbb26109de4683018dac800e714c33e8e"} +{"index": 260209, "batch_hash": "0xe9a429bdb187373e22d065ea64d260a451c940a886cd9d8934ce4ae20fa72b9d", "commit_tx": "0xc0aa2c326f1b2f069cb0e2f181fe2f1db40ed0dac600a5c698bf5a6bf7433d12"} +{"index": 260211, "batch_hash": "0xe7193eef35efce76f81f3bea1660f742aba157f0e92e3e3fd3d31abc3b5b89e1", "commit_tx": "0x9a95a0595dec4e698f0d491c3dabb54e1667afe7d752b5732829dc92c98b014c"} +{"index": 260212, "batch_hash": "0xef09103cabdc3171736592b02ba4445073b6fd8ea95564c8af07a32071b45d9f", "commit_tx": "0xe9c117390fcd70ade28478bbd9cef3788d5c3ece608bbf7a39a76a2b3cce38fe"} +{"index": 266073, "batch_hash": "0xe42bcb8abff5350759d1d9594795ee21171daeb6f0b244e81300920ba5a593fe", "commit_tx": "0x5919c28e30a862e4374663dfc94ba32d76686e44f357b4531f9bc07492663e6a"} +{"index": 266074, "batch_hash": "0x9aa061889fc23098cd868f03bca56a1af39159ceb5ffe8a6c6d1edb31dfba1cf", "commit_tx": "0xab99e56b1a588d1a0d5830b89615b1db5c3f4af3b6d789d6906c31f3e5ad91fc"} +{"index": 266076, "batch_hash": "0xb575b785353d0758f168509e8642a137ea2e08b6d689d24a5dbd637fc9b581f7", "commit_tx": "0x709ff6546b0732f63bfdc2cf07911981137e525e885e5415c02371e92bb7ecbe"} +{"index": 266078, "batch_hash": "0x8af80e6d81287bae634bc6b470bb8c58b9234d3f6dd5dbea7d66bac8b465d4e8", "commit_tx": "0x964d9095e6f9cecbe592777e081dbb3e57f0ee80142ee8ed4098dab608c52936"} +{"index": 266082, "batch_hash": "0x4e6b0c471cbb50ac68e008d8159e8dbf7a65a5f2dc34bce191095d82b9718963", "commit_tx": "0x403953c2cd725b436af949960bd319e45f27ec9b31e877a286a72ca9af569f57"} +{"index": 267223, "batch_hash": "0x15e15d9483894f4df1a289ffb3779e7b258ea8c2c72870b35f6ed2c262107af1", "commit_tx": "0x076177a0a57d0126e21ff0950da35f2842fd627a7bbcf30a84346f8b4cfb4f64"} +{"index": 267224, "batch_hash": "0x0907bf972869622c24c0040bd7adf3c502f5d5a1ffe9fc9235b5d2f655d9e66b", "commit_tx": "0x051d26189753afbfcde90042cd9c8cbaf03de4638d874840aeffc4712c988eb6"} +{"index": 267225, "batch_hash": "0x093a1b29307c508f3cb7414ee95bde8d9c1d1b7c6a063891f6f42c033f3536e5", "commit_tx": "0x1758e71d0257d09d92abea7873c4aa454b54b9e180904a8283aed4630d1ee484"} +{"index": 267226, "batch_hash": "0xbad1841b3717e553360c39b4c74dc584e5c3580e70a52b7a56fcb7563bcf0436", "commit_tx": "0x0723848e8ce36a4f059ca47b3342bbc71b69e0be453a9a65832d67bf19c1c3d4"} +{"index": 267227, "batch_hash": "0xa4867396b2960e31af78865fe663b9cec8897b4ef73be64a1cc826ce133eb4e5", "commit_tx": "0xcad326a288ea7a2bc324ce9fde6ab2a73c6fc1fcf0683375691a0643be0767b3"} +{"index": 267228, "batch_hash": "0x3c199d311cb244d7737485f7f38ef723fa9319ba98d40f16255795940482a519", "commit_tx": "0x2c1f17ba275b0f59f53c3bce6771424ede709a097d87fba754f9de2185c01903"} +{"index": 267229, "batch_hash": "0x23ebc064696ee8481231da92872858218c1aef001e704728fb7d4cf6833b21b1", "commit_tx": "0x65e5751e0c9746ca5fca7f9ecc012ffaa24de9475f1e2ef24aa2a4d69eacdac5"} +{"index": 267230, "batch_hash": "0xee4c7def2a85e79598ec0bc76ec485ddfc80e6520a23e63bb96c170798f2e08f", "commit_tx": "0xf8e445c88885ff6ef18deeb44ee5124397bd958a6e7bcab2f995cacfc332265c"} +{"index": 267231, "batch_hash": "0x431d4c20cd81f2681294d952c638c40c90bf29fdff0b1009813fcfd23f7d8e53", "commit_tx": "0xb3e3a1616608eccb11b4f5d2ee702448022b54997caa79108d37135ea69d914b"} +{"index": 267232, "batch_hash": "0x70f2288680d1770eb2e6953094fe1ab67e5ffe4c013c2b892ff4a8fa70e32d63", "commit_tx": "0xbc1b3cf93dcfb6c1d9a6a7f00fe2aedc71d2441ffe4135df63c5fbdf1b67b1a5"} +{"index": 268023, "batch_hash": "0x2bde7e4de6b7ccda07c2cb7444aaa4e7a8ecc83adcd36133db19b24ae2cc8bfc", "commit_tx": "0x79ebc2c18d59652b51a03ee6252ca3dc87239cc9d82b108a94c055ce8a43d917"} +{"index": 268024, "batch_hash": "0xabed143776c71021393193234537061dbf8b32b4ef16db2664283971bca5e1b1", "commit_tx": "0x65b77f73368b3429296c82cfb6d05c1392430c875d44a0e4af111c69d1a4b670"} +{"index": 268025, "batch_hash": "0x77796d6215eab3f7f99f0a859e0a0e0f688200f6241cae6734f95b4f624f9f4a", "commit_tx": "0xa3846e6b66295d7072b3ac1e99d11b4d9252d40bf190673edbd8532e68a719fa"} +{"index": 268026, "batch_hash": "0x48868d6504855baaf8e037f96f2a179f9e9084fb8483a2acbcb57f2ffe5ae15f", "commit_tx": "0xc50bd6fdd7f3ec7737a7aaba85c8082b9593202ba506653fdecefde8b883cb98"} +{"index": 268027, "batch_hash": "0xb625245adac3dd02e155b97d2ab65043f14243755d86e2c8c33d4aabf82c6070", "commit_tx": "0xf7ecb436aec588a534a0129a90239efb8ca771962f21a2bb3848d6cd2d7c10db"} +{"index": 268028, "batch_hash": "0x13b8303b99f1d837c1e82a5c2dab750f3934ba2274ee2706984b9c31bccdb40a", "commit_tx": "0x2f05435364c48d12e4af55369cb59a0d5223ad5008ab8d613ede6829af5d4508"} +{"index": 268029, "batch_hash": "0xc25b68867dcfb25a1ae2f2151bb2b93d3d7f39cb0e3b9ce9c244c070a378eb3c", "commit_tx": "0xa3618d2df5a20fa46468f27dbc59a2efd3e56870aa8c4f1723c10f467ed9ffb7"} +{"index": 268030, "batch_hash": "0xea49ac129fd8d31e1ce1fd533e045d50046d71a9a8aa3050f04b19c18ca211bf", "commit_tx": "0x6948123f320fba11b10157d96f82ee4eebd379e64815f9064deb0bef91b687c0"} +{"index": 268031, "batch_hash": "0x78b6cb55f3a904117aebfd75c9e15bb2f343a9a7ee63ce1600dfe4e63b20c011", "commit_tx": "0x340dcc7f900dba3867664e5a1c4e0b124a246b7fa0b3d0e523d28734620b47b9"} +{"index": 268032, "batch_hash": "0xfe4d4e98d657be10d3da4c216ebf2078c71aaa0ea37d35633fb5617cd99f014f", "commit_tx": "0x972395a6a4145d8a33816299ee8ed985a55e757a9f0df94954c801dca5a054be"} +{"index": 269564, "batch_hash": "0x3725d80cd67e6e3fbd9ce8dd32e66f74a40a60da56decb1441ca884f8f1241d6", "commit_tx": "0xf2047752f962230f3891a44e4c70b054fa0f304a24f865208cf39b018a3ac5bf"} +{"index": 269565, "batch_hash": "0x82a73272e935fc6650be611ca0b7e3e785cfc2ec43a542304d0516597501399a", "commit_tx": "0x71b46b143b83580e08c11db3d48ee7d142df5e3acc2485b91925bb404d11b53b"} +{"index": 269566, "batch_hash": "0x455c99fa19e8cbc0e318977be013cdd613460a04d0bdb8f9ce80752bb5c854b1", "commit_tx": "0x3ab7a174d0e3bed3a46673561fd96ae847538cf751f67e088cde235bee6520bd"} +{"index": 269567, "batch_hash": "0x11a872a9b484f8c1052118ae8aee71db74366c05a3d805a9af3c6c8862fd2a39", "commit_tx": "0x73c6d552550cfc0a8c85b8773f7e969aab599d2bc2c2de6f98e3dbb44284b47b"} +{"index": 269568, "batch_hash": "0x284559427806ba27cd4a6091b3139d848ec454664f65775838622f702cd62b88", "commit_tx": "0x2f1405a8ae864b521c847096d4e58d0c812aa88e8eaf5169afe3a73274422117"} +{"index": 269569, "batch_hash": "0xca128a3d430897b74364dc37cabae62b40a516bc04d8fd7f30a1658302ea9581", "commit_tx": "0xc2ee27f1dee0367ceeff2f6e4c1bc860a0736f87024c85da6a34c62d31049aa4"} +{"index": 269571, "batch_hash": "0xf2e662558d3bdfb0e554499067f6becb85a2c3d780c733b1f3e2830115c6f8c1", "commit_tx": "0xf16c8a4e7ad114e063118065cce746912ac2ca1467f7d28f2b30fcf5cc3d37a8"} +{"index": 269572, "batch_hash": "0x614df2648f6b10a9b4bdcbdce9d632a5484382958ecbe91b4648585152c87fea", "commit_tx": "0x1635369528d136065cc3b0db060da9a7946bc82200e26cca9abf7fde6777a596"} +{"index": 270843, "batch_hash": "0xa9db9af1208fb967696d5a0e45ecb9e4bb3a597a7bdf5f17c7875c6bb5b31999", "commit_tx": "0xdd8cf3bc281eb586e270e4d8d8952f856c7ac8f60837848ac92a5fbb5fc7d266"} +{"index": 270844, "batch_hash": "0xf4d4845f2e338c3a9e6a0dd515b0c3ae81014c13dd7175a5bbfc0b0abedd6f9b", "commit_tx": "0xcef3946cd9670eae3ef35903ae5963f21aa42ae79348612e0106bb1cc9acb940"} +{"index": 270845, "batch_hash": "0xa0da23f30ebf21e207dd7ca63a7b3b2018d52a917b5130244a9a2671f10fc3bf", "commit_tx": "0x46675abdc6d0d10614355831685b2845d167a27be9a87bccb0ae90d95c3e6076"} +{"index": 270846, "batch_hash": "0xefab8c0d312e41383174371933c1d06b798d7845b30fb44ce23089a21fdf16f7", "commit_tx": "0x3c7b31bdebec93d37a75bdd4c15a332296c6edbd022deabc04bd1bea0133b5e6"} +{"index": 270847, "batch_hash": "0x9c1e826674eaa946fb1b0099abca0a727ea6b9ebee610fb23589c2880e43507d", "commit_tx": "0xda7e8739615b3bd5dfe0e02fe540b17a00efa56a970713820da9a11f7b67ccc0"} +{"index": 270849, "batch_hash": "0xff2772a06b451f181cb54c5b7dcacf7a0283a441051874e30c3704f77eb5bc69", "commit_tx": "0x7dc02025643914ed0fbe6c04de886683983933a446e2deedb8040b7539ec1dfe"} +{"index": 270850, "batch_hash": "0x9c0f186dcb67e123a3d11f8c39db76f25bb022bc78edd431b9ef6be04ecac983", "commit_tx": "0x3469c4c5066fa6ce52fa66ab9263fa22eee6621b40339ece18388faa8cdf1ed1"} +{"index": 270851, "batch_hash": "0xd796f32a3a292226e38da1f764a421ea9e98609a171d236dabe6d2e6a5f255ae", "commit_tx": "0xd8421c16be70fd1d36bf24f5bd1d8e1b17900b6bbf3c107f4149ce421e53ad6f"} +{"index": 270852, "batch_hash": "0x2516052272961b1bfbba6ab87d658fed00fbb4aa03979c03f8ec1ad08513a9f2", "commit_tx": "0xddc80b6f9955cfab719250aedb17620489e54349eca9afe3553f994a69771abf"} +{"index": 271755, "batch_hash": "0xad697f50c65b5703f39b0ed279438ffac163277f1f07b83bc3d5ddf6e1e8ba5b", "commit_tx": "0xc359c6e3b1fe267c96b06b4688f45d7629528e902064032ca78a223db8870f63"} +{"index": 271756, "batch_hash": "0xf065ada6a0c42161c5cfb82d55ef4654d5a6735d4bc434ba6e78a0613f1562f2", "commit_tx": "0xef9bd393047de44fbc253a62d2368dacec700128d08ff75de65662951c28edc2"} +{"index": 271757, "batch_hash": "0x8dd5d00a723c300efba71a1b7dbf7be82880d56b498b34d7f806a21fb8b0d909", "commit_tx": "0x0ad4e6f334a59b1028cd6700f542a8fe2f87a24d9f4abd207411f3d117e27c70"} +{"index": 271759, "batch_hash": "0x9afb725ac76c4fabaeca9c5908b7aa96d26ca024f6ada86523f200d20944d708", "commit_tx": "0x8535c17706142afa10eca90bdc568c698f8e82b1bcac6dab391558e04ee5a248"} +{"index": 271761, "batch_hash": "0x662da821d4663b7e95a9db630dd4cb60a461b53f29d6269abc66cbe44fd45181", "commit_tx": "0x0dc161f470567d95bb11acc1f7558a91385503ea8225857845ff50c0a7b0fbeb"} +{"index": 271763, "batch_hash": "0x88f993da0de33a1f32df5fb2eb94c1786a242aeef1a3f808e003d1d28a143d19", "commit_tx": "0xe360b96ca444e6bf92d18b9dfe9983bae15e7cfd048e78834dd344f06052c0b4"} +{"index": 271765, "batch_hash": "0x3bcbc5538ef35d3380911999be5dc6f87325f282c2c5de293a4a3cc394eecba0", "commit_tx": "0xa1d3bf6893889e9ed415389ac826467ed128c2b3b43b340c254adf2d4c5cecbb"} +{"index": 271766, "batch_hash": "0xb359dd175130fc2acf1a2a9123496be9d1378eb6289ac3994d81973e363d47d5", "commit_tx": "0x2eb23fbfb9f768f76848bc7fb3859899158de9bb7111c1336363fb4769b62bd8"} +{"index": 271767, "batch_hash": "0xde6460ac620107b1b9ad40f81a8b092a142ba898bb396eba5d5b61efeac4053e", "commit_tx": "0x71e125f2a73e779227e2a51cdd81a71d5525a644deeaab21c617e40fe17625f0"} +{"index": 271768, "batch_hash": "0xfea8fdfb2a82ed8ef086a93a667c07e0103e9c1b9be495f633f594c639491dfa", "commit_tx": "0xeee2f68bb8decbdab1e7edfe640ef719d3773cd05b020f99e8d4084673e502ea"} +{"index": 271769, "batch_hash": "0x9d4cc25a14b61b75ab69725894186d5d4d6d0d209809f153e796a7d459730aed", "commit_tx": "0x54476babde5ab68f62e3c8ca208efc06f4119ebddb253cb8cf82d96675d96082"} +{"index": 271770, "batch_hash": "0x45449aa26ead9458849f0e12516c427419c492a1177087dc7ef0bfb97e0a3ece", "commit_tx": "0x278ada505b0d019c6872957fae56e883c52d634bc8d695207d3fa56213cb6b35"} +{"index": 271771, "batch_hash": "0x679a3d6fd79f6a74760f6efbd33cc1c939edcf6bd9bc316eaed9f7c73e571201", "commit_tx": "0xfbc6c75fa9a0aa2a8a6db7cf8d96627fabd7fef1de4e002f87fb2d8a942e7f45"} +{"index": 273093, "batch_hash": "0x9d9b448df6fa10c40967757400b8a182e58d49954491b087f6e6c7cc2630c279", "commit_tx": "0x0ab06d638026b1321625420e14344568279a0dde88eea9017fd9482a80468d2c"} +{"index": 273094, "batch_hash": "0xf81502f07cca9e009781f5b4d42db7e61ee38c43d8941fbf9ef2b667cfbd0f10", "commit_tx": "0x749e2118e06a9c13c3de731dee5c2f3bffd969e23da51b7b75ab9f2c0f223810"} +{"index": 273095, "batch_hash": "0x0e11423f929e64b22650fef3c8b1a0bae200262ffbf1006a48da203f46195d51", "commit_tx": "0x9a8f9758a27661e1fc204a5547f577dc5898a727f22d58ec3220936c2f137453"} +{"index": 273099, "batch_hash": "0x74835384941cb4dac0b2c76b748c775605b986f5a30ad97f324f28adcff8c41a", "commit_tx": "0xb05d97f77c0d38f2c2f4c2c3abdd0789a49f1f0263f21c4fc04f031bcb968a65"} +{"index": 273100, "batch_hash": "0x8bd6e80873324052a32e3ccd42191ce1f809c6393080991ca507598359862c61", "commit_tx": "0x86562c9e940ac179acd4c8e25889a42fc1dd5eb81e512c0cc94d0eb59f073fab"} +{"index": 273101, "batch_hash": "0x1537e99f47e096db6d3def633006f0b8b4a2f8458ab7b375f8073758a299f82d", "commit_tx": "0x16751cdbdba4788fe2f1b55c370547eb7d2381bb6128817d9c5b226b8e9ca5cc"} +{"index": 273903, "batch_hash": "0x826842ec7fb66aee07634249893eb6a45ffc2510a1acdcd5b7c4c4fdfcfad938", "commit_tx": "0x2e935c7a5f9c83ace863dddfd15b361e88f3132accad9c696fe0893464c52a6c"} +{"index": 273904, "batch_hash": "0x578ddf3d293286ac3e297790c9ab88b14665515af15ad02aaaca2e5937ecbf7b", "commit_tx": "0xc10d3d3903d957cf691285f63d7d8e93fecc8ba0e2877e369e99ae09f61ebe11"} +{"index": 273905, "batch_hash": "0x4dd2184e22d83b400820be57a0bc7dff6f410ee099cd3473f04a76afb857cac6", "commit_tx": "0xf35d82d8003a292f5df6f080390630177ece4bbe7560fdda1355ab0c26aea67a"} +{"index": 273906, "batch_hash": "0x0649cc966d704d27adb6f8f1e13e0b477f86288d045f8c371c52844d23cf0ed8", "commit_tx": "0x3da77269e037906d67315f749bcb13fa3f542e22b95c54fedb2081bdfdb8a598"} +{"index": 273907, "batch_hash": "0x772a6ba30b318e0ff095b688d6b99e87f929e2080add7f320e308fa24b9dcd3b", "commit_tx": "0xe6a94ea32de1ad5d98674b8d43591e7454d658a18597c90e933926fd95c447e4"} +{"index": 273908, "batch_hash": "0xfd04bf72a7c296ce224f93fdd756bbc1d6fb094cb65a731098ca2af51ec833ce", "commit_tx": "0x72438ecf6f92453a0b34ad2635857c7230ac96b7f8a382f4d062ca00e9ce6748"} +{"index": 273909, "batch_hash": "0xe67d91760e928c633c8ffdf911b204b86d1e54d3384f2383e313a5417214646f", "commit_tx": "0x8e8f3a342fc0ecee2d60624be947d683528be70584dd268bfc28aca67cdbcc65"} +{"index": 273910, "batch_hash": "0x95e838a07600280114d853a13a25a411cee9949f04b099e9dd6ec3ae024fa745", "commit_tx": "0x90544e326114fb437181f93bc396cdbf0a57447a81b6cbab1025e88ba3208787"} +{"index": 273911, "batch_hash": "0xca53cdc2971e875969c4dda49e95f1dab0188d228c3f0a878beaf9ea4c7456fa", "commit_tx": "0x299416cb9fcedc9ed817044c5cd53f52dcf11de5b86f698a70e1809b2a5887b1"} +{"index": 273912, "batch_hash": "0x7559ced94696e92c3ff1252f41e128ddaff9b915156492abd8c3dafab41a0eed", "commit_tx": "0xaad5f695d99e7688df61dad20c560d70fcb3deae77b36d12a0b87d4b753ff401"} +{"index": 274315, "batch_hash": "0x8d4c09a28965f304a86c8fb2916f749f538cc88ce455fb49b650fb7f019cadba", "commit_tx": "0xd3fa2105b4fd40f49023d3bc8d92fa1d689e5573bbf2c45fce54029d153e3c0d"} +{"index": 274455, "batch_hash": "0x4e17bc355b1546cbe2d37833c26c3b883afdecb5fc4af31a4d4d34f762dd9a07", "commit_tx": "0x28adf7e2ab40271c999c915ccc59b2ec089386209a1c998a9f208dfd37d8f360"} \ No newline at end of file diff --git a/hardhat-test/testdata/batch.finalize.txt b/hardhat-test/testdata/batch.finalize.txt new file mode 100644 index 00000000..c0e1374a --- /dev/null +++ b/hardhat-test/testdata/batch.finalize.txt @@ -0,0 +1,998 @@ +{"index": 1423, "batch_hash": "0xfe5392fbaa1c59120fa1e8b0db5d4e81166a7e2d31d40fc24337ac5c17264b43", "finalize_tx": "0x369a1ad503f208d37eedba9496f3a733c343f46595883b10b6ab93e89a2a6fa7"} +{"index": 1424, "batch_hash": "0xe2ba38b055ed3a06a0a5ce4a407c707f9639b2f4013dd4859f884d8fcf7e8be8", "finalize_tx": "0xe0e039623b83ebad674bc435114d0dd596081a8f0ac9e19a956845c46f2e3967"} +{"index": 1425, "batch_hash": "0x1b2673aff110ed2b571f2a976da5531f8c5f749396a20d7e5afabe3c8544db29", "finalize_tx": "0x42627d0d3260a990c9be74be6548373cbda48a662e26656e410283ea4f5edbd4"} +{"index": 1426, "batch_hash": "0x7d9dd949f6e8cb6e23f7872f3f27de9e49b2c529c5ee81f599b6737cec5e8fcd", "finalize_tx": "0xd8311582d3408db2a64639116156f2f1f4a767450318d7026158137520d228fe"} +{"index": 1427, "batch_hash": "0x58dcd62bea5ef21801e3e21d86a608b63e069451deacbd68d5b1b2e066724ec1", "finalize_tx": "0xe4645adcda0c3ea5eac82072fb4b99183d50eb91adf5d2f509807dc61fdcad45"} +{"index": 1428, "batch_hash": "0x05c3d03c5329ffa300bf7a5bb86ac8a1c8998a8bce78cc3086b602b4fe9bc5d9", "finalize_tx": "0x8fa9ea587ff1ee4d60affc2cb6a684181329e3ef7944e17af5db677c6d4c30eb"} +{"index": 1429, "batch_hash": "0x939e9b1c4c3171f084d4d8b15b8105412be6a8e4be3bde13caa3a4451a55a15a", "finalize_tx": "0xaced8aa23c0ef22168e0647fca91ffebbcdcde6114103d51f65abe2faad7e349"} +{"index": 1430, "batch_hash": "0x13e0ce8d5ed6fd0e347fd5378fc38526ede2aedec31ab2d79d061eeffe168e5b", "finalize_tx": "0xccf06dfbff3292d4cec9c11ad8526417ab4e6fb1660d308d0b151e49af0bd937"} +{"index": 1431, "batch_hash": "0xce459f19c1d48ed41176b440711627ed34539f5deabd0a3af39d2154b5732c59", "finalize_tx": "0x7aae10c57dd74b5ed916502514cf2ca61cbe8c9c6b09c259676de59dd0aaa47d"} +{"index": 1432, "batch_hash": "0xd5955d9c995f0e0dedcf943261ef30c2cdb3557625b0b51921f934265a43878c", "finalize_tx": "0x0512840bec038d998e8988634bed5218b4391ff0c45bec1076a27209fc7d9ca1"} +{"index": 4973, "batch_hash": "0x02e364adf62c46bb5bdfd14f1e3a76b7df0c46043a4f0ab1d39cdeca62036fd6", "finalize_tx": "0xe09031f67eeb4e155c3cb0b0547480b406e7297cea3b05e7476e5871525d977d"} +{"index": 4974, "batch_hash": "0x2d29367a6ff1163c3274dd049c114e310018e72434ddaa64cd18f03c1bba74c6", "finalize_tx": "0xe12358fe8e879d685e1ea9ec543017980d30292fcd0cf4060f718201177fe8bb"} +{"index": 4975, "batch_hash": "0x21b0c8d15ff75192e6900cb9f6dc98b8bc7cf08a1dee9ad93b05e9291fd286bf", "finalize_tx": "0x3ab192b3d6e42343a71f4f7ba6a219723341f69d0acc9c402a4289f1141fccfa"} +{"index": 4976, "batch_hash": "0xe488f400ad7114ee5589c342cc766de036b9c9106edf2e73a3f0d1eeb72d00b2", "finalize_tx": "0xb84625a4b49b7e6d405cb0a95e9bb2202d722228408c512b10a904dfa7e335c9"} +{"index": 4977, "batch_hash": "0xf22760864cf4385eea5508e98a0948c3bf1f8b557cb142fe2bf25a56babd4aa9", "finalize_tx": "0x9238651796f712c828b902067ac78d6b4130ee564ff96780b2ab6f41d4159658"} +{"index": 4978, "batch_hash": "0x460b97b5218b5b5f29e277994a795e707b2e61827a4dafe3db56125237956458", "finalize_tx": "0x1d61a45090e78dd49aad6eae6dfebf6a64b15653584eb14c39fba3335d40914f"} +{"index": 4979, "batch_hash": "0x04cf9e678572c913671a4a14573e01f232f34cf20de1d457b9d49abbec8bb8ad", "finalize_tx": "0x44384fd7145aee2676e794cdb7c00df1118f8ee1717767e5dcddd4eb84c7e9a6"} +{"index": 4980, "batch_hash": "0x6942e13077e2ab3c72e5b9d780bfbfc04baa7be8788407fbd7dbce6b32c29c16", "finalize_tx": "0xdbf5bb985ded854f5c766ddb9721b31dafc5414e55c21a906e9b15d43735201a"} +{"index": 4981, "batch_hash": "0x89ffd65f9750145a72c36cf47a5925a1d86191c61cda1af31f55cd81dd61d7d4", "finalize_tx": "0x290416d45fd2ea32cf61eb7c10d64eb74aa32ec2c1c67e3d0df13783bf94c861"} +{"index": 4982, "batch_hash": "0xf0536f932de0ee8972074a82c145c240da1385cadc7da447ece900ba4a73c59d", "finalize_tx": "0x5742646b2d18d715e32d642a88608eb8fb3d4cdbd7fea682a55c28af3a748f67"} +{"index": 7213, "batch_hash": "0x0402403d7778e65444552ed664efc69c9fef3516d5b76e9d6d38ca1efaf88b16", "finalize_tx": "0xeed7a3efcf6d270964c5496b06f25eb5ae1e653f147535d63f36992fcc9d7c76"} +{"index": 7214, "batch_hash": "0x46c23f856cc8099068e68010b5bb1a45c4f20548fde93a89981c6ef6c1f4fd1b", "finalize_tx": "0x2469aeac1b6bb83c5cff91f92bf704a1b727f07b79c75e206e1c60c321e6a3b9"} +{"index": 7215, "batch_hash": "0x93f32b737145d2108938d1bdf5cf28b4010e5993d0ad236cf43246cd9f168d19", "finalize_tx": "0xa37ef114ea4ffcb6319aa23976fa28fdb16fd64bb69238993e9cfe0fcdbe9044"} +{"index": 7216, "batch_hash": "0x5a560043df82735487c38545762b1c0484d43324759e03b23b1b9717ef3f4993", "finalize_tx": "0xb5a57e44a567de74406abe86881c5fdd74c7709ea26d8ba93fe3047917586ffd"} +{"index": 7217, "batch_hash": "0x1451aff1ff25810af38c7f9682acda708bbb23b5f97a91c8897191c7d3cbca58", "finalize_tx": "0xb9e9198a00f1ba941deb1494b86cf6c1ad5670636b8b506a97e5ad8e6022a3f1"} +{"index": 7218, "batch_hash": "0x5eefb3f4a384e0d9ce6ee34ecb878c97f593d130eb75cd82e620068cad064fb2", "finalize_tx": "0xb6591a38f8eb15474f721393fc7287d7bf5518bbbb3f98943a92f2f7457b5bd2"} +{"index": 7219, "batch_hash": "0x49ae2778c4b11b17248b73b131c38d88b2d47752cc0e8670155af0e8cdb772b3", "finalize_tx": "0x9e4cd987a7e5ce70375424b4b3f53236a28f880cd45bf01dadc74394a87dabaa"} +{"index": 7220, "batch_hash": "0x6f9389feeb18049664ddc411dd8bb1fa5689e4011c479e4def3a2eafa71cc489", "finalize_tx": "0xba87056465f0135a53d259b0280c41622dfb2c2cb63c5273dbb451508ec58ecc"} +{"index": 7221, "batch_hash": "0x53e0c474a3e027604f4c00f9a749be6a255749b6277e50a62639d4c3007f1a44", "finalize_tx": "0xace583bb658d38e5eeaf140b7bcfee9e18e533bb445bc9d07e65f0b638ac5676"} +{"index": 7222, "batch_hash": "0x134dd22870dc393bec2077e2982be8d36f75d2ae1bb29efb03d35ad039fdd521", "finalize_tx": "0xe6627beb33b576eb698e8c3b390d17fc09c7fcbd3d60f77d1bd760e6a57e239c"} +{"index": 8163, "batch_hash": "0x94d5670ddedba9a379160c05ddbe472749c13c48e249a778fb25f0cba5f010b8", "finalize_tx": "0xcc868e0a996873a944d84f10650ee4c7cd9322d15f3f50e6506a9771c71237a3"} +{"index": 8164, "batch_hash": "0xe58d292935bc5ae6950730053258ef188c45d587a576ea355bef1d86fd298824", "finalize_tx": "0x839ecebd913d4aecf6b5cb95530731e0ff7ce0592c819a2a48e841019fd8b033"} +{"index": 8165, "batch_hash": "0x4edfb0a1b6a688e722204118c6425e6a2db19e6f0d9d3a00c6084d0a3e096818", "finalize_tx": "0xe998eb75df262a85e70d9ddbc295a65e08e556447ce7ba84b30185036dfab710"} +{"index": 8166, "batch_hash": "0xd11c772d65c98731b611e148975d188c948e4ac0410539c2d87e00d58af4dbcc", "finalize_tx": "0xdb83624f3f2a7db929bdebfa24fda1aacd16cc794e8a9ed708fbb5f07b87a0ac"} +{"index": 8167, "batch_hash": "0x7610490b56463b07d08dd050ea7431b922cdf040959d37beb7fbb4628b8352f4", "finalize_tx": "0xeec96b757fcf5ce227fc319b81a303b4c2c3321aa8576cc686100548d63c751f"} +{"index": 8168, "batch_hash": "0x7d2826cac66aae3833ec863546ae888e77afcf2d7b3793474d7868843ab7e0a6", "finalize_tx": "0x35ae573b111e97b6fde8e4053f843f474933c1d55c0ccfcb4b461001a5301b9a"} +{"index": 8169, "batch_hash": "0x23d5929bbca52de2625bc6b858fff0a770d94dec298ef25cfa053a975266f4ed", "finalize_tx": "0xda770145c0a5185f5bf7019161db6c0afa8d947a581e807a5edba90abe45aaf0"} +{"index": 8170, "batch_hash": "0x4628ee676ef28fdf8d85fa279d912b2e732bcb6d69d1d37d034cb4eb08e7719a", "finalize_tx": "0xaa779b18c0f020bd3a97a9af5644ea3e1fbc03c3039d67f0177ef0da94fec19c"} +{"index": 8171, "batch_hash": "0x244ef1acfb070aa5a493362acc8b77ec5a6d7e0673a1b093e0970f2cc67d6a95", "finalize_tx": "0x6900201d240f07c7c246a8f781403e706f6921bfac3a2e926aad2ed329158d49"} +{"index": 8172, "batch_hash": "0xa780f2815a61e6ce468026fa14fd36fd145a1d7e1e9a18961c0b4aa4c36119bb", "finalize_tx": "0x296d461176b74c37fe06951c4f100201c7096b082cc17dbe09beb50aec6eb59f"} +{"index": 13063, "batch_hash": "0xc122486669ba8824a33546d04c9f1fc35447b1a534e4622d41a6ff476a242bc7", "finalize_tx": "0xc6f9b3f6d50cd9b0459307ccd9dbb8476b00b309562c1f720a0422a58ac04a77"} +{"index": 13064, "batch_hash": "0x928335191d050c8cb0de72ba5b140ac7af8aded594d48c946ddf4ba5b7ffdc8c", "finalize_tx": "0xe49047f7f2d7b8f4295138fcb86045c0a984297fb538c2477d32d9b9b02fcb46"} +{"index": 13065, "batch_hash": "0x391009026fd1dad0b4748129390501667a171217eb981e642ef07e49adb3a5aa", "finalize_tx": "0x374ead4200e4d9f38ec5e541eb31df429d13030fb2fabd4d97b397d9c3ee1015"} +{"index": 13066, "batch_hash": "0xa39f8880c4985aabd0006570c116246d9d52d8e77498fa5b1ea8352c77fa9a53", "finalize_tx": "0x00de19033c6287bf2249c3ff468ac57445f12632cb2b2bb2698397bbefe80118"} +{"index": 13067, "batch_hash": "0x7a3356d8156e3d5ee32c9b623f0d67b0c9e772a5734837d7404026865ee1420b", "finalize_tx": "0x7d168b2da423fa4300b1e9667b57fcd40068dc2fd787664d35ddd6452c3b8ebf"} +{"index": 13068, "batch_hash": "0xac0f79b37f87e0fe24d7ba3b43abeb2115858d9c6b64807d2da9426902b571ee", "finalize_tx": "0xcd4dd3f70f6a03084f82eccc195ccd3fe4fc80e538e37cbcfaae455b83391df6"} +{"index": 13069, "batch_hash": "0x28077c13bd20b86a53302f31342e1558d0098727f82fa764d5d9d94b1a7c54a4", "finalize_tx": "0x5e4175634ca10caa940edda1f7a83f89f8def22f4441fb1c4004de727dd2d813"} +{"index": 13070, "batch_hash": "0x12d5dd0e7d6d006d710d6ed73bc46a6392c39fad6ab2018c029bd4839016b9a4", "finalize_tx": "0xcdb78b8091ed69b88509030ed0366987e5fea1d0eeea0d39000ea1a6aacbad04"} +{"index": 13071, "batch_hash": "0x520851adb630e327b08810b64af3928491217e83196f1d715209c92eb5032925", "finalize_tx": "0x01778ff53954025d278d6d22e401abd37dc1d14f15665f9ac752d156960f4fa2"} +{"index": 13072, "batch_hash": "0x2f31221f381ac18d523613525ea40dbccea1c66f4529c080752f9e2aa0a4fbcb", "finalize_tx": "0x6cf354725929f8ea24048df1c0b4612fe93c090352fe2dfdf8fe17945d10422b"} +{"index": 13103, "batch_hash": "0xb2c08a8fe10f307e9a0181e86ed31fa8f82c1f7119ec582d02ed3c443847decf", "finalize_tx": "0x91a665bbeded4f8303a0e490b673edf78271c0108d906dfada0c69ce8c42b9d4"} +{"index": 13104, "batch_hash": "0xcade6ce76b1da03335983f6a72727b991589b6daf05bc58b0312d3dcd53aa764", "finalize_tx": "0x2cae296046f59c3282f58712887225dede6b878e0bebc3f9b60695faea493a0f"} +{"index": 13105, "batch_hash": "0x1ff58287305f34e0c6b6aa173b842860dbe4e09cea1eea0d01f04448dcff8670", "finalize_tx": "0xe30b73c390918f61d2acf431930211b21da763f34e751a83029fb7baa4ee76a2"} +{"index": 13106, "batch_hash": "0x8192f414a9e4faf631689e4616c2bc932d1e16471d2c62c04f897e4297e6bf0a", "finalize_tx": "0x64e37597aa3798b37e17c47ba301e5de52e63b6063fa070df886966e5267e595"} +{"index": 13107, "batch_hash": "0xe1a54eb26b05eebe5d3cb06d5df7cbffee12ef74aa93635f50f5d32f6a563910", "finalize_tx": "0xeaaaac7bdc14b77659a50af3c126ff42ef080a93328914d8e00cb46344146913"} +{"index": 13108, "batch_hash": "0x698bc0460ba16d55fc7bcafa0c33b688a100c8cb9acfaed32e49d78ae31a0ba9", "finalize_tx": "0xf907df24dcd1893dbfd32d60dc6d3444a984bd120c5b60cec6676bbb0f8c3b55"} +{"index": 13109, "batch_hash": "0xf86ef0e6738140d25bfaf4a11973607edd023d05e43b7389e479b71b9c991728", "finalize_tx": "0x30357615daa7265b49e535e5b3954111877c8362bba322f79852dcc239590ea7"} +{"index": 13110, "batch_hash": "0x40b0d0e56b3d4535a5ac997cee013b284250ebc9cba36651db3ad9b01abf3d19", "finalize_tx": "0x06c473923aa79c98f30c61f11a0eefc374f48d264fa24673ca4993643adb69fd"} +{"index": 13111, "batch_hash": "0x29152aff62e12783b7923a4146e7938650bb21ec8e1f1f673b5e987c6f93c86b", "finalize_tx": "0xb712d1b5e45dfbb25b461766ab883861079cb64ef64353e697b429d7d05fabc7"} +{"index": 13112, "batch_hash": "0xd27b36d1d25cb593c2a439ec07d3c2439ed0d48375e54a43ffa4e5556b2baf8e", "finalize_tx": "0x1c799d1d535940b00bc04c0b0bf67b8da2ce5aa16554fe23cc54498449d5d5c2"} +{"index": 13123, "batch_hash": "0x18dd943c03a9c8960788798eea75d93b3614c55cb1d20c988a1858e9a4d7d2e7", "finalize_tx": "0x8a005a1c9eca8c3b70663edf9bd8e34a54104702e17ffcec0abea10eba8d9d02"} +{"index": 13124, "batch_hash": "0x4a6a31428a43a667b502fe8696302ecc983f73a6052f980ca6cdeaace4268332", "finalize_tx": "0xcbe915e62eac124a2550462284a6c41714159ee3fa880cf257cfeba148e8c0c4"} +{"index": 13125, "batch_hash": "0x8326dba8e47ef3c4f36cbd80d4f5d3ca365f2c1e6804c5a17f5beddcd072f54a", "finalize_tx": "0x01d07cd0a3db0c2e6931da3e525b3e35e8bd54b13b451facdad685afab5bcc61"} +{"index": 13126, "batch_hash": "0x1ec96e1a0df0b7754ea614a8858c24fc8890a396edbabc6bdae174257f1abc2e", "finalize_tx": "0x4b5128534a4ea78c166beff1861f312966c23ecbbe87bd210276033af312970c"} +{"index": 13127, "batch_hash": "0xed532341c22ecb87ac2ce80b879b7ee346f82358c62a14913b14e3a9e2ba92e0", "finalize_tx": "0x60c04ea9e0f7c6a3ad626187a7389dd0ccebe7326cc201e59710857d0ba56ba1"} +{"index": 13128, "batch_hash": "0xf8cd84bc83a3b7f795535f9f3bc9b399d874706117a3278bc6e9a10115fafdda", "finalize_tx": "0xa63da192c60195ede7adb39e2fb5c60e549287edcc962b0202747001fd1cac72"} +{"index": 13129, "batch_hash": "0xc6b486acd8155703232caa8610d6afd4e07b79d34f6ef4b7c4964ff925a86931", "finalize_tx": "0x4147ff7030614e040b887e321714721dd1891a31b47635386fdb7ee0e87b68af"} +{"index": 13130, "batch_hash": "0xa4d1d86c7a47fccfe54422f1dac918a4fa64aa32e5739de49632ce55caf849b7", "finalize_tx": "0x53ea4bf0a63fa454b0e6c56233f274a303dffcf796b33fb7ad04fda5fdf47dc4"} +{"index": 13131, "batch_hash": "0x7fccba843ffe9a6b5dc8f41f9eaaf7ae66d69ebe037d25b4d91afe91056fbcc5", "finalize_tx": "0x582827402f7e2a78ab0cd72b57915da0c35cee7867723c27893ffddfdd96e336"} +{"index": 13132, "batch_hash": "0x501ff17614d9527b22fe2441422510ba8a1b995500385c97cfb6a1aa42a1bed2", "finalize_tx": "0x3f76f173197c7dc204b8a2a4474f60d12873cc09414ba73bddf1b7070faeb1a9"} +{"index": 17673, "batch_hash": "0x286c2843e77f3b28d99acb62fba0a22891dcbb93366cca266a85736fd04037cc", "finalize_tx": "0x1ab65e9a7bc3c907218ae83f2cff5004b999f2561ffbc4a2664266fe0a8ab5b2"} +{"index": 17674, "batch_hash": "0x45ca37dd4faad37103e9b8efafd107b23487585b0c6045a4ca7b43aa07832757", "finalize_tx": "0x0c962ad3591b91116a71dc214be7266d05ce418a68d249cecf0769e1a7c2b67c"} +{"index": 17675, "batch_hash": "0x20199aaeb0650ea1d078d095745adfe5612e2ce23dfa85fba37df81b7b4b3ae9", "finalize_tx": "0xd8b56507f2acd7efbbd686c4d999c8e0a2199749db1e7dc6372d6e83ff647d39"} +{"index": 17676, "batch_hash": "0xa3783c199cc78ebe0e28d4f42171855fba919530c3fdef7d3d683e246832f72c", "finalize_tx": "0xc0c27fc9eee40149d84e9ac5e93427379c211ef0c58fcdb0581ab1024130b1c9"} +{"index": 17677, "batch_hash": "0xe5603b58d6a301db299c808650a878cc151df6a325367a541e21c585c9df5237", "finalize_tx": "0xf894d3cacb309f44acf33151392128e9c537f1c9851353fbfdda2f28f6f4ff44"} +{"index": 17678, "batch_hash": "0x757535f79d7875439de4ace51ce2a0cf43f22381287d8e7b9b85d83da43d22db", "finalize_tx": "0x5dcfc4df4a783e70ea2d5973c6627f6d700386ed5cb5840605d474118b9764a0"} +{"index": 17679, "batch_hash": "0x98342e1bbb54a9bb301ec0e7f91b80d406ba94c33b6dd0b0e08648e3c9b3cc09", "finalize_tx": "0x01182d8726150ed0cfbfac5a763feda943652bccbcd9a2573ade404d6e8e0ecd"} +{"index": 17680, "batch_hash": "0xdd303461ce9eda0335b6f4b13518ca05c3e84ed3de5dca812332498a2c7e9f4b", "finalize_tx": "0xc17ec7e49f305abecd2a867bcaf230e5b1bc0214118801be392486455e10af38"} +{"index": 17681, "batch_hash": "0xcdea0698c5b56e39dc6c1dc462bb586939bc1a213c4123264681195d586e7860", "finalize_tx": "0xcb2be261fd85f23bd2fa93bea725986529604f9043700b1e9798a7827cd44e2e"} +{"index": 17682, "batch_hash": "0xe0b89bc650c502c166d289999b4f3af8ea115ce8faeb40d29dd6cf72af55c332", "finalize_tx": "0x1eb8d5862cf5d2983a57f1108cb71a2b4d994a39ab0df97d35f22d7049d15e94"} +{"index": 20013, "batch_hash": "0x474176383ccfc5140ccd9443c91e2686b374501c5f36d025b9584d23de16b07e", "finalize_tx": "0x424c477f83e4de214f1a60f400ec26f9f1c46253b9f7aa9721abc6b61be99962"} +{"index": 20014, "batch_hash": "0x346a41ae1fa0081f57440092b405b0dfef6048228a949d0ca8bacde98bf1f9f7", "finalize_tx": "0xec238338b17692122bc4148b5efb234d5ca8b16e0ea5e91e8400815fd2770593"} +{"index": 20015, "batch_hash": "0x7b971a3140f3e94047e7ab7a40631eb14d4ff0ebec0163a63c1c275a5f26e549", "finalize_tx": "0xba508ab7af548664d6460a6a1b38fa1d2d5fd0fd76c82b99e3e791fbf2dfad92"} +{"index": 20016, "batch_hash": "0x24466782a3a06b31d10e59244429bbc9adafeb7d51d082e33c1066dcf3a5d12c", "finalize_tx": "0xfe231dfb443872807b6f14af3cf713c62f18c85051107cf1f8b32641cb155a99"} +{"index": 20017, "batch_hash": "0xdb0c76ed807dd9982b58b34cb88c352d9a84c445b185790429c361c030ad3a0a", "finalize_tx": "0x06157c9b613edcac9bd1e7e3b257e1ea485a3cb68f5733e94f19475e217d670e"} +{"index": 20018, "batch_hash": "0xdb58c5ffd1ccedec8ed0b23a81479488112d216dd44bfc9f449179e87b6e7252", "finalize_tx": "0x1b8eb0c3264f2f9dba74acf49b9565d18047e3275bf7472d104efc323a25b160"} +{"index": 20019, "batch_hash": "0x028fb14418ccda706c38d7b995c0074fc29f1fce8d31299de61345766e5e233d", "finalize_tx": "0xa6b7e6bf4ad4ab5316f662032ef71e36dbaf2783e5b4a1e8bf5c45a9edc148f9"} +{"index": 20020, "batch_hash": "0xe25ad7cb9cf6144e28784cc8c9de39cfaf980b4757e15c5455900019a8d8705c", "finalize_tx": "0xbeb11790a72a667d4312d3909c5448f3f61de82c85edf82f97575e798721043d"} +{"index": 20021, "batch_hash": "0x1608662b82581e8bd91c2fa169c15803b2b01b3c623759276f069c5ec653043b", "finalize_tx": "0x0c5a0c7edf7ed6ea9568c8d685d2967d58dfc7da1cb996270281b3247dae2326"} +{"index": 20022, "batch_hash": "0xef7c4f9edd4a0302b0c042fb0e13c2ed00040d70b39c8e9231dbfcdf5879e9d9", "finalize_tx": "0xa10a7050cd06b2c3d29f044d6f6f2a31ec66e63dfa959c289d22a7268a5866b2"} +{"index": 23203, "batch_hash": "0xf6f6fa1da4b81ea06539a2ffe4da931123fa71003ad03ceb07eb5f8bd4827511", "finalize_tx": "0xde578b49678042a843fcae62bd9087582f25aa52939d8b76c62d5d0fdb860574"} +{"index": 23204, "batch_hash": "0x145bcf5cde901bf4d708150f73e6bd0090a39af7b6977cf0d295538469e4b850", "finalize_tx": "0xd2e54d65ed764fd181a12d6527eff32264e22d028968ab470e233941b061df34"} +{"index": 23205, "batch_hash": "0xedc42ea54cb2b009fdae2e7429f5329d55fde877eace27a3f4de856e7d23fb83", "finalize_tx": "0x773a9b29f7345bdf5e21df214a85a5d1f0f30b54123f1b60d9e3a03f87b6b16e"} +{"index": 23206, "batch_hash": "0xc81cb8ee4142e13eac53f1f0f8fd41842e7f625cfdf8449b85d6f7d60d4e51e9", "finalize_tx": "0xda60312ea88b7547e1049704d2cd4cac6e19105f5419ea95211d5a06b1845e4e"} +{"index": 23207, "batch_hash": "0xe9966cecc99e71cc92b04e7d2b2e96751fa07e947ca2d62ab46672ee164684c6", "finalize_tx": "0xb90e4ab0cddc8c62dcfd0df904cff978d118f8af3ed7332b692cd0ff9082b035"} +{"index": 23208, "batch_hash": "0xffc1b364d0f0bd912f06d86029b312012541c8b679a300c71bd882a9fc65993c", "finalize_tx": "0xab81c24ea325bc7ac0f316019429eb97ecb013c98413e8799af12fe6702ba828"} +{"index": 23209, "batch_hash": "0x4f8d553742d99a3bf587d989e1b90ddab45c080e985418f75fde8348cda73e2d", "finalize_tx": "0xefeea1cb4e3c0f6a936f201e62aee61e754e987ba372f349177358a2cfc20994"} +{"index": 23210, "batch_hash": "0x458e45a2413f30381a2540be69ad2d7e4adc82458efb119938423b7cfe9806c4", "finalize_tx": "0xc07b678c0bdcc8f6c1385a2f1e5740eb13f15048a458b2f6aaba7754e220a33c"} +{"index": 23211, "batch_hash": "0xec4ae40f6e1c2bd7e4551b8095bb58f3745c968ac0a5ec1b4e1f168e109c7fe0", "finalize_tx": "0x64e4b2092ba2e19b77d4a4608fe1bdb9558068e42400943daa5dedacfc075cef"} +{"index": 23212, "batch_hash": "0xe1b4a72392a81f42d7d60d77f4c222efffc3a59c5e024ddcc164fa5b3e210c6f", "finalize_tx": "0x4bc71a204c84204b8f94506cfa5d3ccb2fd88abd25e9b3135359a4c97dcfccef"} +{"index": 26453, "batch_hash": "0x8a50b400181c3e36891ca1349a80aaef214b72773bf6768bb5dec3f94efa358c", "finalize_tx": "0xe74365a3388921c705b48d5906fcb6c51e5e003bc810c8f617f1868143d2cb16"} +{"index": 26454, "batch_hash": "0x39fe8b8b303f27a608eedb4d6bc112dc404902830babdd3449c6535b355d5f68", "finalize_tx": "0x7287548a5d178bf9aabcc4e9a5f55a6cff7659b26e5357472697d6710a0221c0"} +{"index": 26455, "batch_hash": "0xc51c6c0893b50429c3b03fd36122ce63f8cba9eb762c631b51684353c18a2690", "finalize_tx": "0xd57f904a169aba8c765a23f82f1fc7b9530530338dbd29c6b5408aa72d4eedda"} +{"index": 26456, "batch_hash": "0x8095b621debe55234637efb67dca22397445955190eff021c0ff06f17abdb5bb", "finalize_tx": "0xfca023e70df463e6b236931f4daafdf5e9c3011d639b00226a29757cf0888220"} +{"index": 26457, "batch_hash": "0xb676c27e9d20c0779491532fa46aad9e1f9cdaf073cf69010c5475aec7d7b2a9", "finalize_tx": "0xe8b18d35b5d10a4dff5641e95e81aad0d3265bf87d277d04ddcc0416836d4132"} +{"index": 26458, "batch_hash": "0x265c01ad44aa5ba90dc4d617329c99c20359f03dd6b8be7cf2ae7f1df9ee71b5", "finalize_tx": "0x2aa9da73ef3ea762d8b5e4475167e9a491a4ccb4ae5aeb6218f2d3321842621f"} +{"index": 26459, "batch_hash": "0x0c7229cf7570c0426dd7792ae506ebd32915822e0c83e549ef24b42a7a9f74e9", "finalize_tx": "0x1c6a198b1440c5ec989f73117fa8d99b77f96b15ea499801b9ad40b594c93535"} +{"index": 26460, "batch_hash": "0x0d5f752fb15a9a886097e6774c0b8c5bf9cb8983af3217a7cdea49c61b4d5d05", "finalize_tx": "0x893b3ee17fba2715c7fdd93131b861fe553e1576ef2fbfd07a39d9bc2ffeced0"} +{"index": 26461, "batch_hash": "0xc07b4ca0fce7052451e3fc3a81d06b32b63fc98487a0f7f781c06a5651ff4911", "finalize_tx": "0x9f64176a46e0b7274332f6cf82dac0cc966b33f48e3c08f057927150f0643a0a"} +{"index": 26462, "batch_hash": "0x3d7b89cd126aef2e8daf5f72b14217d6042f619042eaec869f18fcd1fc332adb", "finalize_tx": "0xd328bdae7dcf6c70ff23dab52c7eb1645d97441df6f4499ea36e1bccf16e2421"} +{"index": 27953, "batch_hash": "0x3557c7d9bb251b35f82924130cba9cc2c9ac0e7fd5709c1810098a03ee4975dc", "finalize_tx": "0x0fa03db61ef6e2b230ad4e686bdfac2f809a0ae8d5d70d25bd3974ea9426cba0"} +{"index": 27954, "batch_hash": "0xe00f3ffd42af2664c89bb231367ddd050705d12c53127f15245a08d5ce7954d1", "finalize_tx": "0x2d74571e37ab355a7b9176bcb7dfd8c3e1cf6a7a073b7bd7e0a9dc6d46849a86"} +{"index": 27955, "batch_hash": "0xcff0ed0da9833757f7345f5c84dd68e9698384b2a2de1a7be72ed8f5864d278c", "finalize_tx": "0x17d6a067c8cce8d360bfc4cf4d964c529c53769273b1943c82f9fd41f940e022"} +{"index": 27956, "batch_hash": "0xc1a75d8d7c7e3cbcf00444273768e0275144ab2ac204f3b3a1417c98c024bc89", "finalize_tx": "0xa0a2d7f7908d2d68a2399604ae0d141af1982f34a76a110094990d42714c0c5d"} +{"index": 27957, "batch_hash": "0x2267b948b046e3128c14859d48b94506b857d7952ee3b51c8aed5eeaefaf683a", "finalize_tx": "0x5919f057271556ac0d21b4f17dca89a913a2bbd267dcfe7f1ed671d0be1feecf"} +{"index": 27958, "batch_hash": "0x1466dda1a9f0403ffc1d2dbce97bf756d2056011812a447172d11d5f301619a1", "finalize_tx": "0xc30b9097cb601325542b76a18222c4a14f0eed394240d38cc17a3abccca73d45"} +{"index": 27959, "batch_hash": "0xe12cb793c6afa5e838ac78db8304379212e794bb4025695eb8b3d151dddd6347", "finalize_tx": "0x6608c363b39b80ae5971dea14fea77545036d9ef3d978b6b7995165f817b9c09"} +{"index": 27960, "batch_hash": "0x691a16838a9a1172cc87ed2300cc60233ea7a7ed699892d87235cc375c1e66eb", "finalize_tx": "0x7dac42906252283f378179ced5d20d3e5fd02279ac0225781918ed58b0a04a2d"} +{"index": 27961, "batch_hash": "0x5ccf97d166c8c83df4480b3acc3d9a537f1273441d30bdcc0bbde50199581fd8", "finalize_tx": "0xe206a73761238c36d44472c02ec62af885ef42f86da7e5c5e37030edac128d3b"} +{"index": 27962, "batch_hash": "0xe166767d1f0c816586c681b5dfde9c6f7199d247d70f9acb626b29a6eb8556a3", "finalize_tx": "0x399b158886f272be8b73d3ad79854992a4df1f72a8ebbba0a78fe14f28840b84"} +{"index": 28423, "batch_hash": "0xcc02e7d32a8657731e563747c6185d67ac34dc531afba852fbb6673a55652fca", "finalize_tx": "0x5ab7dd6d81f93273822981129edbd422eab5d7e3380281da9bf253b59439cf2f"} +{"index": 28424, "batch_hash": "0xca33b944f46d562656ffa2c88deee1bd46889dc5f473919d3aa8a5fe110372f8", "finalize_tx": "0xd5448e6c2b72ec9e599a1ce2d416143ca089251742e6ae67979f68d6527d77d0"} +{"index": 28425, "batch_hash": "0x46c97e73d6b3f70987de42210774e05619769de5c2cb9adab76c7f0d4f544e03", "finalize_tx": "0xdffe50d387c1d6e2ab3068843d6d50d6e3a31a3b32cb2286162fb927f8123bc1"} +{"index": 28426, "batch_hash": "0xf5b8b7195439c73f7b4d6803c9ab5ca96b89176f369f686a4edcc21d81e16180", "finalize_tx": "0x5f133ada279eeffefa2e6e5b9be54ed8769ccdad9c6341de09e8261ef0bd6d8f"} +{"index": 28427, "batch_hash": "0x2be5ef4665866d30a36eaf98b893e7175a584fa3c7f4d25753f9e46f536f0ba4", "finalize_tx": "0x7d8e2e2d250a2968ad5330e558633ddc3cf32f2ce2f858f743536ea23d374a24"} +{"index": 28428, "batch_hash": "0x264a1f5f5cb7c0fd83ff3162df2d720a7476f9ae47c7e06d35268a48a0f8523d", "finalize_tx": "0xd962799acca52f6c60439e7d3e228d0e0c745baaefec44b9fd73d0152f82d637"} +{"index": 28429, "batch_hash": "0x2515c5c6a57eb321a39af97eee00fd5fbcb419e811acabe8383c6a3d99da6621", "finalize_tx": "0x62c26f71397080548026e5a97e4022f4662e733e63b1b7bccea06f96cd56a335"} +{"index": 28430, "batch_hash": "0x1f98133b4547562842c540619bde9bab82cf66820532d0f58fc6caffbb963058", "finalize_tx": "0x519c77ca835bd12ec994eb761ce2aeb19e926c9058e5290f57f028bbcd46fece"} +{"index": 28431, "batch_hash": "0x245f8d3f13f88d957ffb01b25c2cf113080c41fd8862b804aad8bce2619005ca", "finalize_tx": "0x29e82591d85cd48b52ca8a903285062b2b2c5cb89611e15ffe51ba14918df711"} +{"index": 28432, "batch_hash": "0xa735602e121fa8f8b0ed2714a3daeabc4d8e32b20d0c9c0a5b7e29269ff1aef6", "finalize_tx": "0xe6dc9bb4f95614d9c3066e251beee59c3e8edf4e42d080be60ec8d5e0b8bcd22"} +{"index": 29613, "batch_hash": "0x6476b5c447017911236a9be26874978cad595ed5208272e833a3d76a68a63cc2", "finalize_tx": "0x00c0602e55cd27c3a05ad4ff48597bd9dcc41fd2046789a618f778abbf085ba7"} +{"index": 29614, "batch_hash": "0xedb04ee3303774d3ba11743a9c34a6c88c500b43a5446c4ee55893cda749b395", "finalize_tx": "0x4bc0f5f3a39cde6edfacc3b5691eef1864a706b49a3dc4a2a7414c3369218b37"} +{"index": 29615, "batch_hash": "0x4993762937314136c05d1072045c9c0e0ecb8fd8267f27fba2937dbb91da441e", "finalize_tx": "0x501b5e9691e730016b07b29fd3fa620b690744e8205a1b607e4a96a12e401bee"} +{"index": 29616, "batch_hash": "0xf4dc62517a7b7557277c9fee1c54c33c367fbbe9d4d1c714bc6a40a50841aa29", "finalize_tx": "0x75f6b9ef57829e2c1ee16706a84ed58edd6d61ffc2e42a30be2b0d88006efc5e"} +{"index": 29617, "batch_hash": "0xf51e11d0d2c6c6276a847a1821826b573a12e2bff44ccabf4db5ece8c0289466", "finalize_tx": "0x13f59eae7ab1729732918f4a5636db0b381e24cad873b3e5cbe60a7baf810d5f"} +{"index": 29618, "batch_hash": "0xfe5610172e2c28c2f22c3457065a6632977646b616ef01035f5a0025fa5fa252", "finalize_tx": "0x543add7f9530f7c2b4d01a974dec93a7260ae37771818846e7dc1d7f7dc8bf32"} +{"index": 29619, "batch_hash": "0x91ce9976e2c5a7c5a57985f75e4f346391d8e7fd97d3abdd4b90be84ff9a9c79", "finalize_tx": "0xd145f101a680e85295c37d90fe369df48f95f527c4416ea6bacc4a7b3bc79523"} +{"index": 29620, "batch_hash": "0x95b30519d1e82e2435da673e8ddf9923cd7722ddddd823048be74f2f060d2639", "finalize_tx": "0x32b18ec6cff7cf5ab69d910db20f5c424fe8305905e98ed59a15f36ab6455224"} +{"index": 29621, "batch_hash": "0x489e7c3b85c289b13e3fd98600428282380ff34c8d6a5a08ea0db414c1970ff1", "finalize_tx": "0xcf9047f2b355764d7ab25d33acc78a30ec936bd85f7a8c4b4a5e471bba46478f"} +{"index": 29622, "batch_hash": "0x959c7f4a3bdb6dfff828c2c78d15d088ed1594923ba7b34df8433929c9b8c0d1", "finalize_tx": "0xe9255738cd794044e7f0857906f750bbb6f7a272bc4e172d966dc05b5fc93c1e"} +{"index": 34303, "batch_hash": "0x27c41cfb92e41c981c7d73aa83336ab8a77003471d35f8ca2d2605346bad61db", "finalize_tx": "0x052fe180db981c5cc9f2e7047cb6e8fdc9229e55041759ade6c2c87f6525f437"} +{"index": 34304, "batch_hash": "0x9b75ae51649c440e72dc9218515cbcc6753d20473bc2a7e8ee047d385c3aa315", "finalize_tx": "0xcf1b58de589da25e9f713e3dbaf80b167dc08ae0274da1117d203c46a3601f45"} +{"index": 34305, "batch_hash": "0xa8959b4668432f20531c39c4db341e1c35607cdf7c40ddd89b2fa363e79b87af", "finalize_tx": "0x54ea84e03c113172f9472930e887f1ff7239464cbe1f12589b62d39fc7004182"} +{"index": 34306, "batch_hash": "0xc0fa3b4fe3db9f372836b025590740db022afb16c18f93970741b3a7c930f8c0", "finalize_tx": "0x843972c41c60f9ed075942a80004790e27ee09ecaab1f40b0ce247f5d3e7400b"} +{"index": 34307, "batch_hash": "0x321ed4a3e5cfab657fc634c9dd5ccae7d2c921a7e34ee55f641bd49d94229d8a", "finalize_tx": "0x2a0c57e0798569fc1589325a21b0ca1f2d2ce4953a1a53a7a5830d7d5134d33d"} +{"index": 34308, "batch_hash": "0x2e2aa436f36703f09b0f579986921aa58c6b3303104c24885663243d5a2fb3e4", "finalize_tx": "0x3bb1cf7fd7ae3b34be306a4f06ce1d34423b82d42325834e4c73117ccb5aea0e"} +{"index": 34309, "batch_hash": "0x9a5f64125933f770e04a9ecfba842e39954e3a783092252d0f66781f03298b6e", "finalize_tx": "0x7293d6212e400bc0ce0468e2c50ffe3cc90a985d5d3d7f12f690ba4a13fb72ef"} +{"index": 34310, "batch_hash": "0x7e40100f725c59a16b96c9fc15abaf2f35789f6d7bdc1ae32e195d04344bf546", "finalize_tx": "0x38cf5cb5511bf9f269e3842dbf3cda3c0f2324db34d509dc18d02a20f052c1b4"} +{"index": 34311, "batch_hash": "0x8cf5ce2539548b42965ba4e11bf6b25e4f17662d316ecdf6fed2fab79ef7becc", "finalize_tx": "0x0d6ced47cadcc36007b7e61cd46cda12aa94d6bd6f7839abadbfef616b85606f"} +{"index": 34312, "batch_hash": "0xbb3d85266d651a93fc86efb976ec8fd6877e21a145ae03d24fe6194780cc4a3b", "finalize_tx": "0xc7319052b60d20d80fc367d3e4b7b63661e98ed8a25f44803504022bfa834522"} +{"index": 41053, "batch_hash": "0x355e475438f8685e4acaa8e36ca4ad4a38cc37de19433c11db9efe895f167c18", "finalize_tx": "0xe36b22d704e36f3326b50a519ea12348fceb3bf59a3f0d7bea538f40df4058d5"} +{"index": 41054, "batch_hash": "0xfb04bf5350495051c6759793116758a460b4ba9db6a59caefe1dcbe2db2adc97", "finalize_tx": "0x1579bec22487947b4e1fb9fb87f96d4eb9d0fac6564d3337868d72af10459011"} +{"index": 41055, "batch_hash": "0x1d359b621895b284af858b87ee4124fd9d8f2ecc3efa05eb9a8788020b6caf61", "finalize_tx": "0x5d2ea6022f77f112f34e5b65e7d9dbcac2cd57b3ab2ee9aacd4928805dcd5eb8"} +{"index": 41056, "batch_hash": "0xa7eb778558185fb6e7bcc0f982230b8b9806d53b2bece8d3bca2429338fe24f5", "finalize_tx": "0x1a4104e271c34ecc6cc8f3fdfc38ac226eea8a6af3f2acbbe32238f5bf3318b9"} +{"index": 41057, "batch_hash": "0x20f05217bceb4799790e8a81c678751280413b2b2d56cfa438d373c5742bd403", "finalize_tx": "0x29b6464fc3ad135b073c88b58101a1b8100f0b6182ee3e94b78a41b77322ff85"} +{"index": 41058, "batch_hash": "0x3a02e08db7aba6317fdff6ab6ebfde7fb539c47a3eddd2bb1bdfb58e499a4cd9", "finalize_tx": "0x4c773dccb6097956816803d2861d14fc092183f03f6614eb7cf7b56c8f22e14d"} +{"index": 41059, "batch_hash": "0xb966c3ecf5b53756a26e0758c4d3d5dbc42893f1e704a18e4afccff455d7349f", "finalize_tx": "0xd006349180eaa4a299994a3c4b37e4207c51d55004d764a07f843c2c14ed6632"} +{"index": 41060, "batch_hash": "0xb242ad562db8be5c121ca260229d70acb93118431e5d908d0d1703b7f911f01c", "finalize_tx": "0x8190bb8cc264e72372fec8a8eafa51e2f06fc728e5a41ce168f8513e2d31bd81"} +{"index": 41061, "batch_hash": "0x7c72bf8358b45b413c0a869e1c0434501c4f65ecce26faa7f7f9ac7d7e2a4e75", "finalize_tx": "0xb6182f64a01b9a60eda5a6c8f78428b8b00e610a907f0de6fdcaf34ecd08c64a"} +{"index": 41062, "batch_hash": "0xb2c1485754e2c822c53fba260a446796d44d5fb87f25fffecf35a00f97d1ce44", "finalize_tx": "0xe86df60b0fbd06bcde45a901c1b9e4f59fe3131e062ef49dd3ebfcc546d9812f"} +{"index": 42473, "batch_hash": "0x71f4e43eecb60f1fb1c6ef49b9152e4ad527de9d670c62ba248264b5b24f1d87", "finalize_tx": "0xc1f30bb1c2a30939243acba5fdfdf7574618e81d9d5bc9eb609cd3ee8256e4ef"} +{"index": 42474, "batch_hash": "0x11161af35a69677d040bbeaf4008fc5d84ca291c81e978dd212bcccd362b98fb", "finalize_tx": "0x98a5a3661ad4b214a9a44e9227397105ddc9b7c7df3098ec5a56d3937b768d65"} +{"index": 42475, "batch_hash": "0x907e432a9e3966098b0fe9fa12f1579afdf56e015cba7d3daeaa9801fa7d995c", "finalize_tx": "0x2bd4a0d81c8f43ab4ccd540260d2a2b0a26e65ccef5809ccc2d6a70698d2a7d4"} +{"index": 42476, "batch_hash": "0x9f6ff9c852a3dc4241e66298e049c37fd316c7000315e890c00e95e9d93ef2e5", "finalize_tx": "0x9bf0e9169a7b8646aa7270df27b04e3149447c7735540abff5bd250c810d9645"} +{"index": 42477, "batch_hash": "0x5f6956f8321c2f1673fbc8f99d42aa7dc26fcc47b6c3e16ac603be45eecd0068", "finalize_tx": "0x691959797f7431d9020a6dedb4b2cdf419fc0d2a9221d3fbed5b9faef1063d3e"} +{"index": 42478, "batch_hash": "0x660fe155ca33b85b007eec84863613198ac111ecc29400eee9c4c7294c256b13", "finalize_tx": "0xff77c591f08520eeafd861b80f071d35e10ca8461750c69e01608e66017a6176"} +{"index": 42479, "batch_hash": "0x3bcf676658f4f4dfe94113cb27553241168f69419427f2124ed06342cf4a5963", "finalize_tx": "0x4f8cc525fa162570be9a04ded6aceb2b3a800a8d46137bb9c01f8143388f477e"} +{"index": 42480, "batch_hash": "0xe2bf99ae1603b1744b9c328305b187af5d9d5964be2f034542023378f6b7da6f", "finalize_tx": "0x51369913653438fa42fef19cf8c2d32770b0caefe6f5bfdf33c95370ce42b057"} +{"index": 42481, "batch_hash": "0x884f64c528facd9bf4e21193e24367e9cb88a5049db800f738662c5912196562", "finalize_tx": "0x03ffd8b5bf9a41025a014957f6138090fc5e149ae7d14fdca13d0483af6188de"} +{"index": 42482, "batch_hash": "0x06a002c491692677b43d4bc1dd116aba992e0334267d8290884e29b5a9618184", "finalize_tx": "0x4a70b355ccad934acc08518cdd584b9a12c2542ba6a65b08f3f9b8f001ca4728"} +{"index": 46993, "batch_hash": "0x98d915f2553ca32cda83c7957c98d0d607a3eed44bf7d740d65d6b98d1ce393d", "finalize_tx": "0x577aabfc7517079c47bb0009b9590d2a4ff145263ad0aabe41f29694bee6b722"} +{"index": 46994, "batch_hash": "0xbcd1ae02c7d275f86c0dbd37d6510aa49508b7da3843f787b218d07daef275d0", "finalize_tx": "0xd388b6858fa23487602ba81ae0b13b618f099ebe95c41f9747332493a5820c7d"} +{"index": 46995, "batch_hash": "0x90ef5944847f924bbb31f49d3aa62f4c0082b3efa5708a13c3655a2681fa10e0", "finalize_tx": "0x2a3d78c32ff03f5e5a985a16ff48f1284c3345d05fed6f9455a23628abaf65c2"} +{"index": 46996, "batch_hash": "0xd966b3fa5eb6c82f00a39d508f5fbffeca666358e7866aa6b8339b5db8d8e173", "finalize_tx": "0x9b5aa3be91314a0a773c015a74f06673bcc2a44708483f20e1670f8223b1946a"} +{"index": 46997, "batch_hash": "0xdf54d8778e755ac12326bc6fce6f80adf3140e7f0a574c6f299f0e1301ab249d", "finalize_tx": "0xe52be4e95aeeb6f73bdf41cf5475f680c9540a45605ebadce104e97793d126ea"} +{"index": 46998, "batch_hash": "0x023ac50deb4873483d305fe2876c3f88c55e78a3d597de924474117de4d494a0", "finalize_tx": "0xe2548dc16bf687c91f5319550451771b5ed12405a5d9ee630e35879c7e0e4533"} +{"index": 46999, "batch_hash": "0xba404f0b389f88581765d85d14e2cf8a259191f5ba0e2e062dd61c401b9bee53", "finalize_tx": "0x1659a03d9e1ab26ec6fccd7030531c5c0519a567b70ef516bedb04c82ae7d802"} +{"index": 47001, "batch_hash": "0xadd287470885fd82155c07cc5aefd0055942a0ea5ac51f0cdc3d5d18ccdfcbec", "finalize_tx": "0x1593f66fb665106af954cc2a0951b49df6b77c95dd58d58fa73ffa1f079971c0"} +{"index": 47002, "batch_hash": "0x2134f4e219baf184e58972f83abb9b5a1eeb43ab12a9ce93b8ed66913691f15e", "finalize_tx": "0xef81f6abf9308c8422594faaed70730719a4e3a1d4d2a13fce9cde90f8bf12fc"} +{"index": 48173, "batch_hash": "0xc93071ed5cc4be2997b5fc5359298de57d1891f541cce3e3e22f2804445b5224", "finalize_tx": "0x7e98676372cf8a182b932748f30ea8d27ac90f960655e59413f5873e24e2d291"} +{"index": 48174, "batch_hash": "0x3e023e32aafb1068ce4256077033d931e714a2460ad72c8fb29083e98f32de18", "finalize_tx": "0x2f6c42462635889800afeaef4ac6ea33d289cb3fa1179c827389b1f64ca251c2"} +{"index": 48175, "batch_hash": "0x73002eb34ff2b164a83e63047fd9fb4095ec6d5f3fccbb2f3c40998d5b10ee20", "finalize_tx": "0xe834d406d5c059740966b5901d7dd06a22d27eccb27653ddec45348ab9e10fb2"} +{"index": 48176, "batch_hash": "0xb31980b8784eba79cae3566c08cb826cc00c5e14a4cea8eb185fa2b2c77d2cde", "finalize_tx": "0x9752665b0b7827dff6d1f0ef4f3368a4621ff06e7e416341e02b4718f958495c"} +{"index": 48177, "batch_hash": "0xb2c4322d1f5d157c9f10f86d948d349933bede66ec1ec05b4be42d29755efdcf", "finalize_tx": "0xbedb07d54f339535daa6568648c1696af555094251881115dc99a49c3ff49874"} +{"index": 48178, "batch_hash": "0x588d6d9cc14bb4c274d46dfd637fb6c3212f1b270bbaa1693ca7c4ce41b3052e", "finalize_tx": "0x8bf3cb8f5e708f7f0202c137f4266cd0bb39cae23618f0e28ccfbd6e66f81733"} +{"index": 48179, "batch_hash": "0x72df79a6b8caa82687d98f0ec4dac09b2862d084167bac5a235226eacee45d48", "finalize_tx": "0xefc7f5948ec17e2e11b75c3205879e233e6029a72970d0038461dbffff84975d"} +{"index": 48180, "batch_hash": "0xc19a57c9c9c55c7f1210327da8c2a0229b4bef1da906a64b751e6323e9c1d362", "finalize_tx": "0x2416b0cf973f06d4b0aee658fc5d223e1dcb72edfc438a9705ac91940a8955df"} +{"index": 48181, "batch_hash": "0xdf8b3fe3a3f17e28acdfca1b639b3d941961fd906bf0381d35554d77fb11df08", "finalize_tx": "0xfe70fd499b8f3522ef15f2d3cb0dfda8f50f83becc91137d2d4bd4be56a93114"} +{"index": 48182, "batch_hash": "0xc7663bc156b53cbb663873ca7bde0a69f6a81d47fa2bb5104cc039f644a4c2c1", "finalize_tx": "0xbeeb3a13f88c95a4afaf7a8988b12c7310bb3b4a77ba34f657a2df9bf4501fd4"} +{"index": 49003, "batch_hash": "0xef973f193a375003c3788383ef58e99f91cc72bf2f81c9bda283704cb323b22c", "finalize_tx": "0xe154518bfd842e9463d599b7113144b63b96b30163642e1ca66d6434e9734609"} +{"index": 49004, "batch_hash": "0x9a184bf46134dc4c06d9602d2b88c4decb2cbae1cd76974b1fe87e744ef4804b", "finalize_tx": "0xb204b239d347cc59b90727d3059c8f555dc4d1e484f3eb088e6cbe1f367fa88a"} +{"index": 49005, "batch_hash": "0x735b3c5ba98acc84fe206f555b944f6c76c63ac661a2014b509aa3c14b24315b", "finalize_tx": "0x27a6563ac2db0e89dd5df290db805ed15b1059c7430a05cd20eba8da4b0c0e6c"} +{"index": 49006, "batch_hash": "0x48dadf4907631c7e01e961841c306321fbd91eb687be88ca3eae4b2ca89a24f9", "finalize_tx": "0x983c07779f50225b43a2c9a1c5f718b0eb33a91737c3526ca3bd897f0987f667"} +{"index": 49007, "batch_hash": "0x49c84400e06c5eff02d7326c88142d752c088fb8bb4f79cdd18845b34f7b96f2", "finalize_tx": "0x9c0b7f71b375470029712b792d484869ac059bae1d9f65ae24a4eb7c3d2a366c"} +{"index": 49008, "batch_hash": "0xe2ef5c473eaf9d8946020f4f5e518957a8ce0d6979fe99afb7e46be6d588ba55", "finalize_tx": "0x3146ce5747b703f2fbaa96053dc6c9309582f4d21261dad17abefea92fbe0d55"} +{"index": 49009, "batch_hash": "0x0e43de61bb263361131387a25157b256d8105d1db18e0e07271f6a97652f9240", "finalize_tx": "0xbd9320bc51430c075203af99a51eaf72f37d63ddcbe82623373921be88f9cc6b"} +{"index": 49010, "batch_hash": "0x2e6b5dc7a79fd667777aba32fea232da62c3d856f36bdee526fde47f54f53f10", "finalize_tx": "0xb3971fc12618cd4998e42460a69c9d576834b7b5c7517efa0c33eda5c2e97b92"} +{"index": 49011, "batch_hash": "0x9e40417b2cab51e96f951a1417626c84d00cd22d054bc35b3c711e5b720841c1", "finalize_tx": "0x5bbfce608f1e20ae900c9797508854b64f8871237be940ca1871e989da0388bb"} +{"index": 49012, "batch_hash": "0xdcbb80ecbba36c9e908e805a6a42be19a7bbefa12faad2c54d26dd49473b1914", "finalize_tx": "0x0933725856f6ea7a576eb462299a5dd2645b021d9d2efcad464378d3891ae83d"} +{"index": 52123, "batch_hash": "0x629ea351a8a8e928112f134997914d5487cc2f7e19bdb9d5a0d92bacef9f8a34", "finalize_tx": "0x8c17583201c627dff22473a74c257399a0c9ad4a79b02d88e52cd0bb48da5578"} +{"index": 52124, "batch_hash": "0x3dd8c7ffbd55bdcdfe2bacde951bc85d7d572360f2e7ff86187ea6c3f5d4100c", "finalize_tx": "0xb14a81483541f3451e91be021a6a1a34484396ce10422d2e7bbefa33b3493650"} +{"index": 52125, "batch_hash": "0xe65684f4112a8b82ebb5d3574b3b8033e1f56f3e0e67009c9308532c45d81d0b", "finalize_tx": "0x4302d15fdddc433cbc61df94c0bc6342c57684f3f57e9d6c34defb9c60a14bd3"} +{"index": 52126, "batch_hash": "0x4ec2bea98badb513cd1b066d74a04dd39f689222befe543d2876f6597a168c3c", "finalize_tx": "0x70d89ec0aac3d1dffcaba3ba053d53fa2caa4196592f9834fe14c85c745a0bf2"} +{"index": 52127, "batch_hash": "0xe0af84b2f57d2de9936f57650e0f2d513c92e8584b8c6694f3e3beac4ab7d59d", "finalize_tx": "0x4a5ad7dbae7489a2e7ec4a06e1d94ed6af3bc3d0538cd01f6d1841c8e69e243d"} +{"index": 52128, "batch_hash": "0x8330e962c0c4bb074c30cc64ac53d4621b5136a5d24e913bc221e0853e997ca8", "finalize_tx": "0x279d7d6099b0528d8f692c0ed3157b54dffe5cf11d892f1a7867e52b1a57590e"} +{"index": 52129, "batch_hash": "0xc23fa2752edb5ef46072e735b6b90a2e1e7542d90b95cc5521428ca2427522bc", "finalize_tx": "0xcc51ffb449db150af9f669ade55d9fcdc2c4d0ad3e8ec294db1256cb69970845"} +{"index": 52130, "batch_hash": "0xe56e25c42e8d6553bbe5d085a4058937961234b7a7517cf3c585897ffc1b4983", "finalize_tx": "0xb1c31f39a6b0a9460c5cd57ef0bda390632fa47f6e03545ce3ba84cd7c30ae3d"} +{"index": 52131, "batch_hash": "0x0b4ec9d1a44bb3ff58918e92a754966430026aa71fc4f42578a91e670e00d714", "finalize_tx": "0x45d22b0d09b769d620808f8d2b9991656757d02ea72a53900d3cc10c30211eed"} +{"index": 52132, "batch_hash": "0x86c4f3f9e4ce99e92934b498ec4dc5f000649809475add248f43c32addf1e02b", "finalize_tx": "0xd0c6e78d182985693273a71b8c12c0f05ea390498888ca2355b096fdd5f95d6c"} +{"index": 54283, "batch_hash": "0x7142443e4bfeebe44766c1c292f049011e5edc0c62f6e156ea5bf92d87025ead", "finalize_tx": "0x937300135c127c42c782ddef1a642099882e6bbcf5c0ba333f886ceb158f05fa"} +{"index": 54284, "batch_hash": "0xcc93bced2866704aa16bee7df70f2d8641073617a0a3a7ec888218c0176b02e5", "finalize_tx": "0x31a1b4ff06f56b3e442d67400205c765c949d8a26e853eaea9007d32eb9c8eab"} +{"index": 54285, "batch_hash": "0x29a68c12045ba6f02359513d5a7a39cc3f1a0221d0abbd68303c18b6b409756f", "finalize_tx": "0x2d19ed96f3ad257d4b6f98179dabe89c46ff15a20d2fa4e0ea55a1ef8e315749"} +{"index": 54286, "batch_hash": "0xee01de6618b7915ddfc3fb733e9a43ae0ecb1dfe43b36ec2515a26938841b997", "finalize_tx": "0xdc1fe140526f1f80480aacacfc8d13d38f23a0a7f81586efad84c477ad68b60b"} +{"index": 54287, "batch_hash": "0xe2ef2fbc1a487698203fd5cc35e7db9f87695a2e96a5e7f1510f549affab9a95", "finalize_tx": "0x9b58007161a059fe8b1b38869177f11d0d30b43b69a4f7e233ca50e245a85a95"} +{"index": 54288, "batch_hash": "0xc1c6985cd02797217be6d3e8ce4e5f448cb4fa352184a8ef22ec379ef484d1b6", "finalize_tx": "0x5ba35e6e44c3441e6b2e9f2650ae81ffa801fca34b3661a233cda075faa7cae3"} +{"index": 54289, "batch_hash": "0x2a89fc389a1c326e80b6ed77849c338c90376bff83e19eb64b7d72580bd1bca8", "finalize_tx": "0xfe8ed8d8dab769c20b0db075cb9f67d99bffb4e8772aff4dee9d250485a3664c"} +{"index": 54290, "batch_hash": "0x376dd60abb3d75af5ce405d2ccd57f8fcff810f80f329f8f08578386381bf296", "finalize_tx": "0x615802fb695a4a851b393e33ad994ef8a68b0b4a72e0755123ea98c292e13bb8"} +{"index": 54291, "batch_hash": "0xddca464d58cab421a4171e9608466acdbc3fb44bcdccc8c19fb191d53f9c3bcf", "finalize_tx": "0xe20fc6c8f85b749c9b879e8fdb8e168cfbfe5edb82ce32bb14da0a14c672797d"} +{"index": 54292, "batch_hash": "0xa79ef83f32633cc54d4b333d55526bb0cce1af6116938ee39df33e508be94e9a", "finalize_tx": "0x179a29553eae60774dab887d15e572049aeec581add7baf9e7334382db0006eb"} +{"index": 57213, "batch_hash": "0x67beb9b6812289e4a398f17a05eed6e51402f4ccbcd5a3b1cf996c6db9515a10", "finalize_tx": "0xac7cac3f28d4b518925d4d1be715f50c9b8ddbccf1b5c7a53df8209d7b361d2c"} +{"index": 57214, "batch_hash": "0xaff66f68b7e753e32aab4cad1d738e5f99ec19da3ec938141f190128b81b542f", "finalize_tx": "0x8892210f299f806053024dd9f1c2283f347c61cb47345640f34d23da22f36f9f"} +{"index": 57215, "batch_hash": "0x9fb4aa35571f2bc02bffe6b8793aa917c23fc51dc028e5e389677000d7d38dba", "finalize_tx": "0xbccc2b10baf97c1848e63bffd045f4070bc053563e68ee6c18314aad3c871681"} +{"index": 57216, "batch_hash": "0x09812a44efe3203546af93728ee38bea0f83b685699b946f5858796daa058786", "finalize_tx": "0x015eefc57d9a9dbb10b1fdf6e209af4c903925b1ba260038240e370101a58f2e"} +{"index": 57217, "batch_hash": "0x63c2b1337d9ef2313fd4ebfbf662f308f3a32242fe4ffe118e3f40c23be0cbff", "finalize_tx": "0x87362301198417af7e9e58aa69b0e252087bc9d1fddea0f8852b6ede000f89e9"} +{"index": 57218, "batch_hash": "0x5a88299aa88d73130b6ddfb994a271990b7c1d9b5c8ebe80ab542f4ce53f1012", "finalize_tx": "0x9a0426b08d648f3bafd93180718c00f3c8545cac0fd12136fab5ebf5ab71855c"} +{"index": 57219, "batch_hash": "0xfd5f6bccd9507542454b4f3b32adc14d70edd9b2158637aaabe16439e8f3f8e6", "finalize_tx": "0x5a4fd2c529770d7087abe4571c0ea2a33ead7f859605b57e832d298fcebb4510"} +{"index": 57220, "batch_hash": "0x3c1883c156d2e1b0b913ce62206bcf8a4dd377b7f3853feb69f0bcea4e37e345", "finalize_tx": "0x94cc25930bb73111b774518b69de8bea8d5ea500499d41e012526f468e346336"} +{"index": 57221, "batch_hash": "0x03b2259cc100087de5d029df4305c0129b17f4a16fef535b6e4d7af53360bb59", "finalize_tx": "0xaa6d53ecd1083ed301d8314ad49fc0d8b595883ef95a7847f255dcd8e8126cb7"} +{"index": 57222, "batch_hash": "0x09754b608738e9f375f960a9fddd366c879bcbaf230346ec3e5c00b78cd88098", "finalize_tx": "0x23723f544f22de4427d4ef44ff3e100a137b969a5f731e239104cc70d4b463f1"} +{"index": 58283, "batch_hash": "0x41e9283c3153422d6a56716d364dc17f3a052d3e742434a59871b43df18ea485", "finalize_tx": "0x11d91057370885c93ecee640cff7dbb8f7c200e3baab55ef0da7362f3f83abf0"} +{"index": 58284, "batch_hash": "0x0220a3a5c2b7df95e95e3e2fb3b6e9eb79d20b60807908c30772296304c270b7", "finalize_tx": "0xc50779d203c55bc5d4f5b6c8f5b1223ff04ca684bd6b047f714286c0e836b569"} +{"index": 58285, "batch_hash": "0x99850c14ca5e0e5b63a5967cfa08da4ece712d10936da1b3235c5a2908f967f0", "finalize_tx": "0xa2b21b90aa88d25e0578f02edabed00280ed971bb02e05b6875365116b8d9ebf"} +{"index": 58286, "batch_hash": "0x87ec77267f2139293aca5a88986bf88a7bb9f4668e29b266ed01727f2f351685", "finalize_tx": "0xbb4b45a2da74426687c1d77b541a509ede305b709c2ac59f0be9105bad76d7e0"} +{"index": 58287, "batch_hash": "0xe11fb693777bd3b6ddf95375161c3c84439ac232c1dee26cf53302ee63e44786", "finalize_tx": "0xf2bbc1cd310872a0812968ad0f184ee338af09344bb415a674d9974208445805"} +{"index": 58288, "batch_hash": "0x76ab1fabb4384c2eca03ba5b94be72430d0f04b8a2cfac2c6f29ef682dce1b39", "finalize_tx": "0xd9edeaabf3cca3bfd6b2660374b510b4b0045a1c40d8c064a18d873c86a1298c"} +{"index": 58289, "batch_hash": "0x015d56f49144f0e800b5279e24f79b8c06eb526a378f8bc2903ffa01298ee1ac", "finalize_tx": "0x44b2549a9c87b41b518e6a2db6d5afdbf7400e93ad64929b78344133438277a4"} +{"index": 58290, "batch_hash": "0x0103f92b5cfc1d8e91907ed9ce9aecbcc5151bd6584d3c24d62fe10f5ecaf791", "finalize_tx": "0xd98f40ee4ad8fec392965ece2a1a2bc43defdee35726ec68b321ae240448cdb0"} +{"index": 58291, "batch_hash": "0x71bdc8bfb34bdf660846b6f3a90f5f560d8176a718b980a5482b1f00c243e3ef", "finalize_tx": "0xb1d4813e7aeb8a125c5ddf3845ff1a0dfdf63d0e01739c48e003253a4316d4ab"} +{"index": 58292, "batch_hash": "0xdbfc916f86d86b0b4f94866c4a09788bbfe034cda7631489711f665fe74815d6", "finalize_tx": "0xa99a150099b266daec6e08461f17d8adb908a6e45bff1e4cb1fd1e5a83ca0268"} +{"index": 62473, "batch_hash": "0xa6695885704cf1ce2225a96ee0ca938d8f3e5d49c1adf175a4b5c76f1a597169", "finalize_tx": "0xb43af1d56dbbd27c52917579e68b3a040dad7507a4402ccb2e6788540d8f2a01"} +{"index": 62474, "batch_hash": "0xe704236ed53a4c4762e3040d6481e07dac6f3d4e29c9bb5a41dc8533598a8b5a", "finalize_tx": "0x7bf13b6b048bf03939eee84d157a6ec421e0502d43f5de4ed0bba678cc5acd1e"} +{"index": 62475, "batch_hash": "0x60d2db9088b2eaec18a710faa356c41f1be7487f51d15c57cfb6c938730a9599", "finalize_tx": "0x030abf80ab4fb20fcf48872e4b36107b7ad0d033a4ecf1c79c81c12a7515ac08"} +{"index": 62476, "batch_hash": "0xe9588443303e0297e12f4531f08b5bb18a826b88c66ede6ff4c4dde81b52d4a9", "finalize_tx": "0x41650e277591fdad23bc33fb94cc39910ced7b892bc0dc8334d46cebf82c9c73"} +{"index": 62477, "batch_hash": "0x162566d01514d9456153383d024041a34e67c438f8de03b494a9c31c3c4b3315", "finalize_tx": "0x0995f933cc26c8889fedef1b03ee65e5120111e51bacd101e4a3d7bd6c4dbede"} +{"index": 62478, "batch_hash": "0x962256ffc99a53e8683eb8e4c15783877dce162c74fc8774b8d7196cf4f14b95", "finalize_tx": "0x903d19c8eda69efcab7d3370fbfd3daa2b38c84db194278c96aac35bc5f9783c"} +{"index": 62479, "batch_hash": "0x3282cdc8fcdb412248470d3bc855f144d30d0e81df7177ad9cede81e4fabe372", "finalize_tx": "0x20797fc4431c73dd1cc8575237742e793ebd136c24a8122ec294e6b1e759e6e5"} +{"index": 62480, "batch_hash": "0x93610055d15323588771c29edda359089c7821456638985409d7cafff3e72fc9", "finalize_tx": "0xcaf0eab1dba22ab9c9a253a54afa54276855832f719c62946a15db7946c6668c"} +{"index": 62481, "batch_hash": "0x85b45e085cb4b5cb6d41f4568919168404b0fbb0aa78b37789912a8a980d3432", "finalize_tx": "0x0943fd80a5f85698cc62fb57607738e8652f701b4a5fce39b969c9d2f795704f"} +{"index": 62482, "batch_hash": "0x1b5b826d5aeb9960790a2dfa4901ce26e620d4f602146de3a4fd7d8d4ca6a12e", "finalize_tx": "0x86d94208b1d668a8cba42fe89e95c6fdbd031471ae676741dffdeab673773e51"} +{"index": 64703, "batch_hash": "0xc7286b250a6684687cabd47d183531d6f88411512d115ecb17e090104ba444ad", "finalize_tx": "0xce159db0c71373641d47c93263c75d56a4ff37767260d4d0090c852e5f05500c"} +{"index": 64704, "batch_hash": "0xbaebb4a77a1d7539a2a40f06dd93d419fb9fc20aca30af170b5fb32a6870342f", "finalize_tx": "0xa54002370701c1a4ff0836f34e5abb31480c867ecdbd74399798136d4bcb82ac"} +{"index": 64705, "batch_hash": "0x504849a219079bde4d3d9219fed7a23f05405b1032086149c054efd24eacf5dc", "finalize_tx": "0x470098fc372ca1ca2bfd060d450d713f492d28fc16de6290581d33b1dc187d4c"} +{"index": 64706, "batch_hash": "0xbaf9d4a36e4779377b94272b82d67564cb4537fd2e54a0e3852b26a0d48875f6", "finalize_tx": "0xa549d5f3eea4ca5050e8538e6a5e290f417c9f2bd8ca81297134875b0aefba97"} +{"index": 64707, "batch_hash": "0xbde4a810c46186cd793fa7fe3e8814b23b8affaea71b8fd21c0c44a700ffe649", "finalize_tx": "0x488c446f00d096e978803f3db751f150d13e4c0bde2ddca8752be638a0e13f48"} +{"index": 64708, "batch_hash": "0x6b92777aad8523ec8dd5b87043ee1d475d8ff5942d04976d65429a792001aa5a", "finalize_tx": "0x60a3e3434a1346e498ce79833c805c92d3d2a6b361f0e0ea9487f6b3159cbc8c"} +{"index": 64709, "batch_hash": "0xf953efc21d4da1f41a795dcd5c0577a7af54338876a71690445eb1b044980215", "finalize_tx": "0x578ac6e2483dc1c905b93bba9ce6711affacfb118c43158371256f34317e74a3"} +{"index": 64710, "batch_hash": "0xa0c48f931c3b95c49642e83b7bb076494ae286180cb1822888bc14de882e781e", "finalize_tx": "0xb5bf9c554b17f0f6ee724e129b4740fa07cb045bc950dfb736b887a5ac53ccd5"} +{"index": 64711, "batch_hash": "0x96bc36044f4fd41f62ee144b9ffa19b39870ed7741a90574658dd90afcc50636", "finalize_tx": "0x670079873e4410a4f2512e72a564daf9f80526c483ddba23794f1a193e90fe4b"} +{"index": 64712, "batch_hash": "0x0e3975ad1725cf413bd7abe73e7d8269ddb8676df91812ca57522c619d16600f", "finalize_tx": "0x5d0b9f4faaa7485f087e139ea5a27a47a3012aa482b47ce6355c54d740ab3266"} +{"index": 68993, "batch_hash": "0xd0b6aed754a2dc0b9615dc97b698e7ae646c21834a408d792db480a575593601", "finalize_tx": "0xd5ec01c9f9a1369910c5d27cfd3a5dd76936fe68508ef69c200306ed9c402eb4"} +{"index": 68994, "batch_hash": "0x6a6fe1f9e3f5a6e74c2a0fdce37fc09649ed515ce0cf5bc98d1c3233a9cf8413", "finalize_tx": "0x5f89124d9dede3b0ea0407e4043e569be451d74b3209dcee518fd839133841f1"} +{"index": 68995, "batch_hash": "0xfad10f17db34285ae17a0991faf304e95506e520a06f1b450da0fef02e389378", "finalize_tx": "0x0943afd1a0b57e01e43b4ad67eb18299a4443cba75d6d41f1efd7b87dc4ec081"} +{"index": 68996, "batch_hash": "0x1efce44bc37251d7a56f923d25100063c2c3199669b4743763e610fc3ac51eb3", "finalize_tx": "0x9d99556a44f61d5cdd88093fb483ac07d0b639ee055e9243f33154f6e5c83dd4"} +{"index": 68997, "batch_hash": "0x3a4de1317dbab22d03d7e81fea555ad8ab70cd36fcc45ae7fd72cc22cb89e4de", "finalize_tx": "0x0e85571248e83bea83e3a749b5312cf0b19dcd5cbdc4b5e3c20d950f11bd130e"} +{"index": 68998, "batch_hash": "0xf631379d79fef7623be41a47feb5ddc62960beda283233f5850bee3952226412", "finalize_tx": "0x69a87e381d12fa0b7387ffaef8a65a51fdf61a9ffa79ecc42fa2e901abe88329"} +{"index": 68999, "batch_hash": "0x407b6be0f799e422a26c14471638faf8b381b4ced6aed466398a359da4b6db5a", "finalize_tx": "0x501f64e226184e23df82ff4a8398fa540f6c18a6339bd9909edbb3e767a9f360"} +{"index": 69000, "batch_hash": "0x30c4dc9c157faa12f8e0a7adf2ab9001439df3c3d058cda242fdd8f4e19bb931", "finalize_tx": "0xc6dbd36963e853cf62d0856fdbc0522fb5e4d8af52c83605fe3d940956c5bc3c"} +{"index": 69001, "batch_hash": "0xe0283d1f31ed36f82a2d4db25fa9c288df54e5d12b6509861063a19ff304c5a4", "finalize_tx": "0x91b6baab0162378aaac8a4a0b52a0da4a3c5e2970af9cd14e4570a06b08e5aa1"} +{"index": 69002, "batch_hash": "0xa72f9f60d14543bf72a314a58a1060339ca7d5ab36b163ad0d9330d96bd286a1", "finalize_tx": "0x60c5bdee63570df9ed1991135da0b1284838945b0edaf45842f5b4ec33b91e9f"} +{"index": 70123, "batch_hash": "0x6285b78d5aea488e4be7199df01a108ed1f132751cef0bfd5a9711dafb92fffa", "finalize_tx": "0xf774851298bc90761c038858360a33f12f16e91ec69e33b17477d0ed85f6e4f6"} +{"index": 70124, "batch_hash": "0xf305586037a1b2f92fe862c155965166b406780e9b21c5b4e41aae888310b7c0", "finalize_tx": "0xb3ec00a96b3df2ea157fa785f3aaafbe0df3f9409309919495730e71aa265c77"} +{"index": 70125, "batch_hash": "0x849721d6ab044323bf0f3cf5958a3ebd736bf26823ad8ff4a0382457931dbd9c", "finalize_tx": "0x338aaac03f3294f0a70910df31549ab022faefbb3a7ea26f9547478644a3b38b"} +{"index": 70126, "batch_hash": "0xfbcbe5842907a9c734e952d24c87123f6a72bb3b00f3a4ac3677a32d337f366c", "finalize_tx": "0x4962c7ff0b0d9130729cd56c865ddd236fd7eab1702b6f3befbaeb52d25c35f8"} +{"index": 70127, "batch_hash": "0xe4e59033bf6482ec5ec2327e007fa95d13bae97dd2ef96c5e98dc1f83ede872d", "finalize_tx": "0x1330685a3c466a97dbcdc7af526151dda3632f7d0b854cdc160641203afe65dc"} +{"index": 70128, "batch_hash": "0xfbbf7667b7521bd8549321b6eaf8a6bda8e07adf69a059a99443afd788fdf699", "finalize_tx": "0x03998c24a3a37ed697862fe1da46bd84eb0dd44b0767d933e4569dc2b1b7dcb1"} +{"index": 70129, "batch_hash": "0xa0337541ad1c28a43ad714c80e5827a565aa9745ec712df532cd33a4e068b30c", "finalize_tx": "0x2e99fcf086e894b0be0e4c85ae8241759c553f61dc3e9d7956e01f812af35e25"} +{"index": 70130, "batch_hash": "0xbeb9247ac63298e23ee72de8636cbceed720120e7d16fa111a11ffe2a8e26c33", "finalize_tx": "0xf019a14bdef43e5a2aff0c5b5e0de0376ccc8bab29c0898fecda7e106f037913"} +{"index": 70131, "batch_hash": "0x14eb93b6c28bacde2da2548039706a03bb3df8e4891f3f03ad3977926b429e0a", "finalize_tx": "0x92d4fb9da71c6da8358b5b5ef011f2f831e4ee40ebdda3d6c2c03d7211db3621"} +{"index": 70132, "batch_hash": "0xdc94a8ca7f1a01aafb5257b156c90b46a1b3e64f81ad878d2b24e1c11ccf5802", "finalize_tx": "0x4005c3be33bf0aee6737dd5bb7f8fc1eb49227df94bd1f8c5ab36d6ef8568aff"} +{"index": 76343, "batch_hash": "0x13204129b548ffbfdad0c0c1018e831d6c4619a7a10febd7f0c276149101d4df", "finalize_tx": "0xec7e6764c977ba3afb5c6fbf28d06b07a23bfcfa86bfc4d5da48942209ea9fca"} +{"index": 76344, "batch_hash": "0xb03ab3de4ea692c9978abaf3826096c6541a216b177ac40b6eae9d01f8d07b1a", "finalize_tx": "0x473b49b5ddbbe99c4080192b14471ad8e280ece8e3531aab70c3f4ab24282f95"} +{"index": 76345, "batch_hash": "0x47f30c56c51406102683ebbb0bcff6e6517eb4de8906dde57f8662a9745e5996", "finalize_tx": "0x9d862fe2b3f7726d3229a2b946df316bf0613c4a8aeaf470e8539b7ff85d5833"} +{"index": 76346, "batch_hash": "0x5c92f53e79ec66fdbb552c571bf6c106e14fa446d4aad37214a860c3b29fe326", "finalize_tx": "0x9c8dc7a33d6043b47e89dbb85bb33d679273cf0c8282c055e456e1902fc37937"} +{"index": 76347, "batch_hash": "0x5b312c8c4c03d844d8c2c143eb8998ba86a4301f0f5475a8b3ea18f4c57639af", "finalize_tx": "0x09af293c3ae1073088d3dadb2148418ca52b48ddf0e1e38f65eaa107d63d1088"} +{"index": 76348, "batch_hash": "0xc2111e90d18d7b6a1ddf5fa3a3740a493385551d436c2ee4b3e2d11b9434e887", "finalize_tx": "0x4c3b63ecad7f5a12c0c6cee2949d314c004454bec33bdec8bbf96eee6df17332"} +{"index": 76349, "batch_hash": "0x89c7e1af0cd202abeb4da2a6e81d937a0e10aa81f8f6ff0ff4455ed09a20a577", "finalize_tx": "0xa53c09b1dc3412df0c0a8f7ff07a0f1b964e70f4aa58f20cf346fa6b7d877bc4"} +{"index": 76350, "batch_hash": "0x1db88704585d1c0f0f9b448f3c55c0a340eb076294f5122d9f578120dab168a5", "finalize_tx": "0x17a6babeb5852610b9e158b339c555e4de4deeccc8733eb4e7ad93ec437a2ad6"} +{"index": 76351, "batch_hash": "0xfa391620edaf6185abb29946edd171118b8de5c497c10b9206dc3b26bbf488df", "finalize_tx": "0x8f0a05f314afceafc5e2f071199f5e9f78260ac04c8346491e9f019e5196508e"} +{"index": 76352, "batch_hash": "0xfd41de7885faaa3fbd93099c76f88eefe1347efe5050c3bf6d67a43f81ffcc6c", "finalize_tx": "0xf5ddd99e503d4a31210bd0e2a557a38185def3072d6d345f4dae2835196897fb"} +{"index": 78293, "batch_hash": "0xafe9e32914396d697d7bbda482a626c61f0cce96ab42ec5cd32976cdb9fb7e7e", "finalize_tx": "0x835639e5d62b20e948a2ec5f9ec01aa2441b52506c780be5b465447b40541b0d"} +{"index": 78294, "batch_hash": "0x6835511f2344529a17a4d97f8a5aaac3159448edbb16ffc22e670c16b2566145", "finalize_tx": "0x8b7eda7d92606f65762260641a4556d5e6f530b2d6d3ee41eebf41e42424fdba"} +{"index": 78295, "batch_hash": "0xb190096c7e0e76a1bf112089ada14c28227b24460d3ae99052807997196a1ccb", "finalize_tx": "0xd341f698057d65990dd04348ed8d5976f1215561fdeade410b2cc792d9ea990e"} +{"index": 78296, "batch_hash": "0xf1e1700c36e1072b14d72c35de9f52c9bca81085df5e0ab6cd2b7d350db560c9", "finalize_tx": "0x38acb861358bfe0c52955501d422741faefe606a8eeef3c359583ea36ec65ad5"} +{"index": 78297, "batch_hash": "0x93f710d923f766de28b7518dc0346067261e8e0a56559fb5768cccfe1a9e052b", "finalize_tx": "0x90f488a5fb743a2f74468ccd06e49c3ccfcef2b1e53fa4a7122c811f4baee014"} +{"index": 78298, "batch_hash": "0x2bd80b1b7937ee8798728b8abc8da6409c26674c78eb80d90283d1773e26585d", "finalize_tx": "0xbe23aac05a7ee2d06ef74bea292c4481498e514bed66de4d56f207c2dbf5b256"} +{"index": 78299, "batch_hash": "0x765194d5d1613c0e93b06d24e06595883f93bcf9db696f97ab8a2d38373f0342", "finalize_tx": "0x761415956b51642c8af989755727b27a9576c646ddfdc527d923d0bc30302c27"} +{"index": 78300, "batch_hash": "0x3b0b5f4ec64655be05c3e24f2d4551d4a8bb9bbf2b0749087e56e11a5890a099", "finalize_tx": "0xd5f9ff4c5a3229c93da13e55e32003a68c55a378b11b9dcae1cfdc32b38f0c9d"} +{"index": 78301, "batch_hash": "0xd7592cf55c65769a09e3dab362c9d66b826e658986b66a9e92b5dbbc7b7bda61", "finalize_tx": "0x9b570e3c3066693a5d574485bbcaea17499a469c92aa9943cc7c23b8e192f2f8"} +{"index": 78302, "batch_hash": "0x4a5cf0cfc84c9a735ef25e23e87b6fc0ca32c3377515210d9107bdf8701b6df4", "finalize_tx": "0x361d3c2c931b22b472a1a13bba8999cf061f6281babe0050106a36894677aec3"} +{"index": 80843, "batch_hash": "0x21bc440097cf4e41e7e53f4befe4b37b3bcca9457dd7423b3e11647a3f2bbb9e", "finalize_tx": "0x3dd9792205d9692c6f6dc3559e6f78337a03af152cc105fd9675014a3e9d4e3d"} +{"index": 80844, "batch_hash": "0x8ddb7434db1c4a1663ce9748dc891ca8ffb1ed8817214ca5ee1d2ce335f714eb", "finalize_tx": "0x44923101ef909cf53e9960274bbd497139b27687bc27a3daa09387647f8f4b19"} +{"index": 80845, "batch_hash": "0x1a7d54035c2c65f59e05c6b33434eec82bde6cccf2a29f35379a116aa1342a44", "finalize_tx": "0xb907b214d87091e78a0cea1770db98ee315473ebdabfbe833226d265483b41c1"} +{"index": 80846, "batch_hash": "0x2b796ca9f97d049ac5c9ad1cecd1e1665e5804be45c748dada8838650c8e3961", "finalize_tx": "0x10d23bd16af40b7f29aee3dddb8e693313ff27cffd95ee810bac87c4c39cf18e"} +{"index": 80847, "batch_hash": "0xf297e2b12ff6c0b094671457567dccdf01d7e5a57e7a5bd754079c67643421a5", "finalize_tx": "0x8e5bcd394d8da6ec0adf6431c46d0c9196ec840c345d3fd29bde3e4051ad1696"} +{"index": 80848, "batch_hash": "0xef41fa5b5a1f78e1f1c00ba5d64134b7aa5ca1ff5286127ce9219fb1596471c9", "finalize_tx": "0x4a0b6aec5801212e459a7e2d8bb0f16ce7be21b7ec66899f9d3a6ed1e260cebf"} +{"index": 80849, "batch_hash": "0x7f74288854db37fb00e5b28688aaa33a8de06973384fec87818de303ced474d1", "finalize_tx": "0xe7da82b0804aef029d52b16dac6172010cf1c4d0b672fe13ee48bf5ad6113820"} +{"index": 80850, "batch_hash": "0xfeaeaf02d69d9f8d9d3eeea88883f70bd995187bf787232b2781a862a500819a", "finalize_tx": "0x090ad69dc3b55ee8b41f1ec227be74d400b982f224e5c21931271b51c2974bd0"} +{"index": 80852, "batch_hash": "0x4cd8f89f0b04f600abaf7c6744d013d91d72701bb0ff536470bff09cd5ab8d32", "finalize_tx": "0x99e7d5ec17af3860f154abebe8f07bc6f6da4b3a66fab01e1eebc6a6f3801f40"} +{"index": 81233, "batch_hash": "0xc644e97d5f34c6143d779b953a24d3002bf522dd60bf7d60e6fcce0d8fa15a97", "finalize_tx": "0x071bce1003eaabd48ab21ed5b5263c63d3f2e98aded4d751568b15e3a7c7708e"} +{"index": 81234, "batch_hash": "0x006d40f0e90af89244cd8f570dd3102c6a9e7bc4a6f2619e9dc42d0d443692cc", "finalize_tx": "0x686f57566dd0bb2eeb2d6329fbac1e29a8354181ae541c9532e0df58442c2cd7"} +{"index": 81235, "batch_hash": "0x0534fe28fa7a0c5573d524b315a2e16de16a239c2e4449289b5e890fc31d035b", "finalize_tx": "0xf6acb09355345579d73c60abc82c3acc18fe98016c6bd13332a0d1df4cde960b"} +{"index": 81236, "batch_hash": "0xa8226732e3f4e2a404397b0a1862f9bd887d27a96c47d499685a42b7eaaed35d", "finalize_tx": "0xcac95d1f0324c371a3866284f139ad2117e161c0c27f2eaf72683ac5d4bdd846"} +{"index": 81237, "batch_hash": "0x923ef35c78bd5e3e00a823372b512ac21698a7a8184cc80f75211a0dfa925a96", "finalize_tx": "0xa60269b70e8975e5b8ebde710e2c9b8bae764809c5611b194480dba6491a43c8"} +{"index": 81238, "batch_hash": "0x24229f6591c3dbeab6f4e82afc6af8e843e65035e24b572c5e60b8bbb62062d0", "finalize_tx": "0xab8a26ac2286dd1760b2f384b98faf5a58613d27d67ed5b3d88e3fe6d746ddea"} +{"index": 81239, "batch_hash": "0xc70163a51e0c726167315c66872e668ee03fa68dc771972fd70c0deadb12197f", "finalize_tx": "0x76eb3d13222b1f557ba1cc67aff6d920e1a0ba1943c81b4f1dacc8afb351a354"} +{"index": 81240, "batch_hash": "0x4f966bbcc5a8ca654540438336126d7f37a12a618b17d80fdaffce94c9e44b9b", "finalize_tx": "0x285583e1c83e6cfc12a8a7f327e6d8df100baa93c2b133010dd7156a41c8a520"} +{"index": 81241, "batch_hash": "0x5c2a21c65ded25577d1de5e550161d01b508eb467938b8aa33f3249cc206f936", "finalize_tx": "0x3eab5b986815f3d1ba9b470b5991383182803264ce0f2dfbee020832a3786abe"} +{"index": 81242, "batch_hash": "0x873894d26f1bb6c82769a8a5c670c54a08839d430e05f0bcbe673aed558f646f", "finalize_tx": "0x690d247932e635f82f3f7e0ae7c5d4ee778ba624b63f6e47c7a57361e3a307f5"} +{"index": 83313, "batch_hash": "0xa924ea449e7f5c5bf57e0e4734a7d7d7aa2e9264f4ff3270653e764d1e4f00de", "finalize_tx": "0x541ec7690b8921d7fb0bea11931b8f4adacfea5b4a297e07fe0245acae631ca1"} +{"index": 83314, "batch_hash": "0x8f64f53ea5c2a4361cf1f89b014c77f24ff4d1141077e92aa488ee56739080fd", "finalize_tx": "0x729bcf34bf55cb09488c9d25025ac386ad4608e4a2fce1221d32942353d93d1e"} +{"index": 83315, "batch_hash": "0x9f26813180f43709d115c7d40e8beba491af438c0a4f8dfdb4e2de11595bfb22", "finalize_tx": "0xba00fc365a6adbcbdd2f7686f368705cb12b19544266bfdceb09000aa4eedfdc"} +{"index": 83316, "batch_hash": "0x0b691836f3b24993f7cd342da98327596b226ca4fca004dce91abbe3ed06878e", "finalize_tx": "0x93a575af94ff8dc2e9a5c2557d733d86fb1c1ce2e2b08c453861119036ca9e8e"} +{"index": 83317, "batch_hash": "0x93c019dd9bc642ade9d704fa2a65cb9c35e65987bd26b1016afc99b78c3d720b", "finalize_tx": "0xa5c113b0b129f82ac791abbe218f547b9be8838fa41237f652a53d8748a0da93"} +{"index": 83318, "batch_hash": "0xe873fa917c1cfd2e3349d82ee1c00ef03e535309baeb2a485b265fdd46485a32", "finalize_tx": "0x38f9874f0a223ba97663820c192a9f676886b958afe21387314b6751f165acb9"} +{"index": 83319, "batch_hash": "0x79a958c301da8a380c9f2837f14d2bbece1e1f87046e32e9dafc7fdf12b43138", "finalize_tx": "0x0dca8047c4b64ba6948780d086e31a7823a7ac49f08fd530a94fd52cdd42f78d"} +{"index": 83320, "batch_hash": "0x2ac154f8b08d4f2794d99766774ed98b801a1fffae95defac80501a622b1b2e6", "finalize_tx": "0x6847a718a3a50d978ec5613b0952f486ef873646cf440e4c280150f39c28a68d"} +{"index": 83321, "batch_hash": "0xcd1f2dce31b930a1809b68f6071be3bbed5bbcc135dc82db8049bc0df0f0fb50", "finalize_tx": "0x9188a01b0ef12a586c7ee4fc1d1d43eb2400d3fb384d6ac7df89ff00ea290869"} +{"index": 83322, "batch_hash": "0x21b4be3236e0bd7d2d5c4cd4cecaab00470eef31491733766ad95bad43ed9270", "finalize_tx": "0xa21309cf88d83322b3d2417803cc3f8411bc453f5e0f5e9fe5aea7a4c4089f93"} +{"index": 84543, "batch_hash": "0x9140fd598d36e7447c051eca7361284fdc6c8da8e44d1ad87ca22d8157956636", "finalize_tx": "0xb92eaf1581e0cdbaec6770521d3160a8aa6686ca8fa8526a8ff4e58fc18700e8"} +{"index": 84544, "batch_hash": "0xa85dee2a8d37537c38bb87b21bd2348a31a2c5c6747e2facc3eafb02bcdd9b5f", "finalize_tx": "0x270315867f8fd042505a1147eca4839093598d8a794a8d9b094d31c97b0b1dcd"} +{"index": 84545, "batch_hash": "0xd8627ee0a1076485d7f4f67e587eeeb54b7616566996679421846751a5d51660", "finalize_tx": "0x87774d5b098fe0b3ddb945445b7afcdbd4325fa2cc09327159f801a86a270289"} +{"index": 84546, "batch_hash": "0x6223caabc086b6b68c8f11a40e8bc0631eb6ac782623a5b29b834f174d4ece90", "finalize_tx": "0xc76523df5791bf17f9f7c7b4c0b1a52a9d49af886ab3034e842d4eaa64fba6f0"} +{"index": 84547, "batch_hash": "0x760f8c261074965aa11a2a33ff150cc19e6e564c31e0e782008a0d813c059542", "finalize_tx": "0x280b7f4429ebaf48eaeec15692f2c0d19b0446c33772d4edc0d42e7623b2baca"} +{"index": 84548, "batch_hash": "0x9cecdc426ea74362afc84eefe91efa595044531e44b089c02238f2725c3d155b", "finalize_tx": "0x22f824451695f54647a6b59d7323f3695811d525e21988fdf2168d7a0b2a312e"} +{"index": 84549, "batch_hash": "0x865cef5248e559052fb31a40456a077f17af894c4b330cab44d9991185ddae61", "finalize_tx": "0xdabdf7a8014c1cc321bc9e5372b3cabbcac061f7964cfc8188a2ef42f6e4f61b"} +{"index": 84550, "batch_hash": "0xe6a9448429788b38b65c971f24043c44b7c1b8044897b9de19740f22367579f7", "finalize_tx": "0x0c94e334eb3b2e46f21de3d7debff2c5f1d1bfbb799cb581923cf938d90e72b6"} +{"index": 84551, "batch_hash": "0x28cfdb72bba2643dfb849cc85abf586020032f619b26a783825d9b4b7f242b6d", "finalize_tx": "0x6f9bad7585b35bfa77c05e85ffe72c5ebf992c185d53bbb7f4b8fe2218b82632"} +{"index": 84552, "batch_hash": "0xd486b17a0f3fd04cfdd9585eec20333d7fd2c80437db0a7c7f53b6354bf0f4f5", "finalize_tx": "0xdd71e6382dcd914ae9b23a9e8891072d464d38a88a324d6e348b7496a819d4ac"} +{"index": 85543, "batch_hash": "0xaa416d97bf72e3c8a41de1bd6f10f433765987d119e2abf17f94a5411e6dc5da", "finalize_tx": "0x9b80dd0bc33bbb6f36004ee138e15192a8e8846833ff3a8a9eba033824e43e9e"} +{"index": 85544, "batch_hash": "0x398a8b5222e793e392193000108e7e1618ea4c1b8663f6ac31389e11c387240c", "finalize_tx": "0xf7a2c1b0790319af7d90e63236c2c96d91a1df3eeed2565d7712ae18a30ec766"} +{"index": 85545, "batch_hash": "0x9213db0fa01123c497eb85fded765ed3dd763071c0f850f89c3d820ac04a9ee1", "finalize_tx": "0x8fa5aff776d8ee6235978116ee1cfcefef3a385d6181ac650ba1f149239b86f6"} +{"index": 85546, "batch_hash": "0x36b5dd1417f4d82b029bb04258640bd0147b37e4203bddc34fa620c9d8fe2d84", "finalize_tx": "0x64a979ec391c1b9d80fc2da3cf442656f7706327a93d83a2a38feeb2b733f9e8"} +{"index": 85547, "batch_hash": "0x47d5a501f70726649b071b00ffa898d8995022b4772ca0eea51c70b00f630502", "finalize_tx": "0xc293a3537335a14f0afedc93f09d8a951b5ceee15ecd36e2c54c1177b7bdeaf3"} +{"index": 85548, "batch_hash": "0x6e67a219ddcbd9e3722e509856ff89c3d1f032ecbcba92f19c35c92419ff79b4", "finalize_tx": "0x0af93ea93c46ed37b7753755c5557588b4e96a140b69ed74c437ff74542ab1d0"} +{"index": 85549, "batch_hash": "0x8616c0e347a207335cc2f16f5a474683f40300563c2149a3d7c881b626a5c295", "finalize_tx": "0x174a49907ca9e0d87c7fff79d05446e40bf55dc822ae53cde82ecc199e83e29f"} +{"index": 85550, "batch_hash": "0xbd9cb7d8cec6d82cc0f7690222974a62cd1c8c3822e7d4825ec9bbf8cad4f863", "finalize_tx": "0x679cc5bcea12f41056e10f597dbe06e6e75c1eb6864d1b89115417b1fde7b603"} +{"index": 85551, "batch_hash": "0x784ac5b1b916f583c8706080f47ec50c4235f6940946969aa9aa19460a18485e", "finalize_tx": "0x5fede4e53d6de781db698c69a276ee0175c26bcf643d8c3cf550a9e991f5cb3b"} +{"index": 85552, "batch_hash": "0x0dcc60a105f8443fb5203b7db1df9b91828d6870b2f90b62b5605d54719743fc", "finalize_tx": "0x6ba4d1ae3cf10b20b09d02734bbc75e66c5466f9b421f790403412ed79c2af57"} +{"index": 86113, "batch_hash": "0xbe07be9c252af9de721ecdbe09bbc1ee3c5ae66cd0d3c5eb32cc9ddec469ad77", "finalize_tx": "0xbc8666ee7526573318d805e8d756f7a67ebce716d4cc40cbbe4bf65e6162d8d9"} +{"index": 86114, "batch_hash": "0x5f2ae29fe28eeb9ea70f66b0717a503c17ae90b31ad47bc350ee59d896ed4a94", "finalize_tx": "0xd489429d7fe21029eda063f43edead38623d74c3a3e040b0e2ddb1e47c95d68f"} +{"index": 86115, "batch_hash": "0xeb53aeab67427e1ffea7e759d4ec61d1b5d63539a32763178bc3b3931659bd76", "finalize_tx": "0x504155d5ee429923ee2537678354bd5e639277051f803d9a2811851437de812e"} +{"index": 86116, "batch_hash": "0xa4cffd3bfd85e107c3822cd3fa5fc39ca136475ba7f13e5151807b38eecd6225", "finalize_tx": "0x35837fd906ae2fe388bd1d55bc5b14916c15059d0ec15897856037ab6102584b"} +{"index": 86117, "batch_hash": "0xd9f25d547509a2c2e6a4b6559bf53a15d58b1f149dd193d620ad796d5edd06a4", "finalize_tx": "0x49f389705b3125f448aec0a383542a44b7cd7d9812ba0dd62f6ee0af0f03d177"} +{"index": 86118, "batch_hash": "0x0d8652a2021a100322f943184560fedf65dbaf408028b42eded42b0adeb53f8a", "finalize_tx": "0x0a3b54afc724bad6ee04725bf973164660a6b06d0eb1d5371bcc731c23aecbfc"} +{"index": 86119, "batch_hash": "0x872feb28ed4f903e1e39229043bd9a39f9055f1c502bdeac8d725792aee65e4b", "finalize_tx": "0xa5b79605453bbc6b52aee9be5c118ccf6e71b3ada5aa279af7cdd6a90b6d46f6"} +{"index": 86120, "batch_hash": "0xccfa0def8058d6438a28498d7ffed77deda22c2a56fafdf552284ecee353d9ff", "finalize_tx": "0xda9bf093c7462631728ca5635d6ceede0289e37e7514ee9c561ed72ed7f9567a"} +{"index": 86121, "batch_hash": "0x5f7c13c997d578f81f07690cb0b6da5230f7cbcfcb6be76457a1c0c7468a2f30", "finalize_tx": "0xca2b6b6db9b06afce9b228c3ccdb5a4054cd25caca377b2e37fd3fb6d3658dfa"} +{"index": 86122, "batch_hash": "0x08909773fa8a77ca3ff768c9f6ff970cd5e535487c50666e3e56ec248fda424a", "finalize_tx": "0x49c371534a8375227e9f406bdaa90b20a8ed98aa1efd72ae89b3da376fb08d22"} +{"index": 86213, "batch_hash": "0xe6cc4990bcb7437fc3c04a74c55ae7b2b73a2c7a1b9a4ad2023c874fbeec9b03", "finalize_tx": "0xdbd41084114bd4677d26cc28f469100cf506f8bdfad671c0c1d6156e92a0c830"} +{"index": 86214, "batch_hash": "0x65247ed198709eec4231d1526b0bc15a0455f0d6644fe5b4566a810918893876", "finalize_tx": "0xc705a6c4374bf343945ee290ee47ff9b2ca4329b94bd665b392b1c8d5715f5a8"} +{"index": 86215, "batch_hash": "0x70421793664d16f80c717a58f45dbeffdbed666c26f7c0de7bcc71cede1fbe76", "finalize_tx": "0x60d9d3aa6ac1e339145925946ee0a2a2bf4df71dbd13ba7f5bdadf3bd1e718d0"} +{"index": 86216, "batch_hash": "0x89b5c5b4ee126a06b81bdf9dc30729579d751ee44151c8e238c21ca5102e66df", "finalize_tx": "0x57816307aed23e9767a96f26efaabbacf3e9b1099a57edfec623964a6b33d601"} +{"index": 86217, "batch_hash": "0x5e13e0d8ca2120613bd7ea6cb379ea4907b388b18cabc3a477bcbfbf05ed8ed7", "finalize_tx": "0xd9ad4ec2c34d2646bb5580f03d4df31189973df0df880f35ab5b1f6d5298a552"} +{"index": 86218, "batch_hash": "0x8ecb6045d8367c07db5ae025c161ccfee120c8e498649f72ae9494f620904f2c", "finalize_tx": "0xf18d5f3a45920c9bdee21948ac8869b14014a7f5afd7523ce4461fae06d6352e"} +{"index": 86219, "batch_hash": "0x135e3032bc3d279ebd8ca172f95debcff1699ef9afaa2a014eed3f39c8ad32e7", "finalize_tx": "0xc2fbe1adf3ce95c27210c9f2a38acc2e592ef76b783202510226690a4e22c9a2"} +{"index": 86220, "batch_hash": "0x84e20f0ab25a10aa44b563f64e434aa34ee91c70d2c2cb4a22aac8f57b7a5068", "finalize_tx": "0x2c7d5b4bbd3c921eabf21c96df8d272ff418cf576184d6d82ec325cf02dc00fe"} +{"index": 86221, "batch_hash": "0x34e5eee4d0941c75d268ab3c15efdbb9f9f89ee5f54fbfbd22c7dfddda7fc652", "finalize_tx": "0x06a6abed7819c9cb74f3c13f9be177a155203ebee7cc65dd7236669a1276059d"} +{"index": 86222, "batch_hash": "0x3521f05810bfd1b8de3646431c3e5730754ff36fbe9a867090b24219d12789a3", "finalize_tx": "0x54497d4456b5492bd828bf3cab241c79cc77cee186d02d5529a46cbc6bc28837"} +{"index": 89383, "batch_hash": "0x5036a3f27d72122d70e2a42cb7a70d62ba273c6f1ac2a4b26979b6f2ca4309c2", "finalize_tx": "0x803a201477e7ef150efddf174a6fbbbd42c7df625f55150732f60bf59dc72961"} +{"index": 89384, "batch_hash": "0xc36a1b50260fb81dde0fc9c7d428fa213740affc269b742f88a37d66868a0135", "finalize_tx": "0xf336bb03cbcd802d67d6f896574cf6f3b8016c03c4d5344a698dea2a5a61d23c"} +{"index": 89385, "batch_hash": "0xd4c42f9033622ad6ac65e12a7a7c9773094b0fbb04ae6bc5ddf5acafb7cf4e0d", "finalize_tx": "0xcccc6cb53b4e4caf999e937043e8cad54c35456a5a7a67c6fe2d009d5b48b9ff"} +{"index": 89386, "batch_hash": "0x70435ce8c19d58dfcd940af0083400f126ff46b8ae93533baa4e4e38116291f4", "finalize_tx": "0xad07e897290c2cfcb05b68257c9d242f3d9b95f0a5bd92a8d02d3d2b1d2ec149"} +{"index": 89387, "batch_hash": "0xc668ec1da0f18d79bb470ba5180676783f54c27a76f4bad3575fdefa05cb55ba", "finalize_tx": "0x43dee348d036dd32b8fafc83f56dfc84fd35268c307ae58a954dd7f55bf4e015"} +{"index": 89388, "batch_hash": "0x1fd96bc086a60b4d5b2c099e18977a4f8bd6bfd43908431dc6487086a1cba0c2", "finalize_tx": "0x475893b600aad8bdb4ee865c03c95a7bac9f4858ba2740ee1f563f97cc90d3df"} +{"index": 89389, "batch_hash": "0x582cea67d5dc9e610ecd3b961a7fb49fae35b20095525cc022b2d60866784e8b", "finalize_tx": "0x31e39bbd2071f8df37a1266f9c3fd63a892b32c8b19acd06ae5b969285586ceb"} +{"index": 89390, "batch_hash": "0x50294826a93dbd2c36731fbe8eae4e59573e432b730f33b9695603e3711cadba", "finalize_tx": "0xdb372044d1bcd1515d76d7d20f781d6c3f411387728741725355afebd37c3ed4"} +{"index": 89391, "batch_hash": "0x037e5389b739b4f58e68ab1ff7636aeeeff4da35843d23c0cf9b1b7295a5f8f2", "finalize_tx": "0x8810b566aea1e29b058c877b3d2e0c9573d40b5cd9d41dac6a2edb2144309061"} +{"index": 89392, "batch_hash": "0xa0f50e178714721b224e9d89e6afcd662cbee38867afcb5553411731bca4f0fd", "finalize_tx": "0x1dc78fb344608f413047f68ba60094af27afa102c1060c408d9327343ec40413"} +{"index": 89913, "batch_hash": "0xb51c06ffee5de0579d82cfbef1ee38d31c7e66502734cb5a6766374daf99c157", "finalize_tx": "0xde69bf00f59e596a26ed3ac45260364b524c6ea0209107ec8c579d28459c0c86"} +{"index": 89914, "batch_hash": "0x3782a1df439efc7610c64b8fe6946447be8c56faf3bda4ae7172357869e0b51b", "finalize_tx": "0xb93c315fe3d11dfc010b188bad5230571b694448f624cfbebeb7b21a67fbdbd3"} +{"index": 89915, "batch_hash": "0x69249e299acd5e088dcac5ca28f80c6df02c819890335f8a12050f8346e1cf85", "finalize_tx": "0x1f7d08d7a27026daad6f5ff14d46c615bad90b2c1b28e9d726e6ac961d53d17e"} +{"index": 89916, "batch_hash": "0x9b6b391e42a4c7e5de4cee3dc9da0e91fb93a384b2403796edf214bc0bc55689", "finalize_tx": "0x608ac47b01792485668a0c2c58a4d38dfe945b6ef3cd29665dac7b837111429a"} +{"index": 89917, "batch_hash": "0x08f4482950dc3a30103f3ceb3954699681ccf10dc1aeba09106f211cc5df19ae", "finalize_tx": "0x4027455fa6e2be5af4e9dccec2cee8b305df072ce2949ed7729c35caf8a42181"} +{"index": 89918, "batch_hash": "0xedb2cb4d15e488ec922114320e7240662d5c404dda1375ccc820386b20cad1d6", "finalize_tx": "0xa10e07de17b57d64a09e89676cd5ee055059007a8a92eeef06970e7467ecd6bf"} +{"index": 89919, "batch_hash": "0xbb7debe68ca8383f15984263fbe989dd5a1237a07a6d55cd6e401678cabed3e6", "finalize_tx": "0x6cbbfd60d4af3bcd36e3fcfb07c37689ee0b8188499935b6968fadded5a74913"} +{"index": 89920, "batch_hash": "0xd46db1921d23ad5504bd55dd971501562f232fdae9bddff30bfbf549eed95350", "finalize_tx": "0x4af42dad4ee682a9f55c521d6fbfac549338dad6fa5bc92e1afe077781afa355"} +{"index": 89921, "batch_hash": "0x2b01a872d1669b631ce1ac505e135793f306bd5a68ff81ea37701859f07bb631", "finalize_tx": "0xa60ad4f58dcec629798022793afb8316a34c0a4954b9eea98972ff6294346ef9"} +{"index": 89922, "batch_hash": "0x45a60759b7596dd2c9d900bd828795b52d8c795357fd88bfd3fece97e6a9ad95", "finalize_tx": "0xad9331f762aa0dbc485c63f11f23d6a2964f14166d055ccc09516b91aa687790"} +{"index": 93333, "batch_hash": "0xd39a2521dca68c2a4132c0a2a82793f2643d5728ed8b50e889e255a3323dd689", "finalize_tx": "0xbc621e09d77e6d826cdfab654a6455a4bb78ec855cbea256cd011040101df71a"} +{"index": 93334, "batch_hash": "0xa511d572f0f33d087d56dc9c05d69361e207889dd439e60ddcef6d16e2b99707", "finalize_tx": "0xbddd352e3fa12c5134ceed91e1096363da2546e6268fffed10b899edf6edfd4d"} +{"index": 93335, "batch_hash": "0x2933ffe456747e141088214248963ed2e0a36d58ee8c765f0c50b081e681a886", "finalize_tx": "0xb85998ac869e2d1253ba18d6b2447c36a850a564e9388de1c35fe9de10b72b0c"} +{"index": 93336, "batch_hash": "0x59fca1076adc6d1d26d1033156bfa7301fee1496c0d2ccd049c19943d9eac666", "finalize_tx": "0x5b4e38a2e11595c6d30af062a6d19f1c9919cff3b1f124a711c46b581dfa78c2"} +{"index": 93337, "batch_hash": "0x0c514492bf6a36b1092743481b0de283605b1f7e169cffdb11bd02203073a244", "finalize_tx": "0x758d49c9546bc2cfccfd47e073347f24d6d90f96459f756b5b7ea353e11e8189"} +{"index": 93338, "batch_hash": "0xd53ab3a960fa40db11677499a3966edc23860672e954039e187798c30178b245", "finalize_tx": "0xea8973793f9f25db12563380b2b9d911fd39b2e96f9e944a881e0d71a82b6a74"} +{"index": 93339, "batch_hash": "0x32f7c2ff77fa178906e535264520b934be3c6f28ac8d8f35d99243a9e61a3d25", "finalize_tx": "0x18235d3fab1a37957e78f5248c0b0522f4948c6e105807958e5bb62a61ba645e"} +{"index": 93340, "batch_hash": "0x7124ccdb3bcb97e4570cb2607c7e20d439d6498de607e1d4500b62434624b4f5", "finalize_tx": "0x36fe29a4d3676bcb6185a5d0204c45fa92d3120303ee68c64ab3c4091ab65302"} +{"index": 93341, "batch_hash": "0xc2c98e1a2d2aa421b5d9ef1e3998de1a21b176e831214716b6c121ee1a45784f", "finalize_tx": "0xc0973c21b26fe3e3245826ed32788a883a0b3c99a930df7945f92459c154bc69"} +{"index": 93342, "batch_hash": "0x8e70f886a18a28d77c09781e328fc2f7140be38c9ec86f847d8762b797a05a1c", "finalize_tx": "0x0d7b5713b57aaa9f89f0a8cbd42fbbbb1bbbcdeced43b8d2409b52df778de58e"} +{"index": 93713, "batch_hash": "0xd30450f5f57fadf495d77061d0be95ea2f26e47e605fbf87297086eef932fbf5", "finalize_tx": "0xbf82e565b17fb65f0125a756236b70fd4a385b2168d1469d8f4317a266a655f3"} +{"index": 93714, "batch_hash": "0x2556494aa2c02f02c9a4371e22941fa24488560c1c77e0fab86fde38c2320ff7", "finalize_tx": "0x40842d1f28ae0d0b10bf525f9e9bec33eb458b82e030285fab1b6ab58865bbac"} +{"index": 93715, "batch_hash": "0xaca6ef67769c1534f345d973e6e14b16000c8e592271591e172c80a39ab27407", "finalize_tx": "0xa181c4339a98342fe766797463d8af52be79076fb266a4d83bdc3b6f5c62ea9c"} +{"index": 93716, "batch_hash": "0x86c8851c1ca3a8db418f0dc325d4ffbc407bf58a53c85703658412f2ef112234", "finalize_tx": "0xd20e6dbba598ce3d440f14e8545042a92e660097fd2dca2bea2086b5ea63736a"} +{"index": 93717, "batch_hash": "0x0635f4c893a2cdf7a09fbf7d97bff985d5be4cdf4127bf13351c50f5ff34c8fd", "finalize_tx": "0x3c888444f07eb31a313bff7b2450afbcf75510f60db205c868e210308bc48871"} +{"index": 93718, "batch_hash": "0xa97e9c2e5d046a452056135b420c9953471f6c9f9d069935b96ca94d4fa867c8", "finalize_tx": "0x0743a350fea19b55b17da9d76a92ab997d9bc724c4c7b30ef674fe22ef0c22ef"} +{"index": 93719, "batch_hash": "0x6cf21402cc4724f9e6d36af3e139df9e311d7d3e8da5a3cb0a07b1557829dfa5", "finalize_tx": "0xae8dd2d2ef38960980306c97f1c531fc4727e04608d8dadb98ab1f84d102709f"} +{"index": 93720, "batch_hash": "0x37eb3ddadd0a7955244c81e1e84162822352e1a99aae0c87603fb0ddfd740eaf", "finalize_tx": "0x2c6a81775882d1c261d4bcbeaadee09e8325f65f9727739f254ee0b85a677498"} +{"index": 93721, "batch_hash": "0xaf9e6a8f543869145f927b7ed19ceb21dd85add07f757b665be550c95ac2d4a0", "finalize_tx": "0x16ee2637376fe45b9ea59be14bb1606acded2900ba9b94d4139d275496f1d0a2"} +{"index": 93722, "batch_hash": "0x389f39621a0854a5e53239e15556914d66fc633694a9ccac4b039e5bc4de2614", "finalize_tx": "0xa9d751254761c7641b7b3f54d7e494a95bbee183545526a3ac96658271162d27"} +{"index": 95673, "batch_hash": "0xc5c64c2817035c0da58d72b5664bc33bc9703140e7a3cfc07bbdfdc03c6f6452", "finalize_tx": "0x178a8ec15ecf591cee4aa5a059b50477f27653df0a933f5f5e5ec928aaf757f9"} +{"index": 95674, "batch_hash": "0xfb02c405a699749e8daf3c6acdaf75d9d98921bfc33b53f196efc8fe7fd00739", "finalize_tx": "0xdee5e6dcaa3964fa3a718fb096bb338929c627e528122f6c41765b43ccfe8dbe"} +{"index": 95675, "batch_hash": "0x5dca997fac0c846b74f0b5d2121b7e2931b8291117536312a26023dec3b7d922", "finalize_tx": "0x828e9e2cde29fd0c197fc61ff54e6710a73d166a6ca71c7fce36e67169a9a5cc"} +{"index": 95676, "batch_hash": "0xfe3b234518dee5f34e476b5a173f05d094ca5d1021e60cc616e3a3150fc2a30c", "finalize_tx": "0x46f89e5c852fe6ce3b3dc88dfb3a3f330a072a333a2a260237208038366a7d28"} +{"index": 95677, "batch_hash": "0xd721900b6ccf81b95b8e8bf787e1e40fcd0a0a63e6cdbeff4e7afe0c32acb486", "finalize_tx": "0xb68ec904d939d341d97dcaeecdf752099e859de8a3a9460391d2e36a72ec7281"} +{"index": 95678, "batch_hash": "0x40c2fd403ada1fca85b4e2131b8b2e5fdd7157d2c227375fd8c3caa4664b74f2", "finalize_tx": "0x252e4e2e8018d36ca61487288aca130bf28993b6f7d2b2c88eda9ce8f09e50fa"} +{"index": 95679, "batch_hash": "0xebea5fbad3be45e8ff163b1471fcb8520fa22dfee9b710b2b781105dbebc66b2", "finalize_tx": "0x39ce11e853b4eb5d58fed78ce5fee85d182d5638474df2ddaf57aaa7eb6a0c1d"} +{"index": 95680, "batch_hash": "0x095c5f3f402b7cc3220647ba076fe0e2e85ac7ad2e62a0703169529e26b8eded", "finalize_tx": "0x632b7ec91ecf65c792e18ed68da91b771ea5a25e6366ba2d4eb06833e82e9579"} +{"index": 95681, "batch_hash": "0xef77108d88cc8e1839125e2aaf02071866a778d381dfe242788a9c4502bd7178", "finalize_tx": "0xdd37ba61d87c80d5173f9f4fca0f450df256d9eca281c4937a42000d2844ecde"} +{"index": 95682, "batch_hash": "0x5c004718001ebcc20d04f646620967f67da9b175ac81249fe3c0adce001dfcde", "finalize_tx": "0xd579afb01ae6be95753e2adfd2107a8e7dce34b0306f2680b83be1a9ea259b03"} +{"index": 100883, "batch_hash": "0x2a3d2860facbd7afbe84d7e10fdbbae8ce3de401ca0b3a719dc21a5b6f08da76", "finalize_tx": "0xb1739902393547ba50c140c2a21610f40d02d5c8b626eeefc72419f578c01b7f"} +{"index": 100884, "batch_hash": "0xb054c088a160fbb2adcc62fdcd1f51b079873bb6770caed2791f08a2dcc3ef56", "finalize_tx": "0xfe3f768d8f64cad1b1d8506fba4c922dbeb15be1f705c1d24b4d469d50a6a45a"} +{"index": 100885, "batch_hash": "0xb5e96d66ba789bd1c3f99a86840110ac1e4eb64a04618eac68e460219bdcf2c2", "finalize_tx": "0xd0abdea8e283c2fbc233f5d486fc04f07863040dc0489e9dab80301f00712289"} +{"index": 100886, "batch_hash": "0x4543fb2a4826c7412e5d83ae86165e9722c8ac0c72d5a819dbaf0b4808f3aa2d", "finalize_tx": "0x85985eeb1e73f6b957c9954865bdbdda03259803d38d29a47da3654bba73ccdc"} +{"index": 100887, "batch_hash": "0xdc95a82736e584b0345fe6f32c072308b148d4169b994883b46c2834bace5489", "finalize_tx": "0x55dde3f3623322b7efcc80f8dd258a1e06bea6c4273cd9f8fb524618b57b72fc"} +{"index": 100888, "batch_hash": "0x81f2c96020db2f8bc844ca5d5386a9d8bb240135c93ea1555576ea5b1649a068", "finalize_tx": "0x6858160458bba2fb0e1e14b036c8d012adb580eabc968c50dd6597af403a30a1"} +{"index": 100889, "batch_hash": "0xb41e55381d6d50c28ce0499d4cf75a4ad4e3f806af8dc104ee978079b10d896c", "finalize_tx": "0x2195ff75e9e82a4b57b53ab5c930c95cc2cd914ece5a2b0c0b4d5035c8abaa06"} +{"index": 100890, "batch_hash": "0xbb04ffb181a4ae8231ba1d6decf4074f1a5d75fb48300015cdb4564c0126b901", "finalize_tx": "0xdb296a7ffb575701f8d3c0d8d88eec06bc040c7c25c39db2159e96cc1564e1ba"} +{"index": 100891, "batch_hash": "0x1048c8f18e8d5de3cba952fa3270c24fbfde72509da0130acf8a303170bbf271", "finalize_tx": "0x00775b6757b922c9a71907afb4f06cff3678f62a2481f76c6863a966c88f5800"} +{"index": 100892, "batch_hash": "0xdbc50340bf8d8cbc67827eab8526fdd1d143b446f238e7c8d58a682e474a57c5", "finalize_tx": "0x44ff25dacd4627bfa951c29d74fda408c187d781a92d874b4fd0a0a0fd0c7ff8"} +{"index": 102503, "batch_hash": "0xf0c7d15bad8cb6f8be043cddee29afb671b0cc2717013fe5f7117e6e635b3e55", "finalize_tx": "0x253ead9c5c50a4a16fadfd6e7f3489ae60d857fb7bf460fc37b1aa2e3595765f"} +{"index": 102504, "batch_hash": "0xe4cfe56f1e8b76e0d85b43ea4075cbd8f3aca30dee365989002767ff07a71e30", "finalize_tx": "0x4366424f1d4df4b5ff67f688c7b4c5664cac623bcb1556796866c9d3b9b09d98"} +{"index": 102505, "batch_hash": "0x6f159c378ed48c8cb7bd1dad3cfa5ef57f17da275ff170e83344b43771d26f69", "finalize_tx": "0x4454579835f01d6f99c4f0aa914952def084000e91aff60bdacf10d0ac30b50b"} +{"index": 102506, "batch_hash": "0x27fb12d0c0200d63fb82809f6f16e393f73be4f8cd6bd59ba7975c7e9ff52561", "finalize_tx": "0x7b750ba9a57986b96e5e23b6a3310eaf739b7c9eafbcafd3b70ec53d4a7025dd"} +{"index": 102507, "batch_hash": "0x063242cc829d2c9a08e64c1be0ac8a18fbaa9bd1635809315cccfdb148c02df8", "finalize_tx": "0x17a556ab6802557157e1b92bf0b0ba7975631eed3348fa167b97aea890d3ace8"} +{"index": 102508, "batch_hash": "0xc3654be81bb1c1ae9fabf0975f9b009b61ff0de1d5dd2ce82fae98eafb3fa9e8", "finalize_tx": "0xa6712bd90a5deaccefb941939fb170b748fa825917dc641355a7f53b580e10fd"} +{"index": 102509, "batch_hash": "0x8ab4ba7881e1af745b40a99bc2af22513d93df462d0b196be1af12b6b1eea236", "finalize_tx": "0x12390afd5f87632c5cb6b9d5f93070b23932e37cbea63ba92dfb9524b048a8bd"} +{"index": 102510, "batch_hash": "0x54a371e32f6770db7f9de48b59e80654b9918fcf0fcb71674f035363d80fff12", "finalize_tx": "0x70f723c5fc4b278d6c87f33d01afc5475ea94b7583a6b1ebd3e7ba71c291dc90"} +{"index": 102511, "batch_hash": "0x948cc3f9812afe115726b1a89d7dfbaf8669ef502932261c232db588d5dc4bb5", "finalize_tx": "0x6dd1e7497cdf4aa359a0803c66fab5a5eec388504e1a81fb6acab13159edd458"} +{"index": 102512, "batch_hash": "0xc5eb3255fb0221542ff42ad91b1281a3621781ea87c6775f754fbf1644cb1230", "finalize_tx": "0x8f1d1bd1bc47c65ed0381d67f3a76f8a82cb783041808e8ad471b68d11a7176f"} +{"index": 108393, "batch_hash": "0x1a46c85016e1dce8f3adf19cedc3f2cb1aa8da52cfd05c34655cc1233ee94981", "finalize_tx": "0xcc5a29c95348475bfd93a6c1c095c581389f32e33f9e568cd0a1728a0ed3c7d1"} +{"index": 108394, "batch_hash": "0x8e228b0273e680781fadd466fcef31690ce5d28d9849ce1c271f30942c31a20f", "finalize_tx": "0xd87ab9aac41ecf1e3e2dbc37e612d359b2df55d232e381a9bdf8c59085b767ac"} +{"index": 108395, "batch_hash": "0xa5eea9928c39bd50d4e3936221328a48e6fbd9ec5dcfbdebaaabf586876150f5", "finalize_tx": "0x1ce43aff3b970987ef74869864faf00acc4b26f2e093feb168ca4d34c6a81faa"} +{"index": 108396, "batch_hash": "0x92c86079260550a4c84cd34b27a54bc66d94ac11b50e7ab3639c481247e169cd", "finalize_tx": "0x13f9258fe30e946636c9d41339f270467a27e209bcb494cedcf00bacc6591cfb"} +{"index": 108398, "batch_hash": "0x509cd87ca7e5510242416be7464c1fd7051cdc3dbf452806cab1c883751dbdb6", "finalize_tx": "0x8e8c83ab07026bd3715fcbf100c03439b60e535ee4c15d14178e5231cb832581"} +{"index": 108399, "batch_hash": "0xf171e87a736c2c4e02653bcb7806547742631a251228c0ece60600c740c48083", "finalize_tx": "0xe7d0d0d6bfe86a044cfa09d41023dd8558ff9dfab9944bbf9a8aee28bbf52589"} +{"index": 108400, "batch_hash": "0xe1a54c5c5365ff3358ae1b13449c8e116f8d43e3ce0218ed1779e9ef3bba2072", "finalize_tx": "0x966b5ba55e4c422e0bff747b2a470536eb5861f68c1bedfe06cc9113304a7ad5"} +{"index": 108401, "batch_hash": "0x8a7e5a7987719b0cf467c35a7562942f3d52623d79e19c64201ca43871eb2ec3", "finalize_tx": "0x83c8039e20e0da0b00952061f628fadb433d60fa574a3b75c2d9988f1527c4aa"} +{"index": 108402, "batch_hash": "0xdb7771258c4bd362caf3649ff0480a28eda62fe4259bac7c80243498cfcef72e", "finalize_tx": "0xc839aef624d43799ba806248624bfeb16870c354f643da5073e62855dc6349d0"} +{"index": 108463, "batch_hash": "0x4c4bf3c90466baf0bf2b59fb32648f61349e334e6e1368c969f92b8dce16026e", "finalize_tx": "0x045453c9ada2a17f359b1dcead209de8f956b76b55670679c5f2bdcf7a270752"} +{"index": 108464, "batch_hash": "0x39560f49f3dea2f38cb50cdd5cbaa9122f1189ad076a6191c4ae8bb457a0e67c", "finalize_tx": "0x494d156836a16f55bbcda035cba6a642ec82162506e6b5e3db9c90d7b5b72946"} +{"index": 108465, "batch_hash": "0x83541be7e9899537fa0d887d8426269f72ff2549d9c1a15f9de37fff1a6ad21c", "finalize_tx": "0x18df72945dda4591dc1171f374b807b23f1ecab817b8851ef41be83c4b3c802d"} +{"index": 108466, "batch_hash": "0xcdda84bb6f2ddc7e51fa771383c07f77f2da6770e60a81d631392a575a9679f1", "finalize_tx": "0x52b6a2d3f0ab9def26a914687adc811449b8365c36036cb06648ad2d7e0a53e3"} +{"index": 108467, "batch_hash": "0x41b295e9a1f5bbbc0ee491d376254ef8a3c53bf6477ecc694366a10c1d72df3e", "finalize_tx": "0xa2de9a1a394db9c60af8282228ea77684be0c7837a44191583952f309b86161b"} +{"index": 108468, "batch_hash": "0x5755f77f01a156040fbb9e867c8588f606a6e9da5622d520d641beddd5846681", "finalize_tx": "0x299f9d24a8036e22bcd74cc515c0c1f849e19aacdcd54b217382d0a9b93de6e2"} +{"index": 108469, "batch_hash": "0xafd2571eebe21a556a8888d4e42518e62f6e032f406c3f32ebd013ea766423b5", "finalize_tx": "0xef32a5789c054c47abf4072cda25febefc89a50ecdda5dc47145e1205edb5b51"} +{"index": 108470, "batch_hash": "0xa70e39c2c49ac2cedbe8123f12f4ab99594aed5180687563defc13e757ec381b", "finalize_tx": "0x8b0ecfe2b31569fd0f54b060e0bdcfc94582e4306fb457f1be798fdc388b0e2f"} +{"index": 108471, "batch_hash": "0xe87e6e3a22093cd0be8db5183151db307ca097a7222c2600686d4937325de115", "finalize_tx": "0x6757d54be146491f29405239028b62c96dba581fa0af1951bdc0a070d021c7bf"} +{"index": 108472, "batch_hash": "0xeda9b8b6ddfad345256ddb13ae8a84c7ee75fe8f290f7a1c0fe3649ea27bdc9d", "finalize_tx": "0x8964ca0fccb887c6c6c0f4e95bb35d304b7202f1acaa22abb02e8018100d0ee8"} +{"index": 109653, "batch_hash": "0x5391cc31aebcce814e89111522aee547d66fdf1428e46a461b0781f8800a4f7b", "finalize_tx": "0x728dd6c1e013052ec6c5ad052156ce9ab9b7d9668a40f3bda397bb55cf443f5e"} +{"index": 109654, "batch_hash": "0x800a8d934ab1701d3f7ddbba7ea7a5a0086f39830c3bc70dd84aace92f81f9fe", "finalize_tx": "0x2f5f91998a172ac6fe77781bf20c69c4782ef0b4e492c3491b855a6b0629be6c"} +{"index": 109655, "batch_hash": "0x94c16a5d277e41e4e7096bbbe6544ebaec15594fb03c7c656c7186bf0498e147", "finalize_tx": "0x2f2508426a0b9b627fff0ab39e6566145a8a46ddbcbc61930b5cfda515726b71"} +{"index": 109656, "batch_hash": "0x0c1b47c4aa12918253c100b98ba392694b91e13d088c54672a9890371848d91e", "finalize_tx": "0x4283ea2fa1f13df327cfa8c626e511ccfd23f396b2b43b96e0f431bdd3b2eec5"} +{"index": 109657, "batch_hash": "0x38886b7380980d505239052305c756af3445e8c0255be42e07f081be252523d5", "finalize_tx": "0x4567982aceeedccc5afbcd0e5a9b77a964a81d6482b955b812fb16ecb9bfdb50"} +{"index": 109658, "batch_hash": "0xb6ef6d37b57e4595cb987669274430116a2e3a696d65fc772771663421a9247b", "finalize_tx": "0x097c544216792d1b68b4370028b0bc4cc34845b3aa49c367e6c8446454754711"} +{"index": 109659, "batch_hash": "0x7b568ccc74533f556d94d417c89b7facc11b7d7244082c6fc3c825ede519a8c3", "finalize_tx": "0x01fd6e0fdbfd56c28f705496c5ea2ced5de70593d635e8b2b855ba86500e57ba"} +{"index": 109660, "batch_hash": "0x51ef5a6ecb43bca237731bcd9d39980082d3b96cc98e9ced99a7f0c88bc4a105", "finalize_tx": "0xafa5ec5ba06bb5f5c623754188e0f2f6582ba2d1e9249b5be9bffb1ea98c5c2c"} +{"index": 109661, "batch_hash": "0xa1e4b459cc0a3cd82ef26c3a76a08683948713ed51a1b4a58b67c5bdacb3db10", "finalize_tx": "0x54de014df4f557c3225df07f262846eebaa7e8fbab8348e6207a42583a6565b6"} +{"index": 109662, "batch_hash": "0x9c29ea2146ea4cc47aac64fc42dfe68c5cb8b729cecfb777fa5b877fd56f321f", "finalize_tx": "0x6ed19eece7b376f2bda9404be2cb17fb8a55e75a791c91872d7f189e3e3c76b0"} +{"index": 109863, "batch_hash": "0x9c85dd4fa21dc081b2b8405a50312a06c22bdb594a8c5e7e1edcd5d9cff05aa7", "finalize_tx": "0xffd99f733a4717a36e5f48a2bb858e0b840ad4039f650ace63e7c2cbb4207759"} +{"index": 109864, "batch_hash": "0xb33742370f04e2b5e665944b624898e1a7bcbf81fa0d863154a3ef831acc2994", "finalize_tx": "0x37f09d04981f57ab0cfc988a86f8bfdc6fb2ca9b517624101e0fcb5827eeb24a"} +{"index": 109865, "batch_hash": "0x4c27c3f5bd49c3a576bffa13f7da2a71233a781c042e6874a4bdf8fd2f035bf9", "finalize_tx": "0x61754eae742ad1b37425e12781e970621cf50ea0ea54dfaa8bf5061d94f30bf8"} +{"index": 109866, "batch_hash": "0x76c9a34b6de6261ec8e39ed7556478ff6f4fe955592b7fd26577e95d128f9560", "finalize_tx": "0x0d1309676761614ac443916545f478ff1f9520c3c927f884f1f88790954cdddd"} +{"index": 109867, "batch_hash": "0xe0304b90e1a07961f43ff33dd584eacd08bf451e8adf906f005249db3814f7cd", "finalize_tx": "0x4ade6c17126ea288288cf33bb0b3f7d1afe9afc53ff98015d92bfb807ad06eae"} +{"index": 109868, "batch_hash": "0x8b27c89b49f7731eb287a0d85e76a835f395d38c196b7503e0fa42a64577e40e", "finalize_tx": "0xc9ffa549b42517c9c0f18f4e9f7e2ac0e24339abfdb87f9559ed07a8cfbbc8ec"} +{"index": 109869, "batch_hash": "0x11f233e688f804eb4fe839f73022b466a7038f7ea2851f4a4d47c51d9d6f9890", "finalize_tx": "0x1292f42e1a07f9395b53ef4fff4e99114763691f3ad1b50002f29df418aedbb1"} +{"index": 109870, "batch_hash": "0x182ba0c2b906612e3463aaf68160725144eb4b34284b30b7a899c1a0060ad28a", "finalize_tx": "0x26a8d210fb69a731cd21c1acbb11a12a2bfe2ef98fe5c7473d8a18fccdecbddb"} +{"index": 109871, "batch_hash": "0xaa1fb4ae3eafb1941f28c7f90b365f0159cbd33ae951dfb0277eab06f9fbb104", "finalize_tx": "0x00000127ec5033bafd78e742c9c7febc21b7ca20f6fb246d415dacf69a4eb3e4"} +{"index": 109872, "batch_hash": "0xec40b31b65d4e5ba294f1213c26fa3125bed0c6f975227a1cbc9259fe930d5b5", "finalize_tx": "0xefb6bade34dfb00e3d8542c9e55f45f2442369e2dbe74b41bc1072979e3ef8dc"} +{"index": 111123, "batch_hash": "0x3346773dbaa0fddef9cbe7b9a38d289d419c80110a19ec857e051dcb638ce34c", "finalize_tx": "0xc16d70322958e5f3139d35e429f72bf178532ec0735d8cd6c9402260438db8c3"} +{"index": 111124, "batch_hash": "0xe981cc98e0647651befbe2f9dacb7de794075ffd92c4911d2aaf60693e8c682d", "finalize_tx": "0xbfb0aa50e33c3bacee94a6f6e040f2843d4d481f774c6c6250fdab1c31a0195d"} +{"index": 111125, "batch_hash": "0x26273311bcdd72de267059f21e17511e7cabfd06ae68e56a4394ccd1738a4ad0", "finalize_tx": "0x66d86dedd2c16177314118c5c9e63f4368370748c98c80ed2d0b0183ef5dbff5"} +{"index": 111126, "batch_hash": "0x05f8906899e17df3c50c7b570d736dd9d0a2cffc868df486bc550a806b19b8dd", "finalize_tx": "0x6001d132d668b65cbf2c7f8d69967e820263655af27d8fa77d1b76c8914a36e9"} +{"index": 111127, "batch_hash": "0x9d91158bbd63832305426928d9ee28273f26f172cc45a6a9a3d5c70b8b8eaf99", "finalize_tx": "0xe52761f636f65de369dd563b8e4983e33516d6561c799862a1f5dd6db3515449"} +{"index": 111128, "batch_hash": "0x3ccf6b4c8dcbaa0cb5e2e625e097bf3b5ecca7d5fd2fd871d0f69bb1c4f5b0de", "finalize_tx": "0xe79d848f9511aa35ded7c5209309e804581ddb78eb572d73338118c46877c47d"} +{"index": 111129, "batch_hash": "0x005e629164062df7e69fb73009d6d2e8acb160c8b903cd5e543893ff74fd713b", "finalize_tx": "0x90f12d2a45b50c41e8c68e1fbff46f34a93c082c83616c757f4ab319d4324045"} +{"index": 111130, "batch_hash": "0x4f3bca78aaa73b287631f352ff217b028d2d0dbcde2d6f1ec18ff72d57ba680e", "finalize_tx": "0x83702d48b490a1c12861899134e2451c61c596e6827fd48ed440a4253d52e674"} +{"index": 111131, "batch_hash": "0x5db04a198f341ce62e62151dae7c18266dc45f4142045a6bcb8e9f6e282c6072", "finalize_tx": "0x2b5ac299d831262d254833b14415c689f43746d887e428abee73acfa00310646"} +{"index": 111132, "batch_hash": "0x1211b98f2bd8ae4dadda44d8922040b9d866853f40968fda80b3d874ce349c68", "finalize_tx": "0xc1e9a35f891f4cbaa6f5e876bb7111937f6a7c777c1221975996cf7bc58084c2"} +{"index": 118343, "batch_hash": "0x577fd196b6826d283b944360f953a7e419ff7b4a737f48b4418de96187937b8a", "finalize_tx": "0x76562e435788ae8705e292e921eec2216caa41f9087bbb19c1cb91468f1e55b7"} +{"index": 118344, "batch_hash": "0xa2f79e555b1d4437ab550f4c1c5f88a8158fffb9fbe7aad05584950884a5e173", "finalize_tx": "0xfb77c9bffd6b7c2630c13811b016d1dfd904d73aa3aa69a8d3675fe6a38a43c9"} +{"index": 118345, "batch_hash": "0x57a2bf7b57607ec733b4ad0a7bbf710cb94a9aaee305d865d50586bc2caaef15", "finalize_tx": "0x01fe13a96e24341e272132c2fdab9c5a35e43231d8aa6ed4066829031f23c8d5"} +{"index": 118346, "batch_hash": "0xa1e7ce270bd13f9ffe4d3c9968d7878a399bb61d28929e9b2898b7dc21e96151", "finalize_tx": "0x2125a49b6d798fc68ecec276e48791f90bc539332df129c7b29cff86037f653a"} +{"index": 118347, "batch_hash": "0x8abc4941afb8759d9840fdf1ea6d7f7d5b2a6d991f946f3becf4973d895c8aea", "finalize_tx": "0x6f536fe15f09f6571e9bef8aa41ffbe977b8d71ca3968f7fcfe7636459c07edc"} +{"index": 118348, "batch_hash": "0x3cc9963574c79fb622d0cabeb8c0e249bf8430316b7871498d8c3829a29ae592", "finalize_tx": "0x0120076612d3173be4904ee8e4fead4f1f8bcd6809441c7e5f17074f6fc2b959"} +{"index": 118349, "batch_hash": "0x33230c6da5396544e673013ce1be229684320744f924a88392e90e2f8c554dc3", "finalize_tx": "0x79f966c6caab793097902c16ba9e3e35b0ce523d7a5aade046b1bd398449989b"} +{"index": 118350, "batch_hash": "0x9f7a51e459b02297d35cab499e4ee422913b6fd0ada527c4518fff4dd69f062e", "finalize_tx": "0xc9b7a31d1899c6853edd7c4f927b688f53f5070a300f27577507c7c1b49fd242"} +{"index": 118351, "batch_hash": "0xd42a23649c0f67898945fb4767db5b3967f0330aba41a2d6d426d0389505433e", "finalize_tx": "0x9054ac77273785089b263410c324c24ffaf392459b70c732d77de00efc41e7bd"} +{"index": 118352, "batch_hash": "0x90e57437aa3a565d576dbdd0b145581b61a23c78e9df08a9ecca9b9b7db4c588", "finalize_tx": "0x261af2757fbb6a7af55c8914d0b30a8878ead1296607ab24e603177ca4cad13d"} +{"index": 118843, "batch_hash": "0xed549befff4f53ccff1793b7d175d1a94f876410ee1f052bcb7e24fba7ab29ac", "finalize_tx": "0x0a17907dad3bdc74049a71de12d1b923730e706b90eb43e43e9cf68ba2033616"} +{"index": 118844, "batch_hash": "0x315e7539ceb9b323f476d23dfe6567710ca56190d7a63047d53a4c46a25d61cb", "finalize_tx": "0xf4e26f46b0d512c4ccb5130b29cd33d6e4ff6551e90ee4b15f87ff47c3f5fbcf"} +{"index": 118845, "batch_hash": "0xd3575cff1e388ca297aea4885708bf4ada3ff1c858c8bb73a888e0030ad89641", "finalize_tx": "0x52c4852b4fb4443650f13dcc48aaba310cc8090c12ca06e06bb506810f4992fc"} +{"index": 118846, "batch_hash": "0x65a7d42f423283c0bb90bb6d06eaead81ad19b05f266e0e78037e1cfafee8645", "finalize_tx": "0xaa2d37c949bc27e12a1cfdcc6ba1d751c6e5ada32dd1a26265d42f53994e1905"} +{"index": 118847, "batch_hash": "0x0fe4f995c1fe02d38e521bc8fcbaed38ff35e412ad5917a2fd9b79ec744c1aef", "finalize_tx": "0x55e5019e5c9d6d4d42ba4f71d22273b9515c9a1baed5c2da98a70564bbce5eb9"} +{"index": 118848, "batch_hash": "0x890c9cced4f23908490f7b973a765c2619dcddb0a9fc276d496a06a433f5c040", "finalize_tx": "0xfabd6042ba5e3dda953e4f9a10fa8b40f002af1a7fe9516bdce4a1fff723b3e5"} +{"index": 118849, "batch_hash": "0xbda4c33deefbaaf15d95347ff921bcdcf29da38b90829c48a4941d601f154222", "finalize_tx": "0xbc1f1e6d0738478dfca7fee97d95d1ce20e7cfc1081cd201568636bfb89809fe"} +{"index": 118850, "batch_hash": "0x176290330082c5bf21bc072683b4bcb9108e75e99e3805a31375345da1985d24", "finalize_tx": "0x4731a052869686e2593954cfc60c20b2e6ad90c8388f7480cc3b8405f19a2000"} +{"index": 118851, "batch_hash": "0x71f825eb2c835a54fc6366d05436a1e12d39744260a372e3cfd0f1c25e065325", "finalize_tx": "0x8059d078d909ae467c1cca811995128570697a69f0060d794f44f4f515abdcc6"} +{"index": 118852, "batch_hash": "0x89a44785022b073642b8a4ce2557a56e6833de7eb75bcf9c12b8664ea81e1697", "finalize_tx": "0x7d10197fc1f84c84ca1c23cf55d9a802b48d19a47603680fb5ff5d9a9e6c9d37"} +{"index": 119693, "batch_hash": "0x8a7331316693e75f852fb7fce148178ad08ba171e8c5361379ee8852cc3084a0", "finalize_tx": "0x291209255234733d717572ea6a67442fadb888715bef684e36bba036547e7003"} +{"index": 119694, "batch_hash": "0x821ea4404a15ce048051f0de4605ca0c35976b45ce932f0dafaa35f831df860d", "finalize_tx": "0x40747ce912b85d9a05060f20c28c7e4da11f2c8afaeabbfce053b52ba626ba54"} +{"index": 119695, "batch_hash": "0x831ec2036e6412ad01238da3ec38a366a9dcab3764c89e2df1fbdf95b38d89c1", "finalize_tx": "0xd1f3ba68bee74ec4322323747017a32a5237f1625677fd70a9a2696187cb6b2b"} +{"index": 119696, "batch_hash": "0x5c91ea3d95abddcb5eea567cacf85a1579d006092d8c78045d864ffd9c043a5a", "finalize_tx": "0xe8f61046ecea316a1239c7bedaa6535134bc70d7dfd265549fc95ada28de6089"} +{"index": 119697, "batch_hash": "0x5ef4d0e803ceb2418ead15259121b30541999b37a0cc8cc7b23784e493489925", "finalize_tx": "0x7cf6135a3c96814821ff81b65767eed48b557db83c6d62de9fcac1d99d1c69ec"} +{"index": 119698, "batch_hash": "0x7685ee2cf7a84d71dcde765c89c8e0025413e874aded9ccd6da477869e117dc7", "finalize_tx": "0x56440b8ff83dcc747ae1b544881af2a0a394872d0520138e969d5f0772956ede"} +{"index": 119699, "batch_hash": "0x5b52a3a7b9634038f2f13e44bd5ea9f2399abd53fed337b4f9ac15341d75c24c", "finalize_tx": "0xbc8edb60c6c241c0766d130a05c4cee09976cd254f42820df921b3a704d21933"} +{"index": 119700, "batch_hash": "0xf7114007f7929bc5141bdbade7539d1d63f35269f990b723423c0fba6dfbe70a", "finalize_tx": "0x461b94a76e186e735f00963c0644b297a159e02d8eeda86c454b3d777ad6e4c8"} +{"index": 119701, "batch_hash": "0x45f6265fb693499f65a44c9bd89d8e6a972e0e51d37f5a342f50828fd4edc8eb", "finalize_tx": "0xe7e59e494695e0d4e4d7993de1162f6f9df930dd784b4d0b064d08b9778cbe7c"} +{"index": 119702, "batch_hash": "0xe8d3c74ebb336feae3a1da9e4074063840c11a89ac85c104a6a146fa3037ff55", "finalize_tx": "0xfd22185be0e7c712cdb506707e4c55aa9f02fddf5ef379cc41758736a328a3aa"} +{"index": 121843, "batch_hash": "0x89aa0e6ab8d2345c19522628b8f5b05530c971afc849d4578485060cb1fe9254", "finalize_tx": "0xa100670a527297834c459a4dbf1c183611d02262525f26caa47985bceafd6a13"} +{"index": 121844, "batch_hash": "0x7819ff51143a8aaa72d937e35f881004c5d78266c53c63459e5cb27a7650a4b2", "finalize_tx": "0x7a93bcb3d67c83299a6e2bfda899462a2112b93fab4968ec9d1d90f3ff350f19"} +{"index": 121845, "batch_hash": "0x089661b72557db5c32e121b7b41fa1831b377d8d26e5425faab846963cfe98e8", "finalize_tx": "0x6d80370cca619c6da899932c0f23cc707d10ed7e10e404cb86ae170273b79b33"} +{"index": 121846, "batch_hash": "0xa0f85953e06a080207147654da8ea41aaee607b6e63fdc46072fedc4f87637ed", "finalize_tx": "0x456867a5e11906c4df9639729b36167f3e53d3f44d6659cdcd38bf7943df2ef3"} +{"index": 121847, "batch_hash": "0x0af9d14b41d181535f1047270df79d840cf41da0f6b970ad142129e5c6a30541", "finalize_tx": "0xb80abac712e8276dc128f3944ab064db4887ab9248270340e2577c3525290ee1"} +{"index": 121848, "batch_hash": "0xcc10ea0b50d95c59341caeac0fef36ac1006085b20849cb62833fe4891887121", "finalize_tx": "0x7c7fe5d236538732e0fdf8923b3e818701eeeb72be6dbfc920d7caac8022749f"} +{"index": 121849, "batch_hash": "0x478cb3c95a6fe0d010efc31511de26254cbbdf8d3366bc276e21754f014c539f", "finalize_tx": "0xa7e5ee26f854de1140d304283b60380da582d630b6d25f1d31824a3ccfd1061c"} +{"index": 121850, "batch_hash": "0xdf1bfcbbc27febb49d8dd544ca4ffe2cfe59a16cae4292eb0891c7b4e956810e", "finalize_tx": "0x6cc792a14b4fc7f373529227f689ad98589f4f46bc31866f6dfd7d099ad415f7"} +{"index": 121851, "batch_hash": "0x8797a0c44348c4f84968dd96fdde82fb32059dbb21821c17638a342f25fb009f", "finalize_tx": "0xa811cd49bc77604f3c65dbcf6ce20411d9ee7d65469eb8a69cd1abaa813ea8c6"} +{"index": 121852, "batch_hash": "0xce14e9ac07e98fd20fa87708b03203bba34bb30513254d937a6a8b64dea31e0a", "finalize_tx": "0xd3b865414143c54a609eb79c875d6535c0997c650da0e482c453651c43c0145c"} +{"index": 125643, "batch_hash": "0x68c961bd6d4abd0c88a02fb44ec15f0e26662f5e33aaedd8a46dc85943681a11", "finalize_tx": "0x79b055a300fc016c7eab38a76a18ecb3c21ee03f3cb9dd115d8c9f071838d803"} +{"index": 125644, "batch_hash": "0x3392e042d98c9ce743a40e1e41a10cd1b5f8742b567897f09c95a4ce0678e4c2", "finalize_tx": "0x19ce18e5080bd3c3fe2bf03915369c5ccacfd68454d003474fef8529d2dc9b74"} +{"index": 125645, "batch_hash": "0x91f5bd9bf89cf695d7b1e1194d059f0b260fb1637869865534e2ad2ae4124c2d", "finalize_tx": "0xa6023c6917b287a78f39d4b9fb44826f9aac39c0abc79ab831db49c48e5668ba"} +{"index": 125646, "batch_hash": "0x239e5fb2bd8f6ed40a8b8da3555ce5bb1ee28628cb65167de650734351f1205b", "finalize_tx": "0x3206210d7a6457d1cbf9a7e20b8e2fd5f05f3b397c9fa9eeae679194a8e944ee"} +{"index": 125647, "batch_hash": "0x898363279d343d542d92db16387d70ffe43ea777a0a3c250d813c9a46c5d7df7", "finalize_tx": "0x9f77f74e4e0bc39e20b20f1f2479b9c94c722f55b3172bd05c1e1fb6d49035d0"} +{"index": 125648, "batch_hash": "0xad09c652a16e18f7cb3617f4a24c51293a946552ff9196354eb6f132bf3bb931", "finalize_tx": "0x10e2bd9da0a4c717b35be657757a035d87129c96dd95985230ff9de14ddd2a7c"} +{"index": 125649, "batch_hash": "0xf71bd1b2e9ee472aaa6c26e29f6d0bbe81ee256d40380f19cf6dba45f1b940cf", "finalize_tx": "0xaee99200dc8f0fd6e9e7edfcd95efb77dd415ab56efc12f08755dbcd542a6401"} +{"index": 125650, "batch_hash": "0x625d2526558096627398ee613889822be15b04d6e2dc6cb73718eeee0108d6d7", "finalize_tx": "0x870b378213ab1d80b15461c15b4cb6e2aa86cb9b5a02c325c0cc871ee120a2b1"} +{"index": 125651, "batch_hash": "0x8bdeea7c68cee1c578f5e07ccb55158e9341095e356e5933d97d64bf9334e5e6", "finalize_tx": "0xcf15c41e5de3c31f7196f91862cdc464865aa053f674c2a2c5a650691887482c"} +{"index": 125652, "batch_hash": "0xc534e172d597a1546005b4f4223d2ea0ffdd2930d9f4435c948f8f30801daca7", "finalize_tx": "0xa9726f17af07d9f21596f4c56a330d64b7dd7758a580dac64a26d37624abd176"} +{"index": 138853, "batch_hash": "0x67d451c73cb5bf9b4df67a929d75cd9eacd3549e65f15c4d849ff3022703102e", "finalize_tx": "0x4f5cc761e7362e111740445ecf42fb9a30cee912513c5e4364e6cdea411d2061"} +{"index": 138854, "batch_hash": "0xcac22017ba283106da8186fd7ab827f50d823d89b68e89cfbc360f12ea5bd249", "finalize_tx": "0x971210b9e0409b32f1f432c937e8a05bbfb80d87409038269cbfb0d8053909ac"} +{"index": 138855, "batch_hash": "0x536e45a66d97f0b309b992adcbf79b107ef4ab1dbdfb24bdba3567b22b152536", "finalize_tx": "0x2a373b3657e1da7d64401439819c8a0611563d2639b24d609a200ca159fbee3f"} +{"index": 138856, "batch_hash": "0x3091a9a8260d882c125da50298609ee1c0507bd96865fac622002b182e00a609", "finalize_tx": "0x816dcb76d9f3028be7c4d85ba5824dd5812c5fb9432ffbada9e6e57bdc9c73f0"} +{"index": 138857, "batch_hash": "0x7b8fcf9c7879e3659525749d41f160a2c6621ce333739ae8a57075f2c96570b7", "finalize_tx": "0x67c9153e8b2040605ca17afe803c5dc8c58576a2f6327fa68bbf7985b1b55a7e"} +{"index": 138858, "batch_hash": "0xada47889a2d682c95b0c3f56a0a03bc8df2c15c8b8d0fb61d48d11614bb6c5d6", "finalize_tx": "0x9c1215b58480162e123d813e3427ba69ef268ef1d96f4a2afa030deeb159d353"} +{"index": 138859, "batch_hash": "0x2598a16781fcda16c6b4aa7c99e0fb60b4e7f86cb1afdd0be41dd83b10521f25", "finalize_tx": "0x071b9312d092f12515a76f4492868515db24f9a74c07d4a71ea7de5f8e352f82"} +{"index": 138860, "batch_hash": "0xaae96de9a3514c44fca01ef6035c88c02ca782265e7cdde416e5edce3b527441", "finalize_tx": "0x81dc83ed55dfd9b147fb1ff1a29430d9b7bcbe572a7b24a30491bd9ba89bc99e"} +{"index": 138861, "batch_hash": "0x0e2a3202eef8c7d9cb133ac1a92afb4c7ee5405d95f64b108cc2dfe8370e15c3", "finalize_tx": "0x4b3d64c70e68b6d90fdbfdce142afd423390083b661f8f27cfc4014c4f1623dc"} +{"index": 138862, "batch_hash": "0x15a4aa639416c1b9784a9f359b9a38c4dd079dac8d4573a020641eb21e1b0c6a", "finalize_tx": "0xbdd9b6499c5a672541c53abccf968636566c2520d0491b6eba2e95cab5c79b5f"} +{"index": 143943, "batch_hash": "0x77c41a7e6446fb5ec9648e2a37c216895190c3df247aca1eccb4ae754a36115d", "finalize_tx": "0x7cfa29e1625ef79444bb496a552b89949707549b19e2f081cc1764480a847b21"} +{"index": 143944, "batch_hash": "0xd7935de1e4f1d0c4ad127ce24535d1786b5e929ec418fcf796473e0e371f5adf", "finalize_tx": "0x1015e46e834131d2a08b2dae4387b21bd3221ec142b22385dbe76ec462b4e73f"} +{"index": 143945, "batch_hash": "0x6e1e5d850c1d9ccc626b1659cd6197298bd7939c96352635679b59ef393cbe1a", "finalize_tx": "0x1fdb96a8ca1666754572dd4a87fd59379bab35ddc4b0e004cd9b480c406c8e68"} +{"index": 143946, "batch_hash": "0xcf709ab03e26beebdeca2f6d2b92029e1b8e37373bf696b8f145807914a3728e", "finalize_tx": "0x7ff4ac92a1469334a211a79df97eb2dcd062dec107742f440b182c7ec4dabe66"} +{"index": 143947, "batch_hash": "0x0df6fbe8264ea7941f41a1f04cff3188ea494cbec2d99a14df3bb4d9472aa941", "finalize_tx": "0x149122921c6399dabf05c7e0502db8cdec7a7a5c9099f682b2322968cdf3cfb9"} +{"index": 143948, "batch_hash": "0xf00561304989f798a1cf63e2bb0387aa7356e6b2879d0f74d6151aacb40ec3b8", "finalize_tx": "0x3e4adfd017e01295780034022da1708b8771f8f897332fe601f1e7d273265456"} +{"index": 143949, "batch_hash": "0x64530c0099fea9669899a5e4a915029b250a95e57ba83f5e90b2b10b5ef634a9", "finalize_tx": "0x69c9b2012cca21ee998e46ac40b93d524e6efd92c19179d313e842ad891857c2"} +{"index": 143950, "batch_hash": "0x498944fcb7a8715c863f6dcf9a3a051ca2c325ed575444a340030d4f37fb05b8", "finalize_tx": "0x072ef2f63770d57688a9d38a654e0a51120a8f4922578acc15c35a86ded817b2"} +{"index": 143951, "batch_hash": "0x24f745da1b336a0a18d8dc5ae5c111f6dfb555eba189ab2d249fbf109d4a8b54", "finalize_tx": "0xbc3032140d958e965c7fc7bfbb9223eae65c8d1a951400f162a4cf8b3dea94be"} +{"index": 143952, "batch_hash": "0xdeea39195d1b6a0b96cd7e97e7704d1268e811e053665bb75b3f5baeeb077ba4", "finalize_tx": "0xca4a8a50e6add732348a3502749e3e1a54160685bebb6e89fe8e0426bac50321"} +{"index": 144023, "batch_hash": "0xa189ad0d3debe2e5c5686e7c93b64f807d02ffe8c96fa87a0df6d59659ee823a", "finalize_tx": "0xd1bad9e3fcf5517eabbab16095c0660287c708cc7fc9676245e6aa6b8de9fbc5"} +{"index": 144024, "batch_hash": "0x20c6f6fb71a374e82c7fdd569533d5013ab1443b41a43a8ebc92fa6ffb785cf0", "finalize_tx": "0xf6d4787e0afc4c54e447fcb4db30da0522afb263af89e36885903922c3963a7e"} +{"index": 144025, "batch_hash": "0x7b7e5c8aa04debb973b4e6a2bb2f09f0e17093fa131dd9b07515b91565ff255e", "finalize_tx": "0xd5a6bde33c703dd92057b3183cddfa6bd1d1c380bf8965f90f97530aad16cd79"} +{"index": 144026, "batch_hash": "0x1b8d12d9527f8b407a10a5627120e75b45e41c3100666223c1573f76c547dfcf", "finalize_tx": "0xa5afa65700fdae4508bb1e38653b1e52bb69452c6bff8ac31b38c76c60bb6933"} +{"index": 144027, "batch_hash": "0xd2bf3b3f2249e42e6c78c84992d015adf89b2ed72f33960af02f0704b30549aa", "finalize_tx": "0x0f20b3e49dbaa501f9ecad5f2f2968775b49db82c30cfba93fe7f9f7ca201797"} +{"index": 144028, "batch_hash": "0x951ba921502491252b384af155d6aed2b6de068fa9d6b093080c03177e74dda4", "finalize_tx": "0x789505d16370e10e4d74a476976b76c2662bda0a0f3607e89b480aa7281d4b87"} +{"index": 144029, "batch_hash": "0xaf26f4d8775c27d3d3552f35afa88a97f2837648132a64e403b7f24474b18ab1", "finalize_tx": "0x37fc01dc566bbab394583c7cf3670b1bb470ec761a39ef668792a2af5b559a9d"} +{"index": 144030, "batch_hash": "0x0f46c67252b4777d2ec844ddc927de17597b48a6229ad6dc03122f725c0b793e", "finalize_tx": "0xea9d43813406da51c8092a08504a68533fb545283aa93f3bd10005267b6a83c9"} +{"index": 144031, "batch_hash": "0xd1369a3e4ab4bdf911646c5700dc8a968a6328bde01eecea3625fe5b7102b564", "finalize_tx": "0xe1846e6f7d013d2b117fca32be142524945dc14532f35f9939c1eb5276d03040"} +{"index": 144032, "batch_hash": "0x62812ee2e89949f9977cb079d6696bb301fb5836fb7c94064e7d1be343d3d29c", "finalize_tx": "0xaf6d01e67d0277838dc31da1a271e61668a888f67ddf4ff9f1435847ca62f70c"} +{"index": 146013, "batch_hash": "0xa53f6419d58032b992ab66f75180d5249c637909ffae36dd34c5cbe648304f58", "finalize_tx": "0x45d3e6550d05451ae6e0ab1e5034427886977024615e94e872b5c7f6daabfaff"} +{"index": 146014, "batch_hash": "0xe45cf4bed12944928f08bbb0023f0de60b6538299545132a9f3f5e18d5f4949d", "finalize_tx": "0x2ce01fb9de36dece91fae9b9aca2e689b9835ca1122c1dd42ad048760e3bc575"} +{"index": 146015, "batch_hash": "0x1ba02d7c2a28c75d4af94ef3f23234da16f3c94453b3630c359bdf3dc824b50b", "finalize_tx": "0xf7b7bd59350b73e70ff9377ac04b6d373b90283cc43cf675f0847484bb66d195"} +{"index": 146016, "batch_hash": "0x9471350ad2f1bc00cd61b10f64bfb825006c7f399fa9479a46648cbd666b9dc3", "finalize_tx": "0xfb9cddd117ce99f4edaeb602387b0bacd9f6d08e91dad602bc5aa2d7ae29a0d2"} +{"index": 146017, "batch_hash": "0xad95592f740c437499e3c0e5071fc2dddf1b76637879153a3e63bbbd4dfe57df", "finalize_tx": "0x6ecf0b54fca09fe662513ca6472f0f9b455cd91181e78a45502c9763baa2ffc4"} +{"index": 146018, "batch_hash": "0xec65317520d601abd36b580770c36151c77e3febcb9901bffa81cf269c592269", "finalize_tx": "0x4c80cd7edc12ae169043333ba29e28b69692e3c63d9e6cbb3fc70b2316d5249d"} +{"index": 146019, "batch_hash": "0x966118112e39089f8bae223f8fd4ce31fe864f141d68a7582c3346044f9f37ab", "finalize_tx": "0xd28670a92773c7d8a0b8d8123cd8fddf77ae583f36bb7639905364c49388c1bf"} +{"index": 146020, "batch_hash": "0xe0f8f461e3746677e8a9e7e76f19b201843ee3b684b347e89cc4c786e90861db", "finalize_tx": "0x595d616d17189e60785b5bcad1b9054da8cfe1213a82fe1fb225a235ab5fff5a"} +{"index": 146021, "batch_hash": "0x22103c23ad1934f5853fa29ba6db1e2cedb30f16476fe217f5b9a2ac5043d7bd", "finalize_tx": "0xcc9592f6b40413124223ddf1e646d1eb320d8213fee8c83c261c2a06baa0a8c3"} +{"index": 146022, "batch_hash": "0xbf922479654117789a71fc1d8794057c16bf1c992707b3fbdfb854cee1105518", "finalize_tx": "0xdcd3f98a275a9ac2f2b791f4d91717d756fb53dd77e2c9ddcd58ec155ee08069"} +{"index": 148483, "batch_hash": "0x1db0cf9847d27eee095ae9f2780b52645aab0cd08e4714013e7b9f5d42705e60", "finalize_tx": "0xb6f8b1754fe65e1b8d6c276d7d5b5a741ba36eefd56b12cb1dc16a5f969d9557"} +{"index": 148484, "batch_hash": "0xdf012ec92163f3d2aeb27e8baa607eebe223ed8b40c71e8718e03deee7f6c225", "finalize_tx": "0x204423b5a82774fdaf11d396b51a4eb95013198e1b5c3d7726e2fc517774c662"} +{"index": 148485, "batch_hash": "0x774513b8a73988818e3f4366403beba913f81bfb005c69d3084eb99b22ff005b", "finalize_tx": "0x626e72827d64d20ccb2ad04ddc924f3da6a6995749b0d87986e833b74a2dfffb"} +{"index": 148486, "batch_hash": "0xdd2295d5c45d779c0cb04d4029b7a0f55ef6ac852d6ff257d0287665ddaa08a0", "finalize_tx": "0x1b734516b73e53fd3a24a4d9a24157d68e50bbf59e2dc19280271fb89642c6b3"} +{"index": 148487, "batch_hash": "0x6a7a98b41f0f77568730d03cd417a331ab0717e1426e7af401323918b874cf40", "finalize_tx": "0x54ce004db4c1f93d859724f3d801b4ea6f848f4d533bff965ebc6ed712174697"} +{"index": 148488, "batch_hash": "0x5bf6e408e6f93bd659090a3a0ea280b415b33668faf1a74b78b910314a31b272", "finalize_tx": "0x680f676fb898ba2469d7ab3cdbd60947d10835dea2801740e05cfde2cfb40fd5"} +{"index": 148489, "batch_hash": "0xaf9955d47bffab0d38b1b29d3197e5160bdd14b48a9294c62a16ae5402e8afa3", "finalize_tx": "0x1329848c49f1daaf29523353777e188cc36a3ec938904915bf6e75387e233c79"} +{"index": 148490, "batch_hash": "0x6a76306ed05877c82e0daeb5f4feb69331ed1bdbacee4d28f5ba2a702336b90e", "finalize_tx": "0x0861a7b610bf3c143ea51ebfd123123da6c9499dce21b5552336220926e9da13"} +{"index": 148491, "batch_hash": "0x85ba38731c849203ba1006ce43ce2dfd40293204beccb77051fbbac72c5cfa9a", "finalize_tx": "0x8e03fcc35432081db21c435dfb875dd4a9e6f6733dd36464439732af81bda2aa"} +{"index": 148492, "batch_hash": "0x7799b1147b19eb6aef7db2201bf47e6eb42c5c570d0e9f5f55457dc6ccb2343a", "finalize_tx": "0x5240b9ca4166e2199b223a11befef490ba4c0ce8148de7f0979219c034f70f61"} +{"index": 153583, "batch_hash": "0x22f811b07ab647899284eb37636a87b817254e3c9dce892c4ddacea7e8f9c6f5", "finalize_tx": "0xfa6c6d7d13e7c2f676881593fe14d9906b08a71df48e8665352c387fba6d962a"} +{"index": 153584, "batch_hash": "0x45de76e6b64bc0fb50a55c21afd5b9e394f6735fce49b22778dbd31330eba368", "finalize_tx": "0xd34b3dc667acc1ad607a57050e3195a83933b9f9c7c812e255c043d6d3d63ba9"} +{"index": 153585, "batch_hash": "0xa03a0ff2d1a728f437c95fd5309b06dc71d278915a16ed81c47d171869e6d823", "finalize_tx": "0x93760beb1a01e3e014c89beaa34a458e6bc8f0fb4652bc1d7296d007ee7844cb"} +{"index": 153586, "batch_hash": "0x0416e6ab688b4f4eb72db7d375100ffec3383f35e47821618d1d1a75f704f92d", "finalize_tx": "0x8f9af02c7bf1aef219a84dc71d64f89b92aec72e817794f22dd46894da7d9dfc"} +{"index": 153587, "batch_hash": "0x66123ae6159d4f5ce8abe922e2a8af5a6e4af40d159e582f12d447f7fb665834", "finalize_tx": "0x1844ba6fd275ec24b6d33f765e0a97e6596a13769bed9e29ca6b99ab4baef069"} +{"index": 153588, "batch_hash": "0x3f57fe5a5b8edaa60a1af544798fb50d748f819a386f891e0d9b65702f1089bc", "finalize_tx": "0x98db9ae9952716a11b328e2eb9b5f0bd50a0feb2200dbe4d3affe8c4c2d90896"} +{"index": 153589, "batch_hash": "0x2b83f575973a59ced9a0f1d6859e1eaa3df3c9c3effa1aefd8bcf286ab9eba61", "finalize_tx": "0xc615b532bef8c45519ada544bb51bfcb8011bf486ee705c443ece07d3e1bc9f1"} +{"index": 153590, "batch_hash": "0xd2ee93ee7bb7424ebb165830cbe350f9b43152419c5234df8a04a08fb4a461fe", "finalize_tx": "0x142b9f8275e05cdc6be7984a2e6ecf3680d246d6fae338d46d550d4b5cd7d135"} +{"index": 153591, "batch_hash": "0x2cc50dc777eac5f49efe6198c8c6cf5ee73c3fee78a48a1b69ea7dd8ecfbcf4a", "finalize_tx": "0x73f85d01d397356d7b551f871e668c34c476eaef351d61d03b2672297b48083e"} +{"index": 153592, "batch_hash": "0x5d91dfaed3c4a4162590908e9a45f58575a7253a2c3f5e87847fbddb004f77f8", "finalize_tx": "0x363baaad020c4c6b7a97fde2531edb91b6e472f4129fe68460d479ec5055a28d"} +{"index": 153993, "batch_hash": "0x8e61aebf4f033d7b3100134a31328b08507cdef838fca014680881bfacfa5c55", "finalize_tx": "0x01714c425be85ba89f09195d7ee3a66cf45b1fb4778ee175d6b85087e58a2110"} +{"index": 153994, "batch_hash": "0x4b73d237cae3128838b7bb161cf1019d22ddbecce3c670842ee242278c6c9d0d", "finalize_tx": "0x1d96821da38ffe1269a453106e3433adcf8f3bd92b730f6166770b6d2fa1621e"} +{"index": 153995, "batch_hash": "0xe5e51da11b2cea222904409ad176f380f42dae765e93f75dba4f5558eab493e0", "finalize_tx": "0xf55a4c4b1c83483296ce9ef23dbd67fc5533d411792081e43acf6c1ffe4cb6d0"} +{"index": 153996, "batch_hash": "0x2e00e106d995b49336354633e6b592c75e039300376d6fd401ea6f2a149f2021", "finalize_tx": "0x1b02d16439064ff4db0fcba0e1104b63417a372168505db7141e257f108f6d3e"} +{"index": 153997, "batch_hash": "0xad008b6717341f84bf5c7371463f96d5da9db30c2cad49628bbc62cdef19a12e", "finalize_tx": "0xadc9fbdf8bce8ee849615696a191930ab25c69dc4f42f84dceb91278fb549fc0"} +{"index": 153998, "batch_hash": "0xf27e85127bd616745b7043ffb3e31c8249cb90ceda7aa010ccdeb6df011bb014", "finalize_tx": "0xdd952c4253d3195397e83b92696e549c6e973119faf4715f9b573775023be085"} +{"index": 153999, "batch_hash": "0x3916800655bce31b28fd04ba1a9021bad0566669bf652c8f5c3e35fce20dfc41", "finalize_tx": "0x2d7588ac98f040a26bd0bf0fa7224ff2f6ae08347d5fd885c079b09ae73dcafe"} +{"index": 154000, "batch_hash": "0x019aec56ce20179211f06c7b303bb0caa4fcfe973705000d40ee3a3a7afb2113", "finalize_tx": "0xd5b12487e139c48f7b3b7be75f15e77f4b8473734ef17fe7bfd15b99c915a3c2"} +{"index": 154001, "batch_hash": "0x09c403da97a196211f64fbdb9a93042d4d60f638172bab1cef31f620cb81dd7b", "finalize_tx": "0x6dc8f3b0fbb76590d7056143ce4451767ab9880fc332b0eead4e370fced3346d"} +{"index": 154002, "batch_hash": "0xe1f292cb50b34a6f5030e8d3fbe65f9f05ea182afa1215d2a23dcd1a672f524e", "finalize_tx": "0x26a64832e27bd1e8330db96bde96e93a627ebcbaab0debed3ab78d5eaf689521"} +{"index": 155963, "batch_hash": "0x6fa0a57c2ca668ae8b6429de9b885569809019122873544f3d6213a1afcb37da", "finalize_tx": "0x205004dda1e31ab50017e9dc96af731c9157c6987b9d4ea3af4bb07f17be94ee"} +{"index": 155964, "batch_hash": "0xfc9a2557652f137a2b3d21b3fff30b97889f3646fbac167b5b76910c0c28af58", "finalize_tx": "0xb66ad598439721950c86f5cc2b77e5c7a1c32fcf2894cf23169591710d007525"} +{"index": 155965, "batch_hash": "0x3e6a4427062ee3b3428afdd218e4d163ec14733285a7361cecd0b69101b051a0", "finalize_tx": "0x4a91a50902b0c3c7b1cb82384258fadba4ab2e378a8693acf49b91525d4710a0"} +{"index": 155966, "batch_hash": "0xe28eb67e783083d775229794f2c8ee800638e56827b8f9457fe40a80bb5952c2", "finalize_tx": "0xac7275cd96509827db08c24016b02f8d4a4daf3f9874cc507c4445b06501c356"} +{"index": 155967, "batch_hash": "0x8910b246ded56979146e30a693b7782193edcf4d2737d7e6d5de7d0823cc5fcc", "finalize_tx": "0x8709813a3cd2d640978d2b64b102133daf6334b2ae4f47ae8eae745a49b5300a"} +{"index": 155968, "batch_hash": "0x17803150b8811aacc3ae6a439da8e7d7a44ccd0d2a430699357f17c4134f652a", "finalize_tx": "0x16def2784fde532b351b48b011fb3c5dca7d7c753b0654ae214dc3cab9cd4440"} +{"index": 155969, "batch_hash": "0x798a815fc313a9daae6eedcf788748bbc5346f5c747d1691485f356d9848638b", "finalize_tx": "0xb2a016bcb4f63208b9df68d2257e0adecb6dba6c0fc9244741fa89682ba61433"} +{"index": 155970, "batch_hash": "0x0840aa993e3352ec8e1f8f6299243b0a72026d1614bf82acbb2adc6fcdd81759", "finalize_tx": "0x48707c2b27e36b94c332e0c4604f7dfaf19870fe4e3efed4ec53aaa1e03ab453"} +{"index": 155971, "batch_hash": "0x52ead2361d6ee87ac0c26cd0128bedef23b59b2222654c7d96bc2393bbba210f", "finalize_tx": "0x0d4aae84228ea3d6bc22659b5a5880dedf021d1fd7c89f5845fcbdf6e86bbe6f"} +{"index": 155972, "batch_hash": "0xcbe02b593e312d8dd15d02d84ec3f172ad500d74b8bbca969f457d499769e3b1", "finalize_tx": "0xe4fa772e2eaea7028dabd3a1c118cfbd77084e8c16dd20008191c05e45b8b0ed"} +{"index": 156513, "batch_hash": "0x068b8ee8e7df6483113e4bbceb1a21a4e2732e194cb7e7bb26e82740957f3961", "finalize_tx": "0xea1314cc656ffb6ddb0b9ec63be58e86694ce9f2b6c06e4f9b92b2c114e36cf2"} +{"index": 156514, "batch_hash": "0x6024d7a591a19c4494213dd16b64e139ed62c6e86e8337878d27769f8ecf1a8b", "finalize_tx": "0x0e41622779db21ef1f62ba53e42c182bc4e646be4b668bd83a2fb69e967faaaf"} +{"index": 156515, "batch_hash": "0x674a8f450dd9409854f2cf066d2ebefe6931965e36ef2b75ed67e1c7867d4a99", "finalize_tx": "0x18b3ca59f14f6a81bfb130d283620a926331c688d71fff5cae0d0120b21baf66"} +{"index": 156516, "batch_hash": "0xf3179eb64a3fa9454093b6f02bee2358725683de9be7b1c684cbe1e7f66fdde6", "finalize_tx": "0x8f106d441d10e1118a5cdc21b2b3489a9eccbb356a11c83790b53181e780bb9c"} +{"index": 156517, "batch_hash": "0xe2b6edfb4840d3f89a826ab5b2babe8946e4013c8b4cc94ded65b7b48ae48710", "finalize_tx": "0x2802bb1ece88449a256ad1e67f2a84e696b5d04cf33a37938682b8d392ba8604"} +{"index": 156518, "batch_hash": "0x68346a8edfe2aa0a459f1b3a208c9e933d88a7d10fa17cde302d177049934d86", "finalize_tx": "0x1900d2466f4b60214b4f92931c28335fd36a286f82f839ee9d9432ddc4f2eb02"} +{"index": 156519, "batch_hash": "0xad0ffed678d4c2635846491164841352a422e46cb5708ec75fc48d90af5adc8d", "finalize_tx": "0xdcbbbdb27ed6db30b56a014bca9067f825232e8ef7803c22127a53728d174af7"} +{"index": 156520, "batch_hash": "0xb062d48f34ae80bf644254e0225851f29d6ea707bddca3d420ea77bf20276fb5", "finalize_tx": "0x1813b4dde7b1c15bae1c94fb7c2fc08e7e475c4beac4da759d1c889495ae346d"} +{"index": 156521, "batch_hash": "0x0b0bade5fb37f8375b433bc253241c27d7a3f4be77a0de9a91ca06223914c14e", "finalize_tx": "0xb8fe8de316b7c18e0870e85e290d4d3f8a2706601596c87058ab80fd1873f690"} +{"index": 156522, "batch_hash": "0xa16bc536bc81b6b304ce73a86c03f90ddf7575c99dd6c32cce1578bceb6145a3", "finalize_tx": "0x1779034520fbabfbd31c0613bd23fb4e8d5e7434caf18346aed3fab9cb3deb5c"} +{"index": 160363, "batch_hash": "0x71cebfe68192debf9a4001ee47de36c7b029667a202410d113cc2b598f9e4484", "finalize_tx": "0xfb809eff8701961e003d076d3fe5fa4fac97b18db1b467ce93abe5c5f610d5e6"} +{"index": 160364, "batch_hash": "0x18399a5a724e1806fd2c3f8ad0507076dcd0395a53f49dba6d7726b81a8c74ce", "finalize_tx": "0x5086342cd41bc76063382ca658d6884a20104eae2ac398b475340d3d0dc93a67"} +{"index": 160365, "batch_hash": "0x9aa71f4cd6fabb7b997e2e4ee921ccf81a924ecc5505dc5770530a8b4e6c5f5e", "finalize_tx": "0x500edc5b69f9d342964310c42f6875822dce9f3e9a37f9d0af96634fc85c4623"} +{"index": 160366, "batch_hash": "0x337f5bc921447db8a8b76df49b169f6ce2854e887d9fbc815709e13d5187afa8", "finalize_tx": "0x40a0601fcfbad376f16aeeab7831bd567b6315f82a685c2f13f66e9083de36f1"} +{"index": 160367, "batch_hash": "0xf839c60910b200e4a69e33d27957424a784404bad423f78b84a7571c94ba2e0c", "finalize_tx": "0xe604e13a126668af756090e3891d0fdcd102421c9996d3e339e2903353015c15"} +{"index": 160369, "batch_hash": "0x03bb46e849a1da9290ea84ab118cf020698b7f58d701a17c2c6f9bbe3e5ca86d", "finalize_tx": "0x3b5e086640eb897a895d412b598f4f6ed07a1b40e7c6d640c23d65e4c419aa83"} +{"index": 160370, "batch_hash": "0xea424b1522477fa99ecac4081e4911d6fe50a790f1596b24ae55a26f9b19a59a", "finalize_tx": "0xd0c5d18a1fb6268b4ab8318ca93282ee35ec5e2b8d0b8144dc0a9e361f2805e8"} +{"index": 160371, "batch_hash": "0xb5f21dc5cf91e2c4866a7c43085ff70b6bc79665eb2a89bd29c31f7f2ad5682e", "finalize_tx": "0x621e2d07c7a61e7dabd58f5b10beb1883b801735f2187787b5b397251b87e994"} +{"index": 160372, "batch_hash": "0xbd78180018d633fa9bd0b90302878c2ab4f17c0a8382acee4a09c2000d1910d9", "finalize_tx": "0x7ce02cac910b8e9afbf118b3c18cb6701371072da38cade6e507e5a6f76b9563"} +{"index": 170623, "batch_hash": "0x48adfcd91bb16bfac65a94aa3dab32c5b9124d60a8563f9e4b8d906b4a1860d1", "finalize_tx": "0x7cc0e22cef5a6b8d5196e30af79066f54cbab234b8ef95733287b2bde8f1236f"} +{"index": 170624, "batch_hash": "0x01f71fc83b2c935b72537a70654c70bd34b7e2a17662e5bc0a5221e6aa2369bc", "finalize_tx": "0xd212eb3251918142ff1593eba92ebdcf789d8107b1c92a44b62d5786a880e768"} +{"index": 170625, "batch_hash": "0xf7a90fac29c216ab5016cf19613168a8a0030df9bfc50f01682761338535201d", "finalize_tx": "0x7046b144c45e6a500f9dd57dfb847c338aaa6bc40f52b1b35111a832875acc43"} +{"index": 170626, "batch_hash": "0xa86c7d1cd703fba0e3a943aa696110b3733b47749277a4d230b750323f5e48d1", "finalize_tx": "0xf0bd22390a495a41db7e29231a68c667105a9d57ca068f93ade3986023f87357"} +{"index": 170627, "batch_hash": "0xec01174a5fc4e5bfc374060fedc39b0353321a87a876a781a4c984b4781cb74a", "finalize_tx": "0x0597d8f52169307336e75adb7bda83a5dbcbfdd8cf863cec5330b6a5167c4ed4"} +{"index": 170628, "batch_hash": "0x3dafb6dacdfb9f53ac58d28e9827e7b55e2724a15ece14928cef826bdb5f4fc5", "finalize_tx": "0xb898f7a072ddbffe1846886df0ff8025dae79f9afa48d75ef9480e4c2e6ab4f5"} +{"index": 170629, "batch_hash": "0xe0b5c6ad86a8933b15800eea2d64e5fca181fe66fa7a1355a7bbac5cf879baa6", "finalize_tx": "0x6b4dafd3b3226c01f929653e901320b036663f897423fad573aec4aafed01497"} +{"index": 170630, "batch_hash": "0xba49b31548d9071440c7e7d98e478f2e78494e25c70382777160d921b917d2e2", "finalize_tx": "0xad8233788ab4bd4376674907fda4b758fb3064b4b8f470fc4c95f2b6d1c30622"} +{"index": 170631, "batch_hash": "0xcf90b67d8c5cecf558a60263c9faf874ede2660de2f13a8153a39bb1e017dae0", "finalize_tx": "0x85b1ba93dddd4cc5fa5f63fb09493a95187bf51883e73fcb53223d5a9544f25f"} +{"index": 170632, "batch_hash": "0x67868a0eed6b4f620da34e9824b18b8aa6d9f79790145ecff8517f35be9a7c55", "finalize_tx": "0xe51cb253b962c7f4e8088884141adb03a3634a9193e25f982f5bad69da5a7e52"} +{"index": 176353, "batch_hash": "0x6ee6132d9d9e2839598639f0a2fbe2078cb0b2a37efad2fd69721ed6fabecedd", "finalize_tx": "0xee289fe445a7c1689284f54a262f17d68537d1f2cdd15dcaf9dcbd9b2b1319a8"} +{"index": 176354, "batch_hash": "0x40a311bb1cd86c2b908cefa2bae7da95fee4c8886b5368090c6763df0657a555", "finalize_tx": "0x806bd9a0d20a9c11eba66eaf1766d47fa0c60df83f03276d2917d2752e37c34b"} +{"index": 176355, "batch_hash": "0x7de908b72a22aafa60583e1a1613efc9532aac85d9b23748df6470c587f2cb5d", "finalize_tx": "0xb76446f7f1be1f79c83c46254431099d094b498b2ad6404d69006023dd720816"} +{"index": 176356, "batch_hash": "0xddaf3f7d0074f6f924785d7c451eb83352f468e506b18b40998cf359475ec7ba", "finalize_tx": "0x7cd6e67180145bb73eba174e149afa981fde2d3f53d9a1639ab4bd38aca07fa6"} +{"index": 176357, "batch_hash": "0xaca2377dcf2b2d67c93f11072493165f6e4009f6b1f9d92cd70e9773d210a4b2", "finalize_tx": "0x3e473c08cb0b21c92db080ab1cea2d956d3ade77fa206f19a2beb7169c7ae0c2"} +{"index": 176358, "batch_hash": "0x143a5d774fa4151d87ab80a552025f886bd92d32b0109d4f2c1518e77b900cba", "finalize_tx": "0xa61f65089cfc0fce42d0976b72822a4f706d09e5bf8b0af0cba7096d323cd607"} +{"index": 176359, "batch_hash": "0xec360bf91adc16de820cb868d511b9747fe9d43416ffba0f97c21086f9e0bd7b", "finalize_tx": "0xdf794443e8683e20bec4976e7182b388c4458def9d36ed23d9e710088d7062cc"} +{"index": 176360, "batch_hash": "0x27490a1a078bf3c101fa5f87e1bde9dd70c7d1b44ff2ec7d0a9373c3952c9488", "finalize_tx": "0xdd42ac9bdc4fade0ce8afe59001a1d4467743d2a73b8a184a196a076f6f70b64"} +{"index": 176361, "batch_hash": "0x932876f3e82ba17ce2768f95b1636217736465109c0fb938d960ef2afa426f8e", "finalize_tx": "0x652cf32de115d3ff258a941543dfe708e1664bae8d9ec7e743a3beda08cb6dd9"} +{"index": 176362, "batch_hash": "0x21bddc89a6fced07fee9b5e6bbbcc90507bad6ce21e247694d4b21323fea8241", "finalize_tx": "0xfd2b94b197c747071b14a57d9a47d595a68284c89e52e7a04952a937d020e2c7"} +{"index": 182903, "batch_hash": "0xab7fbac4fc9d428589aa3ddef5ccd178a07efe193b4f97324c7f486f41f678ad", "finalize_tx": "0xcaa4a6502c0e1827fe7b9c0b2f275f070940be6bd14791ea720005b454bb7d36"} +{"index": 182904, "batch_hash": "0xcc50698a906629664b46a1abefb1b702dff6f326f3e5bf21fdfb70cb52bd0bc4", "finalize_tx": "0xeb11d07f4d719e15034d57d3719a29542a622704bd3c749ab3f4f7ee9cf86385"} +{"index": 182905, "batch_hash": "0xa0cf153c4361f62d508dc5fa20b97c1040a62413929f22cea2c0a376ed1c158f", "finalize_tx": "0xa2327626e8686eb68d73810ddaa824d4031ac01b35fb6c68c0d5439b5593a134"} +{"index": 182906, "batch_hash": "0xe67fa1137f8c66f1494d13c7442969b30fbae93a961d24d66940d99b81d0379e", "finalize_tx": "0x50168763e10f7d8afe566fdf4b0588353c4cc0fc31350e9129bb91df045c1c31"} +{"index": 182907, "batch_hash": "0xdc11e94aae33921518cd3e516dd9a230d0ee98ec86d24accee78b5813fcd7561", "finalize_tx": "0x7e79a05f1a45cc55b71cbc3a311763398b30366458500ce6cccf128cc54486b3"} +{"index": 182908, "batch_hash": "0xdc15472aea7ed23399fae47af6f49cb18871e98139b325631a4303552cd8d298", "finalize_tx": "0xe8eeec63fcb062a0d04aa70e8e0376c0339a1164aedf10794bc95f634c613e26"} +{"index": 182909, "batch_hash": "0xcff17215612fd7a77f3064ee2ebe41c1729e343dc41c7a96351f93a79df20a13", "finalize_tx": "0x9c9adf6eec11cbddaf97249deee07a7fc4725106a3ec5ea39377293f5d1a4269"} +{"index": 182910, "batch_hash": "0x5a46dc4dcf6b83a0fdb5f63f5a3ab3bf10e3d20bc2d63d294c9f8b6779aa243d", "finalize_tx": "0xa209e590f6ef8b077d192941cd4c64306f0099aa096cb9a4624a6a1a48208173"} +{"index": 182911, "batch_hash": "0x0cedbab7864e031c1729948ef094d47888098e9c974418b628e00801d26618e3", "finalize_tx": "0xe36cc3ae7da48e66a3ab3d0019bf65a87197dccf4e2ba80435abab3a87402941"} +{"index": 182912, "batch_hash": "0x3677e2b02129ca0a0bb60fbf40d21d9028bcc43a5de380cddf07253b7c95e8ca", "finalize_tx": "0x9eda9c5a407b5705efa7a7cab0aa4ba26ba254ee1bc04d8dc2fd7b6357aafb28"} +{"index": 186603, "batch_hash": "0x36796cd5a71fafb1ef7c64514927db547684e0eb21594763006de4be5d656744", "finalize_tx": "0x73c28a0850486bd7a7f8c926d59b5b9ae4c85f4692746986c66dded0966b14c4"} +{"index": 186604, "batch_hash": "0x837539353f02de8cd5436d5ca6fc8e8f44d7c278cfdb0f4ab173f6d64232dda8", "finalize_tx": "0xaeb76890d3cb6206026fd43df0919623859b0734560c8aba45b8928dcc6067e5"} +{"index": 186605, "batch_hash": "0x56757c31b45684eed0b23600b9db9c29c0b7e6b1349a8ff5b9c3c09a78e82c70", "finalize_tx": "0xc50318cfa7433e24802ec21df8be22e2a24270598d9f7fc43be95014692b6b2e"} +{"index": 186606, "batch_hash": "0x27c61903b39992ad167573a743184c1cf2d1c212e76d6c6fcde4f09cae064a1a", "finalize_tx": "0x7285ab36fea821b68c0b4a2db5eea7a66fc9c14aabe50c5df817a32aa11d5715"} +{"index": 186607, "batch_hash": "0x99a5acb8e5bfdc9550a965318b236c904cb5f5e9812ade00d74f2c1203efd60b", "finalize_tx": "0xef72e9b5e72799360f86b357afccc9f79d444b21b626ff8ef6cae9395597d605"} +{"index": 186608, "batch_hash": "0x1b2cb4b2f924af0323d53aa9556d76463b1c1a776c6e0b89f97ae4553815cbee", "finalize_tx": "0x7f3ee6ffd335acbe0b48c712e13cf58b2e33ed44b48a7c73e421a423eb64b8e4"} +{"index": 186609, "batch_hash": "0xd3efc9e90e4f846ed51cc2c785a42a17c75800a57de8114efe1f13f78b4577c0", "finalize_tx": "0xb20d5b37ed479c73937836bb8141dd98fc14c6935c7022e5430bcce4f1574de1"} +{"index": 186610, "batch_hash": "0x280fb85d43e52762dac5149193a20bb314c0c13f5c65435c73883f2beecfb273", "finalize_tx": "0xdcb7c06bf91b21e3925576fedf1b0f4f547164cebb203a227c6568296e219a85"} +{"index": 186611, "batch_hash": "0x43f79f6c39cc3c21806f2a12d87566144bfb51804f5dd44ba375d04f2342b37b", "finalize_tx": "0x73bdf70169b21c1b44a983086b39ba9127a9af13069a8b785f48b5f344a69adf"} +{"index": 186612, "batch_hash": "0x7a292652df67bd16e6b3e307390d810ab46da113ba5ba2b979be352e99195ee3", "finalize_tx": "0xfb7349b1e8b0e18ccfad63f444e07a270af2164901edb398f61cf995b0c1fa37"} +{"index": 188913, "batch_hash": "0x129a7b1025eab8e65e545ff3374837dfdaa0ff58cb08d9fcb5d71f095af3eb1d", "finalize_tx": "0xc0c1af8f4b442fff598c8356f3e4c742ac42944601adb40b3e9131a24f9c6de7"} +{"index": 188914, "batch_hash": "0x7dab8c95067283354a290e122ead6960ce9484f36bf4d62fc17c30d89a432b8b", "finalize_tx": "0xb3d37308595f74290f64ac5a0f2b4fd9ba16b3e763dd47dc946816be3a55f428"} +{"index": 188915, "batch_hash": "0x29d23920edfe26ecc184de6296c68c4c31ce2c3a15a35c431944512697914144", "finalize_tx": "0x64e3e476fc999bb576160839550df00eeed3864a2bceeeadaf66eb94b6851ede"} +{"index": 188916, "batch_hash": "0xf434f1b8b8c7dc9db2f6d5d7b96ba0f9d6b5f020c3ae904d4b45edfefeb49f85", "finalize_tx": "0x64a33c19b98199c49d547d467eaa8e7c029aeab80799333aa6495963468fa015"} +{"index": 188917, "batch_hash": "0x83dc461f42c93668d45946370fa8ec002fb6985b5111de0fcb52f871b5e55297", "finalize_tx": "0x6a57e8d3c4c8dbf9c53c4299a8a467ada9b83ee52449ed1a8b1704daa2546e52"} +{"index": 188918, "batch_hash": "0x7431a37930cf2a5354dce285d0993af5184f26803183986090076ab1e1087719", "finalize_tx": "0x9e1c0ad5ddd97a69fb080cb357b1902d729ee41acc5f9f60ceb3693da3d350cd"} +{"index": 188919, "batch_hash": "0x06f6fa98aed559fad0d0ece11be33f6797f7bc2589305384091c4135a4e259b8", "finalize_tx": "0xd2d4529fde4091da491473c66585a64d99f5ff51eebb66d34ccd4bb71d2ed1d0"} +{"index": 188920, "batch_hash": "0x85506c35deb6536a1e958770b55973efee4527f5bce44869896e9ba067f50c54", "finalize_tx": "0xdaed170cb33d52d5eae9b574d91582e47cf3139b3f1938df16b0f1457a36751d"} +{"index": 188921, "batch_hash": "0x98c3b244b41bde4e4406b91e611ae7a774158382807ab03e2420499c411802c2", "finalize_tx": "0x564dbe2fcf85de03c9e38d4a568e84dc0de80ff9abaf42e7141cb26f366be2cf"} +{"index": 188922, "batch_hash": "0xc26b3687d54e66a0966c1f8d8e4b2343cda4b9af64f6d3a8881d96b26858a775", "finalize_tx": "0x383e28fe36f983faa6125716ff62e5f1ab6228e851bca8d1e296cd6e1b7c66d6"} +{"index": 190413, "batch_hash": "0xa336b3ad429a841a43600376433731bcaaa589c3bf3842d5deb38e4a08ad9310", "finalize_tx": "0xa49e6a1d34239e07253ccbefa7d04c677f485cffcd7455eeb9e2a69cb570d138"} +{"index": 190414, "batch_hash": "0xedd87962aa7a553c9ba4f957da2bc3f7dd48b6a8fbb458d80eb0d0d130b469cc", "finalize_tx": "0xc987e5325f276cce8b314080cb6bc597d5da71f16920c4e9612a1d928f184517"} +{"index": 190415, "batch_hash": "0x78075f31850ce79191792b824be93efcb8b34da0db39e17b59d50773e8784873", "finalize_tx": "0xd7bc2db8920a085c19eefb6ced0dd54cae65d9824b556024128f331dc0b443ea"} +{"index": 190416, "batch_hash": "0x3d5e845ba9fd11175a07cea8de7bcbb724cedf282991f8a880d65b66fdfde2ec", "finalize_tx": "0xae39077ca0ec8883bb7162f9becdfb86e75207a77b707e6a8978775f9c1e0c95"} +{"index": 190417, "batch_hash": "0x46c0f1747d97b98e01f10942fe329d976f6e1d5528e5b61afe5c8251a8e163e5", "finalize_tx": "0xfe01a5e53afce39fe594ed20fa05c7e2b09f0778aa21b4909071b3ca7a927161"} +{"index": 190418, "batch_hash": "0x4a632ac1ab5858b537b16e91db79539f3f9a9a4819381f02c328ba11c40faeff", "finalize_tx": "0x597de6904cd0be2faa48e0d91645dee4fc850ab7e1f1b970c540d78c6a206a4f"} +{"index": 190419, "batch_hash": "0x1937f9f1adc09d8bcdf2654cfcfd076eedc8dc6fc7a9687b4e6b8bc166e1608c", "finalize_tx": "0x245fc7f5ddffe7cb3f07cf17a89fb95901dc608e8f056680c79cc70f5bda53bb"} +{"index": 190420, "batch_hash": "0x065a11cdfe3e13efc10bfe772e7e9956e0505b6b61cee69ec442ec4344b0f6f2", "finalize_tx": "0x5f005d8284eba8d8d54b97963e0849ca155df4c68d4b90100e0df2a6bf62ecc4"} +{"index": 190421, "batch_hash": "0x447293bdf0a78eb788df77fb34235fb171e5d6192b52c0fb01933f75cbbbeb49", "finalize_tx": "0xca3da513b9d8da686d4b8b5165ed837146ef2e98f2a0ec4414ebc1acc217fc6e"} +{"index": 190422, "batch_hash": "0x9a3da3cb17ccfbaf6def8e0f542c689b924412673f01415b2e5b70948251702d", "finalize_tx": "0xdd413d5ecda7a842c77bb9d79305f3bef3401f3c1465e4760077ed288a91b5b9"} +{"index": 191883, "batch_hash": "0x010cb621fb735bbb9be6b47c35e611131cd71bea7de0b84731dacf093308a7fa", "finalize_tx": "0x678483c9de5052634e98122ad0bc1d97ff7c891fe3bd9feeb7b204f26923192d"} +{"index": 191884, "batch_hash": "0xfbd1e1a0ef2843e1b35e46e34c831f280177f959e4d63477a2e2e5aec95bbf74", "finalize_tx": "0x538e7bb623c12d45dba61c6853cb213df56e54dc1ac554cbb3ee21e125e34516"} +{"index": 191885, "batch_hash": "0xaf55747c4f271751750b0491a3b7c4132ea1088a27332c907140eadd7ad5aa30", "finalize_tx": "0xa2de1dfd348ce99226f656826f377b2f100d013676cb12beed2ef6621d3d4760"} +{"index": 191886, "batch_hash": "0xde8cdd7397a65078f0b4b93a2914b738e860e5cbd4eefc25495b5856ead2a7d6", "finalize_tx": "0xb65ced97be117a3fa6a2fa0dc5211cd9c1dc9560ebdf42fa2380fd57bd40d4af"} +{"index": 191887, "batch_hash": "0x54cc8375fc07dcd4a2c8c1d2ae82467e1b3ee662102fe7fb7df1bdc1d4c7d159", "finalize_tx": "0xd0b60464855cab7be9f7a43554cbd52c3034a55a63f70d1a1c6da35cfcce97d3"} +{"index": 191888, "batch_hash": "0xe50633398b88e6d4e54c7d41e35613d2ef949fa7e65179c36b71d4cadede7370", "finalize_tx": "0x438ef50a43105820a097b41d992c6053b3a97e66d49e11b5c81f2ac8bced70c0"} +{"index": 191889, "batch_hash": "0xa090f1d07fca61328d317056e43972e0589ab63be16c85303cae302b87fc5cd4", "finalize_tx": "0x306d984b397a2f3d0dbe1b4d5f033799561975c91d5bed66aca8c08f2e0b4fc6"} +{"index": 191890, "batch_hash": "0xe2f3388ffe5a6021b84b1fe45f26131468fd5ba80c7a6941d02ce88a9f479101", "finalize_tx": "0x59882496f917d2fa83e78c67d37a931e7eaa6978c0c8b72eb238441eccf74835"} +{"index": 191891, "batch_hash": "0x9642110f9e1445a1b5fa05d04a5c8a01709673831edbc9305d7f3b52445e46d7", "finalize_tx": "0xf03a1688e648dcd8e06e8634e7eb588772b455472f440669911b808178b7770d"} +{"index": 191892, "batch_hash": "0x7f2dea64efa45867fd5b1d9df5fcf91dcdc8c571be4410aaa287c2faf1c2d4e1", "finalize_tx": "0x7ba4add71195f76b7fe037ad80db34dea133eb98dd4e97f5ae868d6929f580a3"} +{"index": 193533, "batch_hash": "0x5bb9ba73c13d46140c89f65a85febd1be3f6f9512c36e45de4a58233b62b39f4", "finalize_tx": "0xceed81ae173f0f2ce52d3fb863b5872aac4172fe7403efb0684cf7459fb07590"} +{"index": 193534, "batch_hash": "0xb8d5a140a3c15cd7a858cf022b4d03c0ed39bfbe32709407076d6345b66a3a35", "finalize_tx": "0x5a4db7335f154f9619396fe727b7a76950fc43a1a3e8e3d613e490941685a3ef"} +{"index": 193535, "batch_hash": "0x88202a6991233a4926bfadd5c9f11cb0467e513513e2c108ea28ee26dc2eaa9f", "finalize_tx": "0xde10c0cf8a514480c5bedf28fefdda0d9813b185a68e7d5d0266c2a9bcf1f950"} +{"index": 193536, "batch_hash": "0xbf8ee1277d898de19494ffe0ab8a606318b4e01eb55d7ebe951068bd2b778a1a", "finalize_tx": "0xf55ee04e4ac23f864b5351ec12af405fc060f8c3e99acc1160af7a8612e5e2ab"} +{"index": 193537, "batch_hash": "0x60060e837751106b6be346aac30e46e41cdc294c3972cc7346ebb77794207e84", "finalize_tx": "0x351d43c45b2715700d629ce49a6d143a3397caae7776ffe3d36e409facb97f2f"} +{"index": 193538, "batch_hash": "0xbe5e96a5c978248b9e135604265aaf0190558375a0a93b2984d2231d21cb7237", "finalize_tx": "0x20947a4d3a2d0221b8b28875a4f3134b368046b98ceadd2ce80d678ffe5c2a00"} +{"index": 193539, "batch_hash": "0x65f30090cc9244a270f41e6d779bc5ed8eb26d8620af756608f1491c61bd4913", "finalize_tx": "0xdfa77b67e6a264efc251af734228a9b2cc40526171be93ceddb3ef17c9446603"} +{"index": 193540, "batch_hash": "0xb151ea71c1211732f2db355fb815633b16025c9f09718210d9621158267a5fc9", "finalize_tx": "0x11ebe9cb710e888315c4fa8b76eb38530e20d4e1cbd1d27c14bcef7d9ebf165c"} +{"index": 193541, "batch_hash": "0x54da01fefe1d190f5d064f5ed2f53583bbb5c4e5d922443731bd9c8a7262505a", "finalize_tx": "0xd1b8f1ba7b699001a3c5df7cdbf9a9244d11341dce72b7d8e8679c6da7c9a447"} +{"index": 193542, "batch_hash": "0xfaf8eb92b42a043f951e89331f9974bf101c2802c4f3fc72b51ccba94e5e62fe", "finalize_tx": "0x9c0fa11065335d98da0aeb894415575ca913ee826979dedad383a65192332526"} +{"index": 194753, "batch_hash": "0xd8df6187d66380a0a17d4c6b051288d7b322cb5228bfad6bba25c4776bf0868e", "finalize_tx": "0x024bfba012dfb0fd1cf272b93fbcbab7f56a42f18f8104d9a8b5d8d69c336d09"} +{"index": 194754, "batch_hash": "0xccaa2f9161bcbdd71db8fdeca9e0373e5f60de46a8197bbbce2c4c510f20186e", "finalize_tx": "0x6c3488a25ffa1697378aec290b8d5182fee34b5dd8e4c2d7895f4857a611d667"} +{"index": 194755, "batch_hash": "0x411f0aebc6770d7856521028e711796e8a71c93fd97ccd6ae14a8ec9ed515092", "finalize_tx": "0xede95f6bc7b2a49783d7ea5304ddebbc0986dc1ddfca2fc544181dce8d9900da"} +{"index": 194756, "batch_hash": "0xf64530337950f254e71c9227b2f47b0e54325075ac4cf35531c53ff9e41a887a", "finalize_tx": "0x6aeadda8a8e2e03c2a445708328740daede1e9b3b09fdaec6d639d3696d5d4c8"} +{"index": 194757, "batch_hash": "0x01c60daf379ad63bec10fd35a8af3b2f539ebe6669d9e4ad50b5c1fb76771a90", "finalize_tx": "0x20b66af31f6f7899ea327fb5f80a41c5fc8384f565a0434564d8ba0ea0f23c91"} +{"index": 194758, "batch_hash": "0x28331756007a8fc22a6c10cbfa09b159ddf80c3b14a2679b879db980afb49c7e", "finalize_tx": "0xf6ee3de0651a591b33028b145c30ceeed9e7f09b889663d7396405fd892eafa5"} +{"index": 194759, "batch_hash": "0x278007e8f0c4afcec00b10e6315c940240a6506eefbf03971dab21878fa017ec", "finalize_tx": "0x25ae0de86fc7c922740aba4da1a7e1e3e00ac2106ca9d1cd572bbc2b2248e5da"} +{"index": 194760, "batch_hash": "0xb54a7ce97d072a68d77bf15563bb87594aec0a620786a0585a05af68c666603a", "finalize_tx": "0xf9267befb93aa9ed260ef1b625c9b02148b4aa19721db0272cb0c2ad5f732e58"} +{"index": 194761, "batch_hash": "0x48a69f0b29dfc5f629cb406b69f536d6134bedcb321fb4d124fe807de6d7dc60", "finalize_tx": "0x0bbf60f047251f0372db5ca4412ec391213504889a41303fc4b09fb29077cdf2"} +{"index": 194762, "batch_hash": "0x7d26ac322aa90422ead5f2ed03cb8884524900e4ceb052a8017a310b8227e9d0", "finalize_tx": "0x93a6f85f4b9b8a49a50f6ae4e5d38e6f240a05f3c98918ca48796399ae1272c1"} +{"index": 195213, "batch_hash": "0xeceba4dbf16db1f7d50bf6642e438e00aa8a4a8a4bbeff6a129911bd9d788a62", "finalize_tx": "0x0695957de8e0f6841e94ef039e7858346a88691499612bffb9ce4688af5c027a"} +{"index": 195214, "batch_hash": "0x97952a19f553e3ac48b3ce0c02e34ea947f3616c474bf1efe4446cc29d4ef8e3", "finalize_tx": "0x87c5264e4c18c587bf3df8187905c102a7a0a24059ae1f7b412fe389dfddc442"} +{"index": 195215, "batch_hash": "0x26b820523adc066c8c15510708b9c667d92523b18d9b2480b4676aade8d7731f", "finalize_tx": "0xc14760bf4e8f1e94c14b50688f71b01fa1e3bbd969fc5ee3c92b2805fc2f340d"} +{"index": 195216, "batch_hash": "0x05bf12f6dfb8a91281750b7909ef5565c75ad83bed9b9665d3470643814733d6", "finalize_tx": "0x448e8bceebdc220d26fe46e56ecb95db8d35435170b87c94a1f4bf32d97acb21"} +{"index": 195217, "batch_hash": "0x687a26acdd9e0a67e366459f65721147d18867320643a87bbfb990eaa231d987", "finalize_tx": "0xeee7c0dd4a3fd785baeb06efafb9cb57fea1580b68447f54748d2a5ccb1cb102"} +{"index": 195218, "batch_hash": "0x6b227ff68ea69eb0a4a5add53fbf8bbdb53f6cf95f92eaa6e63b40c5ff1276f3", "finalize_tx": "0x91eeece77d2d51f4ee8c5603fa95aa53d004777356e4384de2591a761d2b0c90"} +{"index": 195219, "batch_hash": "0x2e4486472a992fe2489131dfcd38ae1280d3a3ff581bb668e076b755097acb91", "finalize_tx": "0xd62c480234a0a8ae04c289fe09cdbc5bd2d0e36a10de42878467239ce63de85d"} +{"index": 195220, "batch_hash": "0x7215dcbaa92ddc8c16dc09cf658997dabfe759b176330934f612e58479129d53", "finalize_tx": "0xd4702bac1e74a39ae65fcb6dee36665e2aa299d2df677c195aea83748ab88749"} +{"index": 195221, "batch_hash": "0x0c9acf7b48b44a3a2c08ab41416e45d2c5308076b58233f2345c0ef3f939b102", "finalize_tx": "0x8f2cab335c800e5d8961cef89b05d516d14f20237b9ce08c9e09401b989dae53"} +{"index": 195222, "batch_hash": "0x2458fc70070050a292b0e35a2107b5041acc85b0fa77b2a589d780bdd03fd085", "finalize_tx": "0xa06f03d87b30b12f8eeade9efc1b31a467040a25458296bc63b1479d828adedb"} +{"index": 202293, "batch_hash": "0x5ab08f5134f37c36a847c0088c23adbfcde8fd720e446f400a729253350e1ea3", "finalize_tx": "0xc12c3dfd7d8cdc4b0a87f004f047c68bd02eac90b0c92a80a46ccc831edca396"} +{"index": 202294, "batch_hash": "0x44d32b0c6981eac0830f6bde05d4a0a5e42dba18d37d2204252d7e2071fde848", "finalize_tx": "0xb96250097b7291ef8f4a01d4f07bf2408636491d40f86fd508e792936029dd99"} +{"index": 202295, "batch_hash": "0x1b9a2d57961212d6d6e5b1f20be6ddeb03c4d860db7174aec9894f6bb5733f63", "finalize_tx": "0x7db6557c3d4bdb69e3297bea59422e3a1059b07d30392dab43664b3f081a6ee6"} +{"index": 202296, "batch_hash": "0x64525e837800ad62fec9b6271a006e328c715c92ea6164083fb7e728ebd4f322", "finalize_tx": "0x6ca77c6e576d705e8138b593a07e4100aa3538fa00644bf2ba85afe0d90222c0"} +{"index": 202297, "batch_hash": "0x2070f7e68f763d47dee77aaff00e123cb4f3f0342739acb985355746616588a8", "finalize_tx": "0xb206f1e9abc3349ae33077dcb1840774d983f24045d8aa628fb8b5704f71aeb4"} +{"index": 202298, "batch_hash": "0xefea136c867791d04ee1e3b46a1d9ffa0ba3a5449f14a2aaa917126c5a20c418", "finalize_tx": "0x780f0b600028f0cd60003cfcd7d9da332c37e18024e0fd5d53bcc91a754259af"} +{"index": 202299, "batch_hash": "0xef5be0827e7d8d7e6c0ee823cfa034c685843a5884596b77349bcf281d3f0c48", "finalize_tx": "0x29254fadaa639a2dbcd5b1a629747e5dbeb3feb70d9efda165f46b921121a25d"} +{"index": 202300, "batch_hash": "0x7a1507dd5e6bf8dca310496d9d532224fa36df2c924c87ddb2dde1a52fd2d46a", "finalize_tx": "0xecb93a68a3a72c2371a0528c80f8c643a44600919dfac8e87e63271458983352"} +{"index": 202301, "batch_hash": "0xc03fd586a458a814662cff770ddf5228533d1d2679cdfeb76615766df4a17a1d", "finalize_tx": "0xe06acd64e9fc2d5618eed242626489ab100122fc2d8e4efe6947ff8bc48ab1e1"} +{"index": 202302, "batch_hash": "0x865576f3f4cd0d267bc7ab20289760650e94e3fedef3d4f30f9be17730ce9780", "finalize_tx": "0xe389d98152da97bdf2008c51aa2cd6d5d2cda2f6a4a403dd993b7de818e3626e"} +{"index": 205103, "batch_hash": "0x83c5d658eefc2a10481fadcb741cdb5e1b9694ab938b933cd1f4afccfdca5aa8", "finalize_tx": "0xee9a3ef5eb7934a576d564720f2db93da06e9b27cacdf7edb3729cc1a2cba1dc"} +{"index": 205104, "batch_hash": "0x994fb681209cbfd4191302ec9ff516d7a7c2b802f62c62ac5714187bc5d73b21", "finalize_tx": "0x1b29f6ca387908f20f2a84b53f22f96d65cfd80638350ad47105a74debe335f9"} +{"index": 205105, "batch_hash": "0x5c5b4bbfe8e79fded964670163e2aecca16c1daf7cc628f977f050096987763c", "finalize_tx": "0xe2954a8efcbf0c53ed96dc20db0750d84438517aacfc1c0d170dea19c36351fb"} +{"index": 205106, "batch_hash": "0xc103bfe9ed915f4f77bceda1cedfcbf7078ade7a3b728b3230577363d79a15fe", "finalize_tx": "0x99e00a28bf12c9a00e8493d741fba2c89331a45405cc78c768a9b5c24b904837"} +{"index": 205107, "batch_hash": "0x48b87a156189631d82157cadc63e797033052b8907d900330e3e9c2cf01a6bcc", "finalize_tx": "0x9de4aac81ab4590ce1fb3f9aa00fff9d2655f91a4e6ed2c9bdc88d2ff921a3eb"} +{"index": 205108, "batch_hash": "0x3f85a738ce524b2f74597e66a5d61f5a76f27a3f077c21e62fda5d50ea02a441", "finalize_tx": "0x1de86c06917ff978044cbb6a9ebd2d4dd8a8bf63a94c2a207780846bf6191660"} +{"index": 205109, "batch_hash": "0x5468062da5e6f6d7725c6fd724aa2fe8a6936a9ccddcd2c7ba25376b84879d1c", "finalize_tx": "0xf1597f1ac1c3565352bcb866c84086f04ca6657cc0aeebbffd97b0018ef3f6bd"} +{"index": 205110, "batch_hash": "0x9f3a66ef0aa671bf65e7553015a6d7aab4d505445589e88a288b6ac07b072480", "finalize_tx": "0x1c9a42f211acf2e30f2f0096ed357aee481dd7b1e39d0b618bca387a5be1e321"} +{"index": 205111, "batch_hash": "0xd51c2367a5ed74ed3262b79454ce0e3e059182ebc1d49a7c883f5868b9c0714f", "finalize_tx": "0xba383502d08f3574e9bdba39a7c95ea76d253e378e85a0863220f9ac7b0b98e0"} +{"index": 205112, "batch_hash": "0x12f7b35af6aa50d00b15e534fdd0e341bb316c050026e63920c7bbdee1dc1617", "finalize_tx": "0x7fd844d93fa7b5916bf21b03a00bcb1ee00835c18092d5139e6b03432a2124f4"} +{"index": 206953, "batch_hash": "0xd35a6eaa81666217c575ebc1d143a64bb95356d7b8f69f92dd497a010f695a27", "finalize_tx": "0xad8596d77161b1f34601271b3c063028df3743fbecd670842f0c926c93e2e52f"} +{"index": 206954, "batch_hash": "0xc6d7e0f0b65f45595d7c6cc3d9133d4d7b4d4ce992e5ad716bdfc8ff2fbc0e1f", "finalize_tx": "0x19532812f0d2d5a7cdfa0d0d94c213ce0379dd33a7ef3f1c48180e4c129c9c0e"} +{"index": 206955, "batch_hash": "0x374941d3318831802f185eec8239fe85241151217ba1a6dbd8e3474e8d746baf", "finalize_tx": "0x5fa2a2c37ec8c9824981cc242411fd97ed70ec85f3cce5ac297915a4ab00cb34"} +{"index": 206956, "batch_hash": "0x9622e7695a0f938ce31b1ad7308233b0cdeca53b3a01224dc4f533e01c53e58a", "finalize_tx": "0x5603eb8020d0100df6a892766207b178efcc127e29b9c611124a047b8f0e874e"} +{"index": 206957, "batch_hash": "0x0161b9e01fc0334ba27f82c0d334b3e62e91882ac6d796e340f36d4404f2b30f", "finalize_tx": "0x5eec9f80d00c3d28577d64075769e384509d3f461ecd483a6365f75707d91bb1"} +{"index": 206958, "batch_hash": "0x8e1d3dc2a7111606574b8ee59454cad5d3db6b6fad1b9651f1e3a8fd8096f803", "finalize_tx": "0x204de2bdabacf04ed8b4928dc97560088415bb37f64adcd1fce420b28b94b915"} +{"index": 206959, "batch_hash": "0x49da59b290ec78226e3169202301cddd5b3e50acc7cf64e4eb95da226eba1ff0", "finalize_tx": "0x689f25fe517a552ab61709ebae88efb3728520f5cacdf29ce8de0bde89fb09c2"} +{"index": 206960, "batch_hash": "0x7eda569de033a5da9d8e0c048eb35b1eb2f853defe08d33fc6f6f724be3a108a", "finalize_tx": "0x83247dca6ab6590d1ce3cc822393152f7ab3fb31c8583d6201bd833c43a47a60"} +{"index": 206961, "batch_hash": "0x257efa574868a23706356b80ab186e4b79e79ee8f9070a7279ac65be8d6f7a05", "finalize_tx": "0x9e3cbcf3d60889307932c95b70d7344552bd652510c0453bcada988f8d070d8a"} +{"index": 206962, "batch_hash": "0x6ec1b58efc5204180614421cb6545db11ba1740293f85f2d3f67af2bf7ef78b7", "finalize_tx": "0x54bb60f43828973c5395dae90349f47065d851a8196ea41cdd68a37274ca0818"} +{"index": 207203, "batch_hash": "0xd7b3bb086b4aba4b0ae21eb9f2ea7118f5758d6613bf96472a9b40e53c54712d", "finalize_tx": "0xf9da3f59252afb74b381880ad771bf4cda36e689d235ec611e6c2b2c0735660b"} +{"index": 207204, "batch_hash": "0xa624a829cd7cf3ccde071c519f0b874a900e6ed539e9c75c329a08f85b6823d7", "finalize_tx": "0x2b239ae018a0fc19dbee3d866a8414c4d19f895568cad7b623938d443c3955a8"} +{"index": 207205, "batch_hash": "0x2cc026ada5b4e1ce92ef819fb8408831f6a40aa98f247753c7b643d80d8f04c8", "finalize_tx": "0xc442695b78070d8d0736ffc0dc344a9239d34f485b57ce1fbc5405196e5c1848"} +{"index": 207206, "batch_hash": "0xb51665608e4ab2d573ff1c0ca45852f62cade13472b27839144f172380ef4990", "finalize_tx": "0x340d06ee4f4a3cf93028233eb9d90ab08e65a3032ff8d10b90a1f7b47b5c2324"} +{"index": 207207, "batch_hash": "0xe35a7de8c8cf1e96b582721b5d8a8fc71bc32622fa8655fc3f4f5b7b68eaa7bf", "finalize_tx": "0xfae24cd55333e7d2992326336933721ab9aa028d7d4cc5c9a29c14611e3317e7"} +{"index": 207208, "batch_hash": "0x4c258d9ceb5d1aa3280ababed4774284c11aa825011c5dc0215f29dba65ed6fb", "finalize_tx": "0x8ea293a4d079306d7438d40d99acdb7ab09bba446f5871928cce890ed7279e08"} +{"index": 207209, "batch_hash": "0x817e99f880750f9fb50e777efb7c55a4faf19040bdf049637bcfa93aa279ac92", "finalize_tx": "0xf001e5fcf46920fff8acaebb0a3ada24451847be48b3b8b7643a12909edd8343"} +{"index": 207210, "batch_hash": "0x7ebda66cbace587ad60078e8a8122bd2ec589deb1e16c831277443f7e4a796a6", "finalize_tx": "0xb0c37634ea40bb1b7fb4593d65992430bac7cafa0820aa9d51f3e480aaaf8006"} +{"index": 207211, "batch_hash": "0x149b1136b67edfd97de09ab48da27f706561bdb4dd3300fe887c70ff80c67ec6", "finalize_tx": "0xd35f2fce53c148860ee9d3b169c858821fcdd538f6b2809bb334c3d491731420"} +{"index": 207212, "batch_hash": "0x35efface0a8f78dc793946b1960f053b40cea7cbccf6091f8f14d0d4454e7be1", "finalize_tx": "0xc569f92038292e3cad77e260ff6abd5d03cdd230d5861c9d77c404df61ea53b3"} +{"index": 212813, "batch_hash": "0xdc6ac8f6139e29f8f3879ebbd29321fc7c574b72c25767b08b803df9731b494b", "finalize_tx": "0x5732dee29854f8979b2b54a211b57f7707c5ccf044814bc81827f244063e19e5"} +{"index": 212814, "batch_hash": "0x64a4d22aa9225ff8672f4d1f9e5ddff6f607adcf144f5d61534c0991cfb1aabc", "finalize_tx": "0xc9e50ce83dfe9ab41610ba0023308492872897052037ead868724592380b67b7"} +{"index": 212815, "batch_hash": "0x3149892dfef1a11a32882dfbed120a4d3768f1125778d5b87fd7fe7b3dd1950b", "finalize_tx": "0x8d067a15cd505981f5c765ecf98f8116118722d6e26df4f6d16fa4b385c7626f"} +{"index": 212816, "batch_hash": "0x3fed2912749bb5199628fa60c03d509fceb30cad7e4c5faa86e04e7031ca254f", "finalize_tx": "0x2369e70c8786a419062f55a29b90e740107aefd63bcce6779f3d53c34f30a8ff"} +{"index": 212817, "batch_hash": "0x72ed5033177319cd91bca4aee8b08d74de811d8c849c1e804d289ac6957de3a4", "finalize_tx": "0x3666ff2727dc9398784e10fd9d26f7a547df7b1710982e875f79bdeadd78a1cb"} +{"index": 212818, "batch_hash": "0xd0dd5558aa687e95e15f6bc0b9e8f79c5eb3670f74b5a6d2b628581d5491c35a", "finalize_tx": "0x25fac1b0a7c0beccfe020ad602e5093017df43a313ce94d9d12c79e20ca52748"} +{"index": 212819, "batch_hash": "0x4e1a9e57f4624012d7113c4fea191ba4ad87192b7fdf9758b04ff9f7c56e670e", "finalize_tx": "0xacd3cb4dfa4d26c144b47fde50133acf5424bb70d799fcb3f98517c6c4dc842f"} +{"index": 212820, "batch_hash": "0x5b03ae73ec14beb5b1af3b1a1c4ef233d17e4e0e381a4add594293a08bcbe815", "finalize_tx": "0x9801de01b8695645f556cf65367f3e8bc649b0a3de79a31507f3bd8543e542cf"} +{"index": 212821, "batch_hash": "0xce71b962f1051071d2c262b9f62102fd899a5173b2e43d28cf9f330ce4fd6339", "finalize_tx": "0xfe6796e003b62914d959b6fff107d16d0546eb902b19638bbd9530037c0da2c0"} +{"index": 212822, "batch_hash": "0x33c360471e7929c6049e8a0d0c6f8eefe0304c020ce25a76447ff5156510d575", "finalize_tx": "0x6995df74d1eecc2a8a7a521aae5b47c9892d9bc12212de40d20af47ae399480f"} +{"index": 212863, "batch_hash": "0x14d62afac7c67d467387bfdfb493e918772eb2a9269bb98f500d463b96075be8", "finalize_tx": "0xf2f565a6cfa2abd8f9f0dfb5013b353b433b2ba9490784c331bd96f4dad0dcc4"} +{"index": 212864, "batch_hash": "0x6653b69033a8c72a9fed1dd534e1a67bdbba74297da146babea7f20d4af4af49", "finalize_tx": "0x5b651b3064b664d852bfc3b22ab32a18dc0fed7264ae9124f88ab57592628b7f"} +{"index": 212865, "batch_hash": "0x0037bfc23cfa61719c29d2c0ff22e8092be23cc27c1c12bd8477f99f7f95211f", "finalize_tx": "0x42acca03e8b9fed88a1a9ab17bc9ff3dd7442b597e0459258a43a1f4142eff18"} +{"index": 212866, "batch_hash": "0x3bf9f9e8e7b61b5c2654b56779889cdde36e2648d2ad8c0bdf609afdec773954", "finalize_tx": "0xa6a2caca4a6c489cd6420ad6f96792bf97719f696aa349eedc24dc7419d06ebd"} +{"index": 212867, "batch_hash": "0x2c401871d52922f8224ca70fc9ac30e1dda9354e92f765fe977da2f2d96c5cdb", "finalize_tx": "0xce5401059964046aeeb340d7825d1547d1e83060814397de37c059fe2a0d88e6"} +{"index": 212868, "batch_hash": "0xf8525299cfda6508cafdde3f93ff73496c44e4594490328257c742b4a7ce7b9b", "finalize_tx": "0xec9caf0196c7181e5d3a0c2c4be72d34be754f7275f47bdc1cf9c724f9f210ab"} +{"index": 212869, "batch_hash": "0xebd2cf8a2a259778d2b383bfae2c57a59f4dc910924983342062158a405fe456", "finalize_tx": "0xe774f1ea57766e95e6c9909f26b9dab1dc5cda4355acab2c6612a8f6377fe346"} +{"index": 212870, "batch_hash": "0xf66e867d8386450fa76434f75fda5cdda7a8df3048944fad5013ab427df2eaff", "finalize_tx": "0xad0eaf43145ac1f08c2017d529fc098dfcf7ba9995316e94ac19614fc2a5aa7b"} +{"index": 212871, "batch_hash": "0x54fdfa8fce20897dcd4fce82833f0e9ee236878f94aa98fa9f0f368e5500bd00", "finalize_tx": "0x6349aaf32b0fb91544e115e5ef0f412769f0bbb63f50685ed53d6b9d758b5415"} +{"index": 212872, "batch_hash": "0xe9040ed7d0b1e569faaaf15a9961b63fdb2e0c16579c939712e0de22b68d1209", "finalize_tx": "0x5ec35e8c419ad66a537b2c39ca5f8c28e297eb38d6ab273b2dffb36402714243"} +{"index": 217043, "batch_hash": "0x15402f4a7b2f82f216412250ae17fa63e0f3cf9f3a776c97e9422bd3e3033dcd", "finalize_tx": "0xe42a69d516f505c972bf562047d57aad0b85851b0609d58a52a6c3739ab8dfad"} +{"index": 217044, "batch_hash": "0x2714b9273abcebb7e2b3387060d658d5a5224ee8a0c39e2b97185058179d34a7", "finalize_tx": "0x0160a2edc491f49bd61fbf8a5b992a6a6586ffba36dae0efb699a5d60ddb17f6"} +{"index": 217045, "batch_hash": "0x96b60cbea40e961062be12af4456f58ac62c7a01c5907db80c94652922fc5b09", "finalize_tx": "0x0d8a8155301545aaec9f1a440490be0e1a39370ddb327cda1913a3ca39fc51eb"} +{"index": 217046, "batch_hash": "0x5d4149372e9187ef2c526fb385969461c7fe74cda09bb9d8981228593076b58f", "finalize_tx": "0x2fae21a5e4462c9fa5bc1ec2b5b50220441411353b57dc1a6df72e1670813dd5"} +{"index": 217047, "batch_hash": "0xa487236dee6c3c9f94ac80593f85fabcc4327f2845c1aad684c0bd5768b29d07", "finalize_tx": "0x99fae0b5d493961596dbaa759c75f10e625871898d6205f5de18350c9256077c"} +{"index": 217048, "batch_hash": "0x19ce1fd242ca8395da7f3da673266e8c1c3a01ab18d8640fd7f496af0f09e35f", "finalize_tx": "0x1dc10471c83022cd737d4e4b1b61d4bb32e6495731b4e34dd84392994e4dd92b"} +{"index": 217049, "batch_hash": "0xc0b1156002d31eb9ccf9f5ebfe8b0d7f376b24cfc9d1c6128c23bf35482c2490", "finalize_tx": "0x3f9a014dcf859c3b33e46eaa6e31a241648ac82bdf9bcc936d0be0eb7588c676"} +{"index": 217050, "batch_hash": "0x249ffb3a9076722b0e82d0abd10e683393742994525cad9a7efb8064f8228713", "finalize_tx": "0xe2a9115c182e88cd003b1388bfe8f29b8af45aedb8413acdd8bb178c043b55ca"} +{"index": 217051, "batch_hash": "0x1c1f15be45157f636b7074a56cbcce93280ec84b6b0f4d815d7dc5c7ee26be4c", "finalize_tx": "0x23b89cf3c6ed3d4bdc252cfcaaed1dbabfc5dcbaedf4157150d0867f596c1bc1"} +{"index": 217052, "batch_hash": "0x29288e8112462aebb485fe23a0bf10ab727f430b420db2b6f98f00f3ce584e03", "finalize_tx": "0x269cf827c494a9712e6cffdcfed20a023fbd599122f69388c07bd4e436bb802c"} +{"index": 218443, "batch_hash": "0x6fb0536d300333198c354a1cfaf01eb0579bb1c32d673dad9e824a04dcb0754e", "finalize_tx": "0x560c7ee3b3a403a15e47ee6d1a2114f708716c7e78ffc7bf794f3155e1261d1e"} +{"index": 218444, "batch_hash": "0x953567a496eabd6a32e4e1bf0e4c422d1798f5a7547fc5cfcdf00e8624d17eae", "finalize_tx": "0x040099bd669997b4e2184cabdda45900eb75ee2cd7879f3c9690647520ae2da7"} +{"index": 218445, "batch_hash": "0x0314bb8a0a18edb2afd9f4ee94867a6a8314661c905c7f7df2df40f5e92ddce7", "finalize_tx": "0x93bd5a229274b20947883d2c42d3e2541a1145dfe308f264a1c63097da210f95"} +{"index": 218446, "batch_hash": "0x52c282a121274e49c2fe899aec713d5399d713ce9a362cd166762dfa67da31a1", "finalize_tx": "0x4965f713bba4449bfcade02a5a8f587422f8845dde70d0fbb1f3cee84e31403b"} +{"index": 218447, "batch_hash": "0x7ef6e28041e5573b9c5c2607a6b0a6ab532fe05d8ab85a0308badd2cecf2bd12", "finalize_tx": "0x2236f90a689f7f8824397f50dcb49189312b2bd52cbab1dadfefd88d28e65864"} +{"index": 218448, "batch_hash": "0x0f31cc742ca725459d8bfe5cfc5b33dc8d0386d0589f1f93bfd59f31e042dfa5", "finalize_tx": "0x776c3253b2bc24a3349eda792df581e52bf6b9e6764e916caa9938645a2fafe3"} +{"index": 218449, "batch_hash": "0x1635fe197ed0d1574f5f0dff0d4f52db0f1105b06b81f3e76eaa580150f366b8", "finalize_tx": "0x7c972bea237d145e514fee750c0f012423330e73ead7668a4ad11c3e73d345e4"} +{"index": 218450, "batch_hash": "0x4323628ddd32c2f622f2f833fb32304d1bfb209d89ac9a970ae240a5d0f3fa24", "finalize_tx": "0xc1c86ff00d4bc76b0dc58512be4a299372460a6923408dd8d2570821d3b7dfc0"} +{"index": 218451, "batch_hash": "0x21e36b0530a97238d34f67b2b86e40406ae6d238212ab096e245c8f89aa9f30d", "finalize_tx": "0x05290891ed36eb38ddf32fca2a8be563a7f0a89860beae31936d9354b9352372"} +{"index": 218452, "batch_hash": "0x37fc87437477d4c21cb8dc3cbb69bcf8a5bc19cead7b83e22014d3fa6924f9aa", "finalize_tx": "0xeb4626acb54282e2ff2b9b086e834ea17cf483ef594dba347bfb96222184c01b"} +{"index": 226803, "batch_hash": "0xcaf2632c125a8cb5711f29494543703558d254d3feaf976fc6d2d212464af2bb", "finalize_tx": "0x8b72849e4800e30630654d5339d619f9142e99ae7818146b067f6591ac696016"} +{"index": 226804, "batch_hash": "0x6053cc23e25cf42c9f53d9be8d8a8a5cd8e45896c33ccb834c3d350237040e5b", "finalize_tx": "0x638d21384cdc6740e6ede9bdace53f151f6e24d5618013ffad9c002934a9afd5"} +{"index": 226805, "batch_hash": "0xf2fc6d27b45e00a3f11f0d8fe716cb41825493a508a494e94b81d5cba0407974", "finalize_tx": "0x42df59d2cacb32b54e6b5f304da2a150a918c7ea250fbb5f822cd0686959e30c"} +{"index": 226806, "batch_hash": "0xae67f5a0603c4040d17cc974525ad8a72cd891ecfa419603eca7440f77d5858e", "finalize_tx": "0xfec64ac74582cc923a7056e904df463fb1c75166b818dc8b23ce33a95f862b5b"} +{"index": 226807, "batch_hash": "0x252947ebecb04013e13725d46718461ca8c0befa5598f9251f99c3d9586b3601", "finalize_tx": "0x2107f82813bafe531b93c0a29212d5bb8b627b7ced097d2cffe09bdfab2d0db1"} +{"index": 226808, "batch_hash": "0xfd86207e346d6964856d4223cabe342986c52b485c7f0188876c26004bd742b7", "finalize_tx": "0xd66bcd3f917f1637a449495021504fe6d285bb97e9e671be49c5a0692d2e2fc3"} +{"index": 226809, "batch_hash": "0x97a403cd2146eb36293f4e2841287bab394c41c3c0b2b50d7c73278f1c1d764d", "finalize_tx": "0x03b2545d821d62ed31d20c7f8da9469e300fd9a4a9942c24005cbb197c2aab7a"} +{"index": 226810, "batch_hash": "0x1b599cd94dd08856bb20ca2400e1bb0d51e7ec83f62abc769571cb5bc766254a", "finalize_tx": "0x6932871342ac8cf7dbb35ba0411adcd24c6fc353b1a04b217047e1809f7a9c41"} +{"index": 226811, "batch_hash": "0xee7f7aaf9a6b873a22cd7c9e29496bdeec816ff5a320b34b54ed7a0efdd9acb2", "finalize_tx": "0xb57789a812788960b826f7f16d19f73675b50c9175d40513772a700be68af5e3"} +{"index": 226812, "batch_hash": "0x11d85f5b48e91e0af61af8b8f1105392108656fabc962d5602f9b770eda78ac4", "finalize_tx": "0x2246ea3b4fc16e1bb4514c39eddaa27d3a71dfb642f11a056ca3e8b24f11f9e5"} +{"index": 231603, "batch_hash": "0xb3e0a6ed27ea568e6acd8f2b1fd5c1d88c549db1cb7b21b600058453a5f816f3", "finalize_tx": "0xd01a7bb3979167b659cb862765759611a56147b32b22a04ad55cdf24b259e127"} +{"index": 231604, "batch_hash": "0x0c294a5739d1eaeb17685f4ca69c1365daab292d396b510a9d57ce7b2aa54e0f", "finalize_tx": "0xcde6dc1aaa169b369100a64bb9289ad791469aa1fee867cc39f2dce0a9c633b5"} +{"index": 231605, "batch_hash": "0x390f4803eddf79dfe052b9901b6df79eb4110b92f2a1c07001e244b2d73f7184", "finalize_tx": "0x57bfb6f2060133bfcc5f922701d8522914da6e3bfa495e2e405d6fe17d30152c"} +{"index": 231606, "batch_hash": "0x63cf9a2aca482d232f9dbd738d61cf3f7afa45f1957de5794a34e861da9d1695", "finalize_tx": "0x7ef84f7a55544273aef6670674682051de81d29550da89c5b84e90adf2c6a36e"} +{"index": 231607, "batch_hash": "0xf9e42c1cf63e89aeaf96304f26bd5d5ab86ed7914fce2997d8ff3c8f40593135", "finalize_tx": "0xbdf4e0e5f0a217bba55a32e485ddb914f6dfb5cac675423094ed7b7ccd9276d9"} +{"index": 231608, "batch_hash": "0xb10222b6fcbc3811ee4526d6ac8617e8563d1d93e0a7090e07887ca0c2111817", "finalize_tx": "0x83aed6ee8a45e722ecfa8e32addfcf0ddfe1b9e13cecafa57cf79b082d4728e0"} +{"index": 231609, "batch_hash": "0xf89d7d79241fc6c2db4e1f573f4358ba90ed9f2e66594e490ca37be28c390366", "finalize_tx": "0xd23f361a95b2e932114aa8e5f1db26c3f1d77c1d4219dc2e3888928f4e1e2f27"} +{"index": 231610, "batch_hash": "0x402d04aacfb60ca83fbdcf763e485d2a232740ceea40d5bcfd1757fdaa27126b", "finalize_tx": "0x06a46f741f268e2e6eb1e349ea32367cd8e85a698552c90dbc7827a786f0637e"} +{"index": 231611, "batch_hash": "0x4c2901a0964c8d226723aba3c04f33898b2d4953543377faa5ec2d155f1be3b4", "finalize_tx": "0x5791b35a2d53126508b6440bdc06ee7ed87ca35b2dab56b7f64c3103568b096e"} +{"index": 231612, "batch_hash": "0x194425504f39cc16b61151a6590dc0df72f9782af410f04590d3126485ac309d", "finalize_tx": "0x49254963a9731968cdb965c9651cb53088721d3eacaf8c13590f18f47d78bb07"} +{"index": 233453, "batch_hash": "0x753b67a735fac5c5bfa9a1dbcb84db7790af5e7b3ec0d8dbabe8661c25b64f40", "finalize_tx": "0xddc72509fdce88905e0f509b2ed2e0b076166e0da35569d005370c00bcf9b2dd"} +{"index": 233454, "batch_hash": "0xfe69c166ecb803be4674afc599d2ac4ad8dfaa3b7afaafed63ab6d74a1d30016", "finalize_tx": "0xfae839f3845c41678606d2386c6b94071ef5d104425a8ad931936b0d3a40dcd3"} +{"index": 233455, "batch_hash": "0xb9f967d1bc95fcc44b48af8cb857af6c2dbcb82a0222c4f82567d04afd282381", "finalize_tx": "0xe50c6f647fd60cab2eb13dea583b8712a732ef314c409545d8f70455f2e014ba"} +{"index": 233456, "batch_hash": "0x453b0984b55f55827fb4cb7ae27b1b40f4b98757801a36177f83761ddad82573", "finalize_tx": "0xaee1679eafa3948458b9e94a3007970dd24e4240bc0df6a64aaa10487efa77e3"} +{"index": 233457, "batch_hash": "0xb8d1b4e835b37948db463b486d50fa9ad6c802428cd526700b3ab8e87122e096", "finalize_tx": "0xb95d17f60c7f338110135b57428c345a5b0a833980b0e0bbc8b7aae461243863"} +{"index": 233458, "batch_hash": "0xf266c2b69ebd44baa38412bd77e478ff1df8de3f13354fb8fbfcf098d36efd42", "finalize_tx": "0x54c146d1915dbc28f2fe32652f2b5b548b3b1a3543fac4f7b3010dcb56693eee"} +{"index": 233459, "batch_hash": "0x5a5cf45ce1603c36a0b69643fa841f685e9ff2e37b29446df30740860e83a25e", "finalize_tx": "0x6ec5036a46cf1c73c9be5c63c7eebaf8339f7eba1da3b53d7db1a3ecf7648655"} +{"index": 233460, "batch_hash": "0x5588847b811172867786ca5fb844e59dbf21556207da5ca00c20eec510d981c3", "finalize_tx": "0xb297568f4cb9935975fda06f9a6d9a72872fb279edca2bffc70517872c69680d"} +{"index": 233461, "batch_hash": "0xac04b7eb7f67a523f66f9481874c87629a16df5c9e60831e294f81b5b653343d", "finalize_tx": "0xab58e5b7afc5390687ae067a52b5c1655e9f4b680a44d2e4774a205fb89fbe9e"} +{"index": 233462, "batch_hash": "0x27eb8c07a38f69c264069760e0a7b9f9b2ddf2642eb143639b3f83c329c379e1", "finalize_tx": "0x3da417e4988f1ac5036ec0f8fbe1008ed36e13279c6351849f68870ee325be92"} +{"index": 236213, "batch_hash": "0x099d4d01fa6bb5fc9e5f3a4ae5e3a71c3e279eb234c1c8246798daeefc4c0fdb", "finalize_tx": "0x7e3febc32202c5b9d442ee1ed8e477149133a523aaa9bc79fc331d5660353c28"} +{"index": 236214, "batch_hash": "0xc4a4c82695eec48232e2faa1fe64f4ccfeb346d562f17a8fcde55244e91ba472", "finalize_tx": "0x31f4eca26fc2120f97e54d7e0f78a7d99f0370b704646631aedffb929a1ba688"} +{"index": 236215, "batch_hash": "0x3939686f769e1141bb41a32d5d4d838622e7646178494cdbd4441b88482b750e", "finalize_tx": "0x80fcfefe22d9cce32279bae65c8d65f3f641d23f72c22ba1e38997b20b419c54"} +{"index": 236216, "batch_hash": "0xd4fa76fd18c5975ac290d5ffa65c322b461ea13b364ea37a103d005913946787", "finalize_tx": "0x7a0ce5990f69dac817ac9d3d0fee15a59260c09b0bc0c4c656f3848f347d5533"} +{"index": 236217, "batch_hash": "0x54e3532fbd27327311cbf0843ecaba7fbac22d56bb45f120da03f34f63ecac49", "finalize_tx": "0x770ee13d49fc2ffd928505c96c87a56a79d3160bcec75ee27315701ace230d51"} +{"index": 236218, "batch_hash": "0x77ad3647a730a5990e6e9ca7942f041f50e15903077c352f4eac8f80c3e89aec", "finalize_tx": "0x73f9754ddbf11071dae751d04c6140528c5a4ec3e0702e34c5574021b581e10f"} +{"index": 236219, "batch_hash": "0x77f2480003cab7644c1f5ea1de2046dc63dc3af46e2270996c81368d5c478e41", "finalize_tx": "0x602468cfebcfb8a35729536176917d2468b567721be71487110643d1c441ab06"} +{"index": 236220, "batch_hash": "0x2a44c49cc98c6521dbcaa0af9e56a126980a846df68925fe0f178cb67e811d31", "finalize_tx": "0xb5c753235a51936866d4ccb617aa168d135552feac9ff40b3cd3ff54fc38689c"} +{"index": 236221, "batch_hash": "0xfaa07379cf804399b4763386e6ae262438696cde04331dd25615b3239d5f4076", "finalize_tx": "0x4b39280f1fe42d0fc44c485dcc269637825cbcd33e2e5fcd1a5911e527278527"} +{"index": 236222, "batch_hash": "0xdf7c737842725c7cdb68b5bef8f1074879bb23787cef75e19c34b1c3fa97c6cd", "finalize_tx": "0x99606cf1ec5e3d6035cf441c909add5594250ab34eada7d1ff06274d923c2030"} +{"index": 237093, "batch_hash": "0xac10501ac3c33ad822797a6b7e3a45e6664bff362096ac26c7fc5e412dfbc1af", "finalize_tx": "0x6bfa7dc4a08ec9b51c12218c117bbf47d89c26e2e2e0944d6dccf220db9641d1"} +{"index": 237094, "batch_hash": "0x4bdee83370bcfff2c214e7f9c2060f3e76554c78b36d96f66d6b3781abb59b09", "finalize_tx": "0x1bb4682c2d25c744cdac05f57c900a0be166673c72b3260abe33266638e65465"} +{"index": 237095, "batch_hash": "0x27139e45cf04e657adadee7a9fafbc87ae6abe07b4b2903ce0cfaae64782b54b", "finalize_tx": "0x5d4a2d3c1bfac09d08f5f2ee359ebe06765afcc6e4879de70460fb33fc5b2bca"} +{"index": 237096, "batch_hash": "0xf7ea184f986a5796ba94766c62627cd1f508e510d88303a72375e023c96bb6ac", "finalize_tx": "0x2710197f1cce75a6471f8eb4680b173c875e5ad90c3fc95b3b65a24370430439"} +{"index": 237097, "batch_hash": "0x2842772b30f92d9a72233a2f2b848fe38bcaf6a0ff009881e973a1205430c565", "finalize_tx": "0x8f80747aec392b123d2b78192faa10a93a8b6360fd22b880b5f15b5a6c4f7589"} +{"index": 237098, "batch_hash": "0xa18e7cf80d3aa73db77a948379579792124cf58219cec23fdf3260faab51a035", "finalize_tx": "0x2fca61a306e50f8ed9abeaf6d3ca652239a9b0f1c0faef1ba5d3b0b9bde5a2eb"} +{"index": 237099, "batch_hash": "0x16c2aede8272e449f54e5ad6f0f47989ba726f36699bc9f44920dbaad98670b9", "finalize_tx": "0xfa375d9da25ba53067454f86f142c146d81659de35026adb5d99fb6e56904562"} +{"index": 237100, "batch_hash": "0x2e32b3c0921afc90650675e9e4a92858b159a14ce7c596aff5b4d87659d0d23b", "finalize_tx": "0x0cf1b1622a6ae08952c0d025c42cef08b0b0db436783a477d063be9e29858d79"} +{"index": 237101, "batch_hash": "0x011e90c1ffe4303a69a7f1658c1fc3fd8a07e67527b0ac9d634d7f3b67d3a078", "finalize_tx": "0x899c1f29ee81f91d96fcd2373905b9c03b20958b8673f1ea72c80c789dbfc1cd"} +{"index": 237102, "batch_hash": "0x93284087445d149f6b460fa089db5b959bb7de55f806a1aca4d302d7d22cd997", "finalize_tx": "0x9f308d92e13fd9a012206b6a11f68b63b102e45d0892ec23a8fd168b5577c212"} +{"index": 238403, "batch_hash": "0x2ee9e5007994515e75bb13cb24254b5950172b243e38f7849590a0f239c5d532", "finalize_tx": "0x68458532df4dd457e2293343ed4143e71b239aa99394a066d60f24ff267fd962"} +{"index": 238404, "batch_hash": "0x009ea715cb52b0a2996824b541aa840bd5cfeb75d2e232c6e7a98be78ab5aa7f", "finalize_tx": "0xf3e08939219a10c5579ac55b59b3c4ddbc30ba07d0642df7af583d25bbb33dc2"} +{"index": 238405, "batch_hash": "0x5fa424514d322d958a309564cf70369ec50b9777d494ae6f0b762f872c895810", "finalize_tx": "0xdb455a354bbde1d867151aa2de47e820b57207b6fc79f6b9cb569119ae3801a9"} +{"index": 238406, "batch_hash": "0xa1b30fc811c9c68e69902a2b0c4edc6f3ec24f3e2c38b4e1e8ea20a5a0c1b520", "finalize_tx": "0x62365404dac0dad0e6077aed103d1ac5c64a0c07b40e938214729cf83357d7bf"} +{"index": 238407, "batch_hash": "0x0d5961cc0216a628f931267dc1a36f0bea0872a8d1c152079b136dbadeaa6825", "finalize_tx": "0x5cb16add444dc20a5c37116dabf000ce6abbb0f315f52005478326bf51ebebd8"} +{"index": 238408, "batch_hash": "0xe70f1e4fbdc066186a9f7b1614077298eaa4a14b0d1ed7a617776ec571fcf08b", "finalize_tx": "0x1ac3b46dbf4dadbc72ad85f84050cef79279313af325d4bff6e392089ba8b079"} +{"index": 238409, "batch_hash": "0x033fc9bd4a6c04917aa0931fbc48631980db08ce32e76e3880e425bc9715592d", "finalize_tx": "0x63324786e606b40e7c1ff87ac97b9d470d8aec39ecd1dc20f0d843747aa02426"} +{"index": 238410, "batch_hash": "0x8347f3b3d10e91f2b5b4ad6da6fc03b9e0ecb58dc1172a8377866c4843f66bd4", "finalize_tx": "0x61c45cb300f51cfed8d36b6b62cac632000dd3b82ade4a1b2a1fa82eb77e0611"} +{"index": 238411, "batch_hash": "0xf9be013c01b5c78c1b15a447f64093e41b13bec2589022150603fb559c9df312", "finalize_tx": "0x429d522021753f186bd3d0452255300ba2939b3a8198a2096e0edde32fb4b4d8"} +{"index": 238412, "batch_hash": "0x0bccaf4ca06751e216a26d374b24aadcbf74898da857428f40c478d6f90ddbd4", "finalize_tx": "0x61d541fe1ac2fbc8246dcd0c88d2e0a320a244418c166e6dc15f2fb4b98dc91c"} +{"index": 252313, "batch_hash": "0x1ea18e933cf2cc7f54bfade5bf6773199d619ad6534c824c87cae1f4cc79a0fc", "finalize_tx": "0xf2963ba11573ecef68cf01e119a58d6cfef46d7def04d52d51fd0f5003bd5ca4"} +{"index": 252314, "batch_hash": "0xd60f38374e99aceb51f252b3978e98ec82b6e9de95858ee6c2b2987465bfe28a", "finalize_tx": "0x09718a40dedcac15f2dea4c5bb7b49c567333cdd52bfdffc9c055bd8395a74bd"} +{"index": 252315, "batch_hash": "0x45101f10102557612343f10681e7b2c64084bac5c4c9972def35bbe10896ebb6", "finalize_tx": "0xfb6aae745c1b1d4872861d1f4a655d50abea6966b26b85b1ca6033a236049a40"} +{"index": 252316, "batch_hash": "0xaedab44946d498146937203d352bbfc5fdc2eaca54a363ae2d8c185e045c4f70", "finalize_tx": "0x4d92fed1bae3ab94ae669957654ba483cdfab270d079d3b0109e79d25d8eef1d"} +{"index": 252317, "batch_hash": "0xc1d9d6095be4614496346694acd60921b49c76fd1c6ea4581a541c4a1123d00e", "finalize_tx": "0xf27510ecf762c91a2dc3def70060cded0aa18127f24759311cb742c7e46aaefc"} +{"index": 252318, "batch_hash": "0x8447d77dca12d3d5d18c9921250dff9d4b2b8484845b4cedac2caa6030607239", "finalize_tx": "0x1dffc1e8d067dd68552bdc886707afc751e52fefd6c12f9cd927c02e3ce50ded"} +{"index": 252319, "batch_hash": "0x8b2563345610cf8f273c5bfc5d9cd7fbaac5386bf45af6ef2782ebc0e2e7926f", "finalize_tx": "0xdb406856cbb912313038b46c8e40a7419bc7342cb6646523b431b91c982e4b48"} +{"index": 252320, "batch_hash": "0xc2c75784d6b683e6949d40e53a28b86cf02c597610db5b0a7a455eda5cdcdeed", "finalize_tx": "0xbf207df07e5abb57ca1deaf54c1ad4a0d9c90ceaccbaab5c4d0119075dcdba4c"} +{"index": 252321, "batch_hash": "0x71c0ead56ccea83b0a282a829c04dc79dee4cfd080d61b4524b73ef1b1708063", "finalize_tx": "0x5f7f5400fd2d80d23c4db1225fa704d6485f80be34cce8ab9393fa0248202ec8"} +{"index": 252322, "batch_hash": "0x1ec4b0ed7e807310c2f2b3b14d618ca8f62901bf3e761d7293123457ac4fc568", "finalize_tx": "0xa59f9b63de274ae2c10307561322b427a7ea5dd545463556caaae4dffdbf1861"} +{"index": 253043, "batch_hash": "0x0aa2dacfec340eb96c93689113150fc173ddc5121a8767aa48bb17da85e4bc28", "finalize_tx": "0xf5458b782f4c9bdc26934134376d3663f09e5e2a30e5a27a94eba179787d8061"} +{"index": 253044, "batch_hash": "0x195aa4ecfe0b6616629f1efb00b6d3565530fe551a8111adf75edb18718af626", "finalize_tx": "0x1cf68d863b789f6ea04a1f36b752ae9a577f76c87b15ceeb7f8d929a3de116de"} +{"index": 253045, "batch_hash": "0x4e62f7c07dd88c48465e3bb31900d8683b72f6161536bc1cae76c2cc6b19a398", "finalize_tx": "0x0ee683da456762cf4a9640294b3f359ef8815f9aa3626f123a925466710115b2"} +{"index": 253046, "batch_hash": "0x34bbc4a6364c89d56fb3175689b613b665677a3faee2fbb301d0d834648de1f3", "finalize_tx": "0xd421843ad57b14280ab8872d37d18b751d9e599a213da88cfda3e6fd01beb7e5"} +{"index": 253047, "batch_hash": "0x869a8149d6c7041f48fd983e2b527260e5d3d9dc95f148290f92ab558f8cc47d", "finalize_tx": "0xea7a1773273676f04dab5bf914e11859407f3436d3cd28dc3f760cf2bc958a59"} +{"index": 253048, "batch_hash": "0x2afbe288cacfab1933f8d29d38425f53ca8f93888a6e4eb93236e57fe7f0a303", "finalize_tx": "0x827764950608e709244b8802e0f7a735d5c7fd5f7847e8b05ed9ebc920698bb7"} +{"index": 253049, "batch_hash": "0x8d4890d26cba9f2c620f6014ef84315e03d4b62073248fa79275435363da3f7d", "finalize_tx": "0xaf4a54173f84df69911a8b15def5fda6b9f332276c629be518299ade714b2900"} +{"index": 253050, "batch_hash": "0xd8dfe69e2c7eb85de5a417b95495c2de36e2309619b23d733036106e462ccad2", "finalize_tx": "0x0a203d86d550cd0d2f80d756e4469b667579495ad8865b8feda726fd60b8a0ff"} +{"index": 253051, "batch_hash": "0x98091ed188a5282e43c8e125dfe21bd948256e040c4375446830a22b0b8a5b30", "finalize_tx": "0xd5efdbcfbbc2bee6d15c4e7278930890655616a535a4c15d7bce35e5ec54e394"} +{"index": 253052, "batch_hash": "0xbd8f6c874b6535a3ed1c6efaee01f347cd0243412e216354871db9d032c553e0", "finalize_tx": "0x0d3cdd7f90ca763cb20db604704cc8ce2b09dc1a4f97d65e7b044cd526ad5f0d"} +{"index": 260203, "batch_hash": "0x6a4b7c05863a14a21d859bff26158459099f93b3943b3c70c0ef8014ffef00cc", "finalize_tx": "0xb5b499addbd8420a147623c9203025e1fb3517138e80e1ecc8485c5d5f2b022c"} +{"index": 260204, "batch_hash": "0x62ae8b0ef254043f326dde1bbdddff037052263a53abb6c67beaea460043df9b", "finalize_tx": "0x048f43307a4d05330126e2ad1cf50f63085e9c7aac31f5964edf02e0a938b22f"} +{"index": 260205, "batch_hash": "0x3319b7773214aa27688204ce4db8ebfa4728e2d57262fcf7fec1384ce027f889", "finalize_tx": "0x8f65182aaddc676370f280769a47e58f452901025ac5bb9a43ad01558772e702"} +{"index": 260206, "batch_hash": "0x505f518997900bde7096dbb6010c61d7be72d11d940f6ff600256f0796dd25b9", "finalize_tx": "0xeec6054eb82ba922763f55dbb971186aa3eb5d72639dab75c3069e577722b35a"} +{"index": 260207, "batch_hash": "0x27e6b57f832467ef5a93a1c6daf4799911006a714453e19ef61f1ad13cd19769", "finalize_tx": "0x4828b6c787378a0dff79c24360c07c24ca3855231f9ddc18407c905cc65d0c32"} +{"index": 260208, "batch_hash": "0x74914cc0ee9141e4c5e088848c6ad19b05424c79d0504e421b16e3c015760045", "finalize_tx": "0xcf186f98c412e06f3eed3c58b57133a9872693b6d6a9334eb3cb4bf6fe396f64"} +{"index": 260209, "batch_hash": "0xe9a429bdb187373e22d065ea64d260a451c940a886cd9d8934ce4ae20fa72b9d", "finalize_tx": "0xc581db9a16422ef5b8a9b32b1fc53764975ee8357d36a7943034fe390fd94916"} +{"index": 260210, "batch_hash": "0x6ee1faeb038a0dc387d509f6dc5b1bcb1ebb60e9c19bcd46a44f2653b5e3b52b", "finalize_tx": "0xfac3ef86fe39e6b1e6b5fc10c82667bf248048510d0fa4b2069bd81900589daf"} +{"index": 260211, "batch_hash": "0xe7193eef35efce76f81f3bea1660f742aba157f0e92e3e3fd3d31abc3b5b89e1", "finalize_tx": "0x3ac482ceca68eeb56b6dc03dec16a79aa7ef36a1e77a839e1fab10aadde5875c"} +{"index": 260212, "batch_hash": "0xef09103cabdc3171736592b02ba4445073b6fd8ea95564c8af07a32071b45d9f", "finalize_tx": "0x010c50111a61fe5931e55fab3b7c475550ffd9be986a06bea7d8950954476770"} +{"index": 266073, "batch_hash": "0xe42bcb8abff5350759d1d9594795ee21171daeb6f0b244e81300920ba5a593fe", "finalize_tx": "0x7c22a0cbb8143487fc01d04966b0c3a3ba5af4af233b92d359c5d4fe5dbfc55d"} +{"index": 266074, "batch_hash": "0x9aa061889fc23098cd868f03bca56a1af39159ceb5ffe8a6c6d1edb31dfba1cf", "finalize_tx": "0xc42fbf5014d6e84ab7928acc925ff5d2d897178796292c363c80d5a21f21a108"} +{"index": 266075, "batch_hash": "0xb614a36c98d8fea3b76beea96373d9567baa021a8d1d6eeef946aa905abd4ad7", "finalize_tx": "0x2da1e6cfc05d28bb446313246892a6539ea773f145d00ea2646a32810c16bb5d"} +{"index": 266076, "batch_hash": "0xb575b785353d0758f168509e8642a137ea2e08b6d689d24a5dbd637fc9b581f7", "finalize_tx": "0x1105a906194a4999527af1828b2b6da3e47898c231a5d134cf098390d2fb0ff5"} +{"index": 266077, "batch_hash": "0x900d29d81392014dda06269241e244065e0da53f91e1f09737aa8581ac69caf2", "finalize_tx": "0x91e154048f5ec8de83e7624f65be0843771470e6488c2bba1200c5c3ac04ef61"} +{"index": 266078, "batch_hash": "0x8af80e6d81287bae634bc6b470bb8c58b9234d3f6dd5dbea7d66bac8b465d4e8", "finalize_tx": "0xe6fbad0d44ac280f6162dd4491c153b39920b4e861593468e77f1c9c1927939c"} +{"index": 266079, "batch_hash": "0x855df99f18c32fc38987bcd3d2c9ea1c2c80d59cd3b3980c852ec8abf4f55d06", "finalize_tx": "0x28f13a457e558c02f60ca4e08ac05090b625dfc61e1d39c2040bffa088d1ff63"} +{"index": 266080, "batch_hash": "0xd001b82e1eb46ba4a6da53d271eb4bb17b53902c5363439d58ab8dca59c89118", "finalize_tx": "0x7df9480f638f7d567108488c1f516ca04afd5f96f1b09ae89149008f98b1316d"} +{"index": 266081, "batch_hash": "0x7179c0e520c092ecb032baddc6d54cc8a40d299bc71cc444ff7c485899050b84", "finalize_tx": "0x78111a1cb292b8bb2ed55486c82845baad5b0fe5037a5657fa3d73b93031e281"} +{"index": 266082, "batch_hash": "0x4e6b0c471cbb50ac68e008d8159e8dbf7a65a5f2dc34bce191095d82b9718963", "finalize_tx": "0x8c91e48076217853ff286ed1c39f3ee3ecac880fcc70924670c07f0be67ea3da"} +{"index": 267223, "batch_hash": "0x15e15d9483894f4df1a289ffb3779e7b258ea8c2c72870b35f6ed2c262107af1", "finalize_tx": "0xc7a71fc1477f8339e3bf6240b659a33cd7494f04c0f0d004e341b7b06db052a4"} +{"index": 267224, "batch_hash": "0x0907bf972869622c24c0040bd7adf3c502f5d5a1ffe9fc9235b5d2f655d9e66b", "finalize_tx": "0xfa2602b681883f93b422e55d061e3ee1cebdf8b46d2fa7fc13bd6cbe6edcf502"} +{"index": 267225, "batch_hash": "0x093a1b29307c508f3cb7414ee95bde8d9c1d1b7c6a063891f6f42c033f3536e5", "finalize_tx": "0xdebc3229a31e201666221586f89706c51a46303a609f2ff9dc4e27060f5ec52a"} +{"index": 267226, "batch_hash": "0xbad1841b3717e553360c39b4c74dc584e5c3580e70a52b7a56fcb7563bcf0436", "finalize_tx": "0x712f2cacc210cc8bb3f830bce25c6fa85c69d0630de8a57510bfbbd9c0502a70"} +{"index": 267227, "batch_hash": "0xa4867396b2960e31af78865fe663b9cec8897b4ef73be64a1cc826ce133eb4e5", "finalize_tx": "0x87f4c5241588cd80022844c34e7929514a6f8bb1dda569acd78a1a416d909d37"} +{"index": 267228, "batch_hash": "0x3c199d311cb244d7737485f7f38ef723fa9319ba98d40f16255795940482a519", "finalize_tx": "0xa930fec9d272d558dd2b73d8b336500369bf97879cb637355dabd7eb7965b791"} +{"index": 267229, "batch_hash": "0x23ebc064696ee8481231da92872858218c1aef001e704728fb7d4cf6833b21b1", "finalize_tx": "0xa129223624b4fdee563b76846a66d07057d3552e8067a3269e7c836ca7e94467"} +{"index": 267230, "batch_hash": "0xee4c7def2a85e79598ec0bc76ec485ddfc80e6520a23e63bb96c170798f2e08f", "finalize_tx": "0x421f99859ff5b49d167cc129398ee358cef21d2f1942c8483a118b4bec696b69"} +{"index": 267231, "batch_hash": "0x431d4c20cd81f2681294d952c638c40c90bf29fdff0b1009813fcfd23f7d8e53", "finalize_tx": "0x87c437628334248930b26c9364f5f3ec8bdebcc158cd09f5452c1f0b3e91703b"} +{"index": 267232, "batch_hash": "0x70f2288680d1770eb2e6953094fe1ab67e5ffe4c013c2b892ff4a8fa70e32d63", "finalize_tx": "0xeea9ee1fad083fb8e761b9ccb914f47f5542a1c31a5f49be037d5c7b6a51c2f8"} +{"index": 268023, "batch_hash": "0x2bde7e4de6b7ccda07c2cb7444aaa4e7a8ecc83adcd36133db19b24ae2cc8bfc", "finalize_tx": "0x26ef13e846e787bb100f30dddec0752248e36145532b344306828a643838d467"} +{"index": 268024, "batch_hash": "0xabed143776c71021393193234537061dbf8b32b4ef16db2664283971bca5e1b1", "finalize_tx": "0xc48399bd014c8e3b53e443a05f2a01e6225a2acfd8213b010b92daf25f3bf5d9"} +{"index": 268025, "batch_hash": "0x77796d6215eab3f7f99f0a859e0a0e0f688200f6241cae6734f95b4f624f9f4a", "finalize_tx": "0xd5a814afa6fad698efa4ccf0684d3b26a51063a80f1afa9655ed0c31e0ec0e48"} +{"index": 268026, "batch_hash": "0x48868d6504855baaf8e037f96f2a179f9e9084fb8483a2acbcb57f2ffe5ae15f", "finalize_tx": "0x12b0ace707ebb41b55fad44d3717848c57248299efb48c10d9791b9d1771d45a"} +{"index": 268027, "batch_hash": "0xb625245adac3dd02e155b97d2ab65043f14243755d86e2c8c33d4aabf82c6070", "finalize_tx": "0xb1576bdbd3a0bfe857d35cfddf7beb81a8dbac7bc049eb26f38b6cdeba0ad8e7"} +{"index": 268028, "batch_hash": "0x13b8303b99f1d837c1e82a5c2dab750f3934ba2274ee2706984b9c31bccdb40a", "finalize_tx": "0x6601dc60d303aaca2c61ef3dbe33a53ad3e0c044a2280f7e9c5bd8c25abc7642"} +{"index": 268029, "batch_hash": "0xc25b68867dcfb25a1ae2f2151bb2b93d3d7f39cb0e3b9ce9c244c070a378eb3c", "finalize_tx": "0x31421c3fdc908a0402e28872da06910bcb0e24901723f745378577a2671b6865"} +{"index": 268030, "batch_hash": "0xea49ac129fd8d31e1ce1fd533e045d50046d71a9a8aa3050f04b19c18ca211bf", "finalize_tx": "0x9ab2491b23f18b85808cad6c13f228dd0cd0c0eeca58b61b1bfb17bee39506b6"} +{"index": 268031, "batch_hash": "0x78b6cb55f3a904117aebfd75c9e15bb2f343a9a7ee63ce1600dfe4e63b20c011", "finalize_tx": "0x2fa1e958703c6f173b42dde32c0dedb65a9794f2ea4a8ccd66a4e7618edec4d3"} +{"index": 268032, "batch_hash": "0xfe4d4e98d657be10d3da4c216ebf2078c71aaa0ea37d35633fb5617cd99f014f", "finalize_tx": "0x8515d8fa1d7dc4dd21fdc668d608ae7bbf8bb04cd8a1b87af78606d50a6d762c"} +{"index": 269563, "batch_hash": "0xa1e93daac5b8384884480ad088c0de09cc30c3f146f9b17c02ba2005a9f36e50", "finalize_tx": "0x53952c8da73240eb1ab4275478501c73eeba957008e7565311a5d251aeae5c7b"} +{"index": 269564, "batch_hash": "0x3725d80cd67e6e3fbd9ce8dd32e66f74a40a60da56decb1441ca884f8f1241d6", "finalize_tx": "0x0c623f1fcd836b0ab0ae1e47035101c9ca3796b300e6af0ebf676396df2b58fe"} +{"index": 269565, "batch_hash": "0x82a73272e935fc6650be611ca0b7e3e785cfc2ec43a542304d0516597501399a", "finalize_tx": "0xf8856ac98869318c0bc76e9a56cd03e5ab222f6ce095f9f0708a1d868e402492"} +{"index": 269566, "batch_hash": "0x455c99fa19e8cbc0e318977be013cdd613460a04d0bdb8f9ce80752bb5c854b1", "finalize_tx": "0xe9611a7e5668f46f2be50642823a6b48ed8fc57c57c9e3852be4f8f242b88961"} +{"index": 269567, "batch_hash": "0x11a872a9b484f8c1052118ae8aee71db74366c05a3d805a9af3c6c8862fd2a39", "finalize_tx": "0xecc5d912e51ee203891ea7436a8e0b05e39f24e096ccb10194d112634e99c663"} +{"index": 269568, "batch_hash": "0x284559427806ba27cd4a6091b3139d848ec454664f65775838622f702cd62b88", "finalize_tx": "0xb7d292a1f56508e7494872ed0bdd645764a41b7a5f9af4fa3c58d364c55c71d4"} +{"index": 269569, "batch_hash": "0xca128a3d430897b74364dc37cabae62b40a516bc04d8fd7f30a1658302ea9581", "finalize_tx": "0x3275ddb9e988ea002d1cc2b176368cb64728479470dc4fe25e0bcd7707cda401"} +{"index": 269570, "batch_hash": "0x41fbd65e96d8a9e408f1432a68a982f394c34bc3cf716c0b4337c9ee6111531b", "finalize_tx": "0x1ccce5f086db47cbc2c99e6a3b69c81f161e1af1ed3c16c4a70bfd50795df572"} +{"index": 269571, "batch_hash": "0xf2e662558d3bdfb0e554499067f6becb85a2c3d780c733b1f3e2830115c6f8c1", "finalize_tx": "0x61fa8feb9ef3fbd6989a347b0f58e7df73fb340d73fa884f10980e433c7ee23b"} +{"index": 269572, "batch_hash": "0x614df2648f6b10a9b4bdcbdce9d632a5484382958ecbe91b4648585152c87fea", "finalize_tx": "0x8d533f8038e91ed94a40e8340774dd8a385964335691c15ca1d619cf4933cb54"} +{"index": 270843, "batch_hash": "0xa9db9af1208fb967696d5a0e45ecb9e4bb3a597a7bdf5f17c7875c6bb5b31999", "finalize_tx": "0x1fbcf77e0aa0c1b46bcdf9dd546844cac6016134b85c18239fcff2f70a835e55"} +{"index": 270844, "batch_hash": "0xf4d4845f2e338c3a9e6a0dd515b0c3ae81014c13dd7175a5bbfc0b0abedd6f9b", "finalize_tx": "0xb53d48572ae5a32e9dfd552f5a65b03f76477e01bc8fb8ce33e611bc8e352dcf"} +{"index": 270845, "batch_hash": "0xa0da23f30ebf21e207dd7ca63a7b3b2018d52a917b5130244a9a2671f10fc3bf", "finalize_tx": "0xcbddddfbf2424234c1f27ede447aae9fa5daece01e270fd9f67eb1cb2a1d7dc8"} +{"index": 270846, "batch_hash": "0xefab8c0d312e41383174371933c1d06b798d7845b30fb44ce23089a21fdf16f7", "finalize_tx": "0x4dd7b00e79a6b5abb1bd1c8c79bedd0b1f1fb7eeb378eb30b253cb8484c07469"} +{"index": 270847, "batch_hash": "0x9c1e826674eaa946fb1b0099abca0a727ea6b9ebee610fb23589c2880e43507d", "finalize_tx": "0xf2a1833f1afb1292ddbe8de97d3b135474f455b4dbb6a70cfdda50a11e0cbf42"} +{"index": 270848, "batch_hash": "0x308957c8b9f18b5d6bf41e854108db548ffd6d65a46b08ec32f90ee528bf2e98", "finalize_tx": "0x1b9175cb23b8fc0ff618e8d88aa0f6ad31e1cda385cbfa9e93c412cc01e74e2d"} +{"index": 270849, "batch_hash": "0xff2772a06b451f181cb54c5b7dcacf7a0283a441051874e30c3704f77eb5bc69", "finalize_tx": "0xc624813df1a89280b8825abf3f695402f9b3052fbc5fbc6ab70e13cb4cd3fc89"} +{"index": 270850, "batch_hash": "0x9c0f186dcb67e123a3d11f8c39db76f25bb022bc78edd431b9ef6be04ecac983", "finalize_tx": "0xeee01fb9f21d85ad43dd2830b166bf68bd55b915848d0f68e7cfb3c96b57e59c"} +{"index": 270851, "batch_hash": "0xd796f32a3a292226e38da1f764a421ea9e98609a171d236dabe6d2e6a5f255ae", "finalize_tx": "0x13fe86b233484dfdc5c667faa6bb1ceec0a2bfb78c0afa7a3a017be4f1f8d2f6"} +{"index": 270852, "batch_hash": "0x2516052272961b1bfbba6ab87d658fed00fbb4aa03979c03f8ec1ad08513a9f2", "finalize_tx": "0x8be409a1039d82e17bf8d8b203e633ca2f34a7ca0da4ca14070cafda23fb446f"} +{"index": 271753, "batch_hash": "0x70b42a54ce4fdc83bdf2e28572adc782803160edaea26f100e0f9eb4aaf01d35", "finalize_tx": "0x268eed41a8438296125aee93a96b28c5cfe2f726dac3aff20767fdcf3b7d12ff"} +{"index": 271754, "batch_hash": "0xb2ca84cac2db743d8b1a29f6c937833a38d4c9f75528b8f0b9457c477af109c6", "finalize_tx": "0x20eda80aa398a6732c8bfedbaacf97c935b67f24b6aa81f8dd3fb39be23e0a83"} +{"index": 271755, "batch_hash": "0xad697f50c65b5703f39b0ed279438ffac163277f1f07b83bc3d5ddf6e1e8ba5b", "finalize_tx": "0xd7d285d72d99df04aefa4c0c75d5c1882708b248f6b75591b138978f30ea863e"} +{"index": 271756, "batch_hash": "0xf065ada6a0c42161c5cfb82d55ef4654d5a6735d4bc434ba6e78a0613f1562f2", "finalize_tx": "0x4b443ea4fa4ef83e400faffac69939d5a6c4b40ad819d13765e0b91c0c3f3372"} +{"index": 271757, "batch_hash": "0x8dd5d00a723c300efba71a1b7dbf7be82880d56b498b34d7f806a21fb8b0d909", "finalize_tx": "0x5b629a12f9412a18638b1afcbe171cfea236a6f4c8fe242ef1e5e32d9938d249"} +{"index": 271758, "batch_hash": "0x7813f0894617626b83c628256280e5ac2262608ac972098748e3edf90b15cde1", "finalize_tx": "0xc12f491c0e94f495f2c0639684458c4b3f95e1b2e307b54ec674975fea36f260"} +{"index": 271759, "batch_hash": "0x9afb725ac76c4fabaeca9c5908b7aa96d26ca024f6ada86523f200d20944d708", "finalize_tx": "0xf366d52a0a3a30fffb4ab214d79237e21fbfc47ba6b230669de7414d88f0d9c5"} +{"index": 271760, "batch_hash": "0x4ef51278560895e1595c4f2909ee4756d5ff8f4d9f3005f755ca135bc0d951c7", "finalize_tx": "0x416d364279cfd669e39d83a567ff380bf7c05ade8a49c64f357ad2ee02282431"} +{"index": 271761, "batch_hash": "0x662da821d4663b7e95a9db630dd4cb60a461b53f29d6269abc66cbe44fd45181", "finalize_tx": "0x351db006536fe99f8527beb5196b89e7a2cbe38f4b8058612f5218804965b4d9"} +{"index": 271762, "batch_hash": "0x05b5b411de3bddc790357ba9ecd18d66168c12baac2104be91c28052c91e6083", "finalize_tx": "0x1e71cfe8ae39243236ead4419d077a165b4ce8d63df15829469a299658f83434"} +{"index": 271763, "batch_hash": "0x88f993da0de33a1f32df5fb2eb94c1786a242aeef1a3f808e003d1d28a143d19", "finalize_tx": "0xf31def56cf2e19caaaf864887ce01843471fd5bdf48db533c257a6e84ef0aa72"} +{"index": 271764, "batch_hash": "0x1fc762702c2ab519298ad0adac0307bc113679985f0d3b89309e51dd1524de2a", "finalize_tx": "0x5d6d0b94c28eb53eb9ffd963dbd1d7ca13608d3e5b83b40253febdc2c619a3ca"} +{"index": 271765, "batch_hash": "0x3bcbc5538ef35d3380911999be5dc6f87325f282c2c5de293a4a3cc394eecba0", "finalize_tx": "0xe6f097480f8bc94c6be5304c88ce6e4619286a31a90df4d26ecbe443e9efbdc0"} +{"index": 271766, "batch_hash": "0xb359dd175130fc2acf1a2a9123496be9d1378eb6289ac3994d81973e363d47d5", "finalize_tx": "0xf5a951f413e178762bd5c7efb0c3bde07ff84ff315be668a7e725cff8140700e"} +{"index": 271767, "batch_hash": "0xde6460ac620107b1b9ad40f81a8b092a142ba898bb396eba5d5b61efeac4053e", "finalize_tx": "0xf1f5b39ee7621e30c19f8f20c1bac7d2a52143f34c5de09dbca02124e17a133b"} +{"index": 271768, "batch_hash": "0xfea8fdfb2a82ed8ef086a93a667c07e0103e9c1b9be495f633f594c639491dfa", "finalize_tx": "0x97a166ed71e1a2413325e604e47dcc199655ecc05bad931c8c236a1c64aab671"} +{"index": 271769, "batch_hash": "0x9d4cc25a14b61b75ab69725894186d5d4d6d0d209809f153e796a7d459730aed", "finalize_tx": "0x9a1e263cea1433e3999b326073a1254ade5dc398a3e87266ad6115bca2f083a9"} +{"index": 271770, "batch_hash": "0x45449aa26ead9458849f0e12516c427419c492a1177087dc7ef0bfb97e0a3ece", "finalize_tx": "0x13ef25294b8240a98c0ebac7c475d49c0e818e242d7f4f0a5dec7126d6348070"} +{"index": 271771, "batch_hash": "0x679a3d6fd79f6a74760f6efbd33cc1c939edcf6bd9bc316eaed9f7c73e571201", "finalize_tx": "0x1825ea57ec679eac26946b1c6d3ec1474ea1a13e98896d2cf4809bd1219ff21e"} +{"index": 271772, "batch_hash": "0xfff66bcba45ce86bf1c4fbe5507a9614ba787718ed844b3a7835df5c48d8184c", "finalize_tx": "0x7e28d93bf7ff54d6dd6171656bc19cbe4b794b82b9951bc809dab3a06b3ee9c9"} +{"index": 273093, "batch_hash": "0x9d9b448df6fa10c40967757400b8a182e58d49954491b087f6e6c7cc2630c279", "finalize_tx": "0xd8bb7f7ae63c15767c8431e5732426646ca3d883f404c36aa140f58456616c09"} +{"index": 273094, "batch_hash": "0xf81502f07cca9e009781f5b4d42db7e61ee38c43d8941fbf9ef2b667cfbd0f10", "finalize_tx": "0xcc3811e226d48d101c0fd4a1ce725f6dbd3d2e68655a686d395a3946c3307f70"} +{"index": 273095, "batch_hash": "0x0e11423f929e64b22650fef3c8b1a0bae200262ffbf1006a48da203f46195d51", "finalize_tx": "0x5e6908bd4960f6752f0e723a625a971d862ebd8f3ff1e53e8bc157371cd4fc7c"} +{"index": 273096, "batch_hash": "0x7b3d89a1469d8fcc6a7c721bf0b078471cafcc40003cfa92f16b1b7fea042913", "finalize_tx": "0x2c4cf1efcd5c03b14b41fdf47f51ea2741afb7f9bb8cc91161e483bf2fb8ff83"} +{"index": 273097, "batch_hash": "0x8a59ea19b115c2fa74915bbf1e58375a074f17b5412157209aecf384155d6c9c", "finalize_tx": "0xee742b57fc557d1b187aa4194cc635c3e8823ba424d9c468d9a20c3ac7d977c7"} +{"index": 273098, "batch_hash": "0xeaf82f29e785df37bc41ffb787bcbf92971abf7703995e356556379c1208d84a", "finalize_tx": "0x5ba72b8ed48721afe5b16116af2a8a05eae327d5c7ed798251207759823631fc"} +{"index": 273099, "batch_hash": "0x74835384941cb4dac0b2c76b748c775605b986f5a30ad97f324f28adcff8c41a", "finalize_tx": "0xd3a33abba6e253ca5cde52acf7d9979903876cd4c5b50dc1f7ca6381ded5fe7a"} +{"index": 273100, "batch_hash": "0x8bd6e80873324052a32e3ccd42191ce1f809c6393080991ca507598359862c61", "finalize_tx": "0x6a17ce4659cad3e7b0e9063b0d9090d6695bb8eb3b348fba7ef2d157b7a334e5"} +{"index": 273101, "batch_hash": "0x1537e99f47e096db6d3def633006f0b8b4a2f8458ab7b375f8073758a299f82d", "finalize_tx": "0xb400e7e0e34d6b74e91ac89fd8f8d6b1cb7caac3b4e7814862b3d73cda8571eb"} +{"index": 273102, "batch_hash": "0xefe3d32159ad01759248e966527ee432e59d26dec47a63cccf77597ef76c8212", "finalize_tx": "0xf22a39a41508e283cd2a45ac235ebcdc09a0749667c64deefb91c226dc5aa681"} +{"index": 273903, "batch_hash": "0x826842ec7fb66aee07634249893eb6a45ffc2510a1acdcd5b7c4c4fdfcfad938", "finalize_tx": "0xf3d3026c1694704a86062f58267df4ccd7a6b9cd2d2ad642aa0e6bd6857e0e12"} +{"index": 273904, "batch_hash": "0x578ddf3d293286ac3e297790c9ab88b14665515af15ad02aaaca2e5937ecbf7b", "finalize_tx": "0xbf8c5fd055883a7e42f76d3e1769de2d99fc7957309b69d2bde74831189c58d0"} +{"index": 273905, "batch_hash": "0x4dd2184e22d83b400820be57a0bc7dff6f410ee099cd3473f04a76afb857cac6", "finalize_tx": "0xc60eb3225c894f7a0f7e7f27e516e06bd23dc5125c4b181dffbf57c107409ecd"} +{"index": 273906, "batch_hash": "0x0649cc966d704d27adb6f8f1e13e0b477f86288d045f8c371c52844d23cf0ed8", "finalize_tx": "0xf88348f252e2b59ede637788da3be01a1f9392abec2d5e6e35d13f85957c6297"} +{"index": 273907, "batch_hash": "0x772a6ba30b318e0ff095b688d6b99e87f929e2080add7f320e308fa24b9dcd3b", "finalize_tx": "0x50b86179223fe8e477c4bf877e78834dd05315173716b8cce6a5b85b383c052e"} +{"index": 273908, "batch_hash": "0xfd04bf72a7c296ce224f93fdd756bbc1d6fb094cb65a731098ca2af51ec833ce", "finalize_tx": "0x156f9f1d95582cb7d530ce63fd24411fa5bed4b331d9831a52b82660054bdaa2"} +{"index": 273909, "batch_hash": "0xe67d91760e928c633c8ffdf911b204b86d1e54d3384f2383e313a5417214646f", "finalize_tx": "0xd7d66456a67249a7512324908d127becaf675683bc6a8affc7b2bea18d4cb562"} +{"index": 273910, "batch_hash": "0x95e838a07600280114d853a13a25a411cee9949f04b099e9dd6ec3ae024fa745", "finalize_tx": "0x752ca5f3e31b37a0bef8a37ce3b7ebae1282e010dc6f1ac59cc606311506cefe"} +{"index": 273911, "batch_hash": "0xca53cdc2971e875969c4dda49e95f1dab0188d228c3f0a878beaf9ea4c7456fa", "finalize_tx": "0x7f47a13bb7d91976712c8873dc5c82143ecec5b44c438fd8d90b10073b670aaf"} +{"index": 273912, "batch_hash": "0x7559ced94696e92c3ff1252f41e128ddaff9b915156492abd8c3dafab41a0eed", "finalize_tx": "0x42b14b31d77dd8757ce677f62609d4f66148316990e219a9b07becd454c438f1"} +{"index": 274315, "batch_hash": "0x8d4c09a28965f304a86c8fb2916f749f538cc88ce455fb49b650fb7f019cadba", "finalize_tx": "0x65c79aa26aec6d6be7c20de93b2d96ee4fec06477fef6b62b023a28e6cead78d"} +{"index": 274455, "batch_hash": "0x4e17bc355b1546cbe2d37833c26c3b883afdecb5fc4af31a4d4d34f762dd9a07", "finalize_tx": "0x4d6bd32f8a0e5281f5d788d771fba9f6cbe251627551eba9164a3c59687b9a5a"} \ No newline at end of file diff --git a/hardhat-test/testdata/plonk-verifier/v0.12.0-rc.2_pi.data b/hardhat-test/testdata/plonk-verifier/v0.12.0-rc.2_pi.data new file mode 100644 index 0000000000000000000000000000000000000000..a30abdd6158eefd31fc19a250b47d131ec77da20 GIT binary patch literal 416 zcmd;V`LonTY?VOri?%v9iwAEzyZ5fh%T(YI`LUg?K6TqK1~j19zk~H{n*WO8GB(pY zm69fC(hPiw;*P$L?Arqv7xT}mWq*S%zk1Eub?eauN#Luns+ynfTr@FdWtHo%C+j@W zwZIu5$6cSI_VHU%u}P05F-V_~PlDGrQ4CWn4@Y0I(21+z}p{ z=eNmGV(I{yn7GEhq_X(K2&Ue5-`g7_Y!RrJ#Lv`If9%G3coppUtwEVOfOUP8SX^4a zlh?x3E4J1OpK@Y3!*xC}^`5Rc)lHZ}p240OQwQ)Go1i$?1EOqtnR@*SH$8i^gC)n7D^m#1R=ZsIF!@KhyiyFUVngzt;=u8i^MnE) zy%g$9fC~wNmChzEL@?gd)4dIeC%b%NjpbV)p>hWOm~5#r&q25Q(+}MnMXC(gng$mXv*Yc1 z1_ZAqV=)+ZLb;ih?`rFh?bxg$%YC*Nq=m8)Iw)@vCDb?P+PGT)hNtQLhkE`~c$(ZxcKN#_5Z_&owd+Ye?+m z4NkJ5*cYu$=}&Q9_2#k1R0jK?1ARk^mO%Ic8CN(bpUvr5__?(*q}QQE{ge9?gwkFt z{qZsGeErn7xJFCzyE}#5FXboY0OEi~pU5n|JhPU7*I+SGT}q9}!5mvb`P+7pS` z!IdSWV==cgN7uj}Rz{PyQl?d_e>Z!W<%JSmykvT_aUUQvAmuP-whGBe{}c2U(T%e_ zr!n8}zb)|J#5}Nw7;%d^q~LdvOHk`GEYPL4N`o#+sv-=pP%| z=^c8gh{QvH!;zd0gI773OJd(AW&^jBJ}nV|B|It_M7Kdswnvw;_sbJqHo zf$*B}+=&S)D9&nggm?W+D;|zOV?ykQ!jIAQ=nINw65tKd+XpxBI{+817CF`nH zbuybs;LL)rOc4oBCgT$@ak1Ye?%ujzK~fm|FJ8{G*W65WL;3fY7Wyj^5X|>NEnxpO zE=SX6JDP-C+kme_gX56w1cARrty5~Cx znhx@=saDWa=&lD}{IXs4@Wc-ItLur2^;))vPCCjgyESHHaKjG?8p0j#kU=p9rs3^ibgE;t+Gdv9 zqtHzrq+L)u>}Kv?$~&l!Up4%!kD6Yo=IS82rjUz;#SxwIZ#(hpp42xwQrZa0@yHe3 z&1m$~y5+Ju*ujEyUFE&W?doNjCr+bkvZz&4ajciaLl^fMFx0{pkRO?wMUH2O zWT>EJZ@}cC0{X0YH}UPk8-zyj*1UTq?Q04_hr$&=omH^nf=n~TChBjHow@z~OkFT-h~(H$QIp#!F83t5 zGAv9=>5CEW=Ll>h@9x-^T0Jb|){U2hNeyA!kp^B@)a?!Qm=rySag>YBOas0#{{XT$ BNZfi5rqVUu9_c1tJCTifcwwf}!a Jmq+6>0svp|QQ!ao literal 0 HcmV?d00001 diff --git a/hardhat-test/testdata/plonk-verifier/v0.12.0-rc.3_proof.data b/hardhat-test/testdata/plonk-verifier/v0.12.0-rc.3_proof.data new file mode 100644 index 0000000000000000000000000000000000000000..c62b0bae673741e4a2248bafa451d2fe1a815313 GIT binary patch literal 2144 zcma*lX*?4Q90%~3qcBH~1;YswKT; z>UBbk=qAL0@=#M6Q=dfY#22g7J?+b3XX*f;ex;R>`;Q+k&eKyua~4do=jr z>{dP95gytGKguy(@w@`UM^i|b6Emj{GTAMNH2tSxhL#>91Y@LI{M0LU1q;9)8&n{( zJL=dS?%H1yS7J%YJ9q1pyagO1VFSzoh7x@ASl3NF{08L?3wdx7@l6jeO=HARhN`*5kV!J2flx!uIRzf*vwT7 zn_Dw$%MRHW99y@bFE*R7*q*QB)$d1R)OW4?QLC^Dk7Gip8+}V2{AtvJLo3PRbyQoK zF{W2}3csB|2|LFT_bQqb7vp@f-xYM&R(Mh9J6I)PsgxG~F|0U)DsL*x3S}Tw-KtQjkl|%P*JL}vUp$C%kp6l5Dp*>r6KGpKQ!|s4wo7%q< ze1+xc1;_MB%E8X>g0Aik658pX&)zu9YV34jw1Lt>~x%!l9;4o8jK#G z1oi1(0`dKYl8+s@B*$?p{_sN~bBR5B75PAuX-r%S~X`aoM^{QlTL?_CcQw zwW=t0PUqRq7b@O&nal#tDcCPQ_k8gh>JzmjbubZrWc`l`-i#16vJTNKp;iQ5&NR%> zGJpI1mQk1prB-~d!VV`{WlM3ppMC6nx+mBnf zT`luprK_Kc%l4|ut;Vfq?9Om6)V%joBA#kz0|Cnh z0ogXr^`Pwltw@LHCk+OAd{5bqI2JyI9^fi|tJqW~(qLcvXu?-ztNvV@85$T&2)U_Z zD&vl}p3dRK1ncugBwM;^xJXOqa&c-(>qdKgxE~Sq7StR5O!TWW5x1>GgN5l*8|h+Q z!X40}*7eoCgkLUrSyH@it`)L+#I3(BX70^$&Ncgo>UJc2)w;m5gWM2RafGZZ23$Fw z7l^4$RpxB+nVG8<7@i~$s_#eqgL?9e`CI<)mPNk!hPN@@I~Qy7J@TM`=gKbpu$>Q= zd#XXZoQjHHGm)L8guZ9Xj(@9Y1Pi)A~Z}g?9gAoY}xVW;-pbzf9jrfDmf^!p(GOn3~ z>L@iuN~0Q<@KGP)z~-;h`mr0}tH_g}%|EUvJoeYoALHX>Dq|z%y3Hwis9^0Q+`c zLq#|9rAXI~^CSET_q|J5`Sr_{yJ`ujiG5BQMLR(Jq1kjpOO$A8LlRd^86uV8WlB9z zp<8t*D+>mJ3UFYEKI|rRCSvr9OyqWkg2TwgIkYN9G^0D;g~g5QUD%?ZFOY$6^?6rq zdi4168wvah5*rNvE2Rxq3l2q?&3##I-6Cm|(xSz1^?x+rESo#cW(hOSh*Z$wzW{zx AH2?qr literal 0 HcmV?d00001 diff --git a/hardhat-test/testdata/plonk_verifier_0.9.8_pi.data b/hardhat-test/testdata/plonk-verifier/v0.9.8_pi.data similarity index 100% rename from hardhat-test/testdata/plonk_verifier_0.9.8_pi.data rename to hardhat-test/testdata/plonk-verifier/v0.9.8_pi.data diff --git a/hardhat-test/testdata/plonk_verifier_0.9.8_proof.data b/hardhat-test/testdata/plonk-verifier/v0.9.8_proof.data similarity index 100% rename from hardhat-test/testdata/plonk_verifier_0.9.8_proof.data rename to hardhat-test/testdata/plonk-verifier/v0.9.8_proof.data diff --git a/package.json b/package.json index 34152675..7a535921 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "eslint-plugin-promise": "^6.1.1", "ethereum-waffle": "^3.0.0", "ethers": "^6.11.1", - "hardhat": "^2.22.0", + "hardhat": "^2.22.6", "hardhat-gas-reporter": "^1.0.4", "husky": "^8.0.1", "lint-staged": "^13.0.3", diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index ab72a7ed..028aa99e 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -32,6 +32,7 @@ abstract contract Configuration is Script { uint256 internal MAX_TX_IN_CHUNK; uint256 internal MAX_BLOCK_IN_CHUNK; uint256 internal MAX_CHUNK_IN_BATCH; + uint256 internal MAX_BATCH_IN_BUNDLE; uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; uint256 internal L1_CONTRACT_DEPLOYMENT_BLOCK; @@ -108,6 +109,7 @@ abstract contract Configuration is Script { MAX_TX_IN_CHUNK = cfg.readUint(".general.MAX_TX_IN_CHUNK"); MAX_BLOCK_IN_CHUNK = cfg.readUint(".general.MAX_BLOCK_IN_CHUNK"); MAX_CHUNK_IN_BATCH = cfg.readUint(".general.MAX_CHUNK_IN_BATCH"); + MAX_BATCH_IN_BUNDLE = cfg.readUint(".general.MAX_BATCH_IN_BUNDLE"); MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".general.MAX_L1_MESSAGE_GAS_LIMIT"); L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index fac74df2..9ba03e6d 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1231,11 +1231,14 @@ contract DeployScroll is DeterminsticDeployment { MAX_L1_MESSAGE_GAS_LIMIT ); } - if ( - getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 0 || getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 1 - ) { + + if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) < 2) { L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); } + + if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) < 3) { + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV3(); + } } function initializeL1ScrollMessenger() private { diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 68d9f4b4..8e4f3327 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -37,8 +37,6 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(L1_RPC_ENDPOINT, ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.sender_config.endpoint"); // contracts - vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.l1_message_queue_address"); - vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.scroll_chain_address"); vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.l2_message_queue_address"); vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.rollup_contract_address"); @@ -53,10 +51,12 @@ contract GenerateRollupConfig is DeployScroll { // other vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_ENABLED), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.enable_test_env_bypass_features"); vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_batch_without_proof_timeout_sec"); + vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_bundle_without_proof_timeout_sec"); vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); vm.writeJson(vm.toString(MAX_CHUNK_IN_BATCH), ROLLUP_CONFIG_PATH, ".l2_config.batch_proposer_config.max_chunk_num_per_batch"); + vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), ROLLUP_CONFIG_PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); vm.writeJson(SCROLL_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); } diff --git a/src/L1/L1ScrollMessenger.sol b/src/L1/L1ScrollMessenger.sol index 498757ab..47824ca2 100644 --- a/src/L1/L1ScrollMessenger.sol +++ b/src/L1/L1ScrollMessenger.sol @@ -26,6 +26,13 @@ import {IMessageDropCallback} from "../libraries/callbacks/IMessageDropCallback. /// /// @dev All deposited Ether (including `WETH` deposited throng `L1WETHGateway`) will locked in /// this contract. +/// +/// The messages sent through this contract may failed due to out of gas or some contract errors layer 2. In such case, +/// users can initiate `replayMessage` to retry this message in layer 2. If it is because out of gas, users can provide +/// a larger `gasLimit`. Users need also to pay the cross domain relay fee again. +/// +/// The messages sent through this contract may possibly be skipped in layer 2 due to circuit capacity overflow. +/// In such case, users can initiate `dropMessage` to claim refunds. But the cross domain relay fee won't be refunded. contract L1ScrollMessenger is ScrollMessengerBase, IL1ScrollMessenger { /************* * Constants * diff --git a/src/L1/rollup/IL1MessageQueue.sol b/src/L1/rollup/IL1MessageQueue.sol index 210f2c8d..422e11bc 100644 --- a/src/L1/rollup/IL1MessageQueue.sol +++ b/src/L1/rollup/IL1MessageQueue.sol @@ -29,6 +29,14 @@ interface IL1MessageQueue { /// @param skippedBitmap A bitmap indicates whether a message is skipped. event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap); + /// @notice Emitted when dequeued transactions are reset. + /// @param startIndex The start index of messages. + event ResetDequeuedTransaction(uint256 startIndex); + + /// @notice Emitted when some L1 => L2 transactions are finalized in L1. + /// @param finalizedIndex The last index of messages finalized. + event FinalizedDequeuedTransaction(uint256 finalizedIndex); + /// @notice Emitted when a message is dropped from L1. /// @param index The index of message dropped. event DropTransaction(uint256 index); @@ -57,6 +65,10 @@ interface IL1MessageQueue { /// @notice The start index of all pending inclusion messages. function pendingQueueIndex() external view returns (uint256); + /// @notice The start index of all unfinalized messages. + /// @dev All messages from `nextUnfinalizedQueueIndex` to `pendingQueueIndex-1` are committed but not finalized. + function nextUnfinalizedQueueIndex() external view returns (uint256); + /// @notice Return the index of next appended message. /// @dev Also the total number of appended messages. function nextCrossDomainMessageIndex() external view returns (uint256); @@ -126,7 +138,7 @@ interface IL1MessageQueue { bytes calldata data ) external; - /// @notice Pop finalized messages from queue. + /// @notice Pop messages from queue. /// /// @dev We can pop at most 256 messages each time. And if the message is not skipped, /// the corresponding entry will be cleared. @@ -140,6 +152,17 @@ interface IL1MessageQueue { uint256 skippedBitmap ) external; + /// @notice Reset status of popped messages. + /// + /// @dev We can only reset unfinalized popped messages. + /// + /// @param startIndex The start index to reset. + function resetPoppedCrossDomainMessage(uint256 startIndex) external; + + /// @notice Finalize status of popped messages. + /// @param newFinalizedQueueIndexPlusOne The index of message to finalize plus one. + function finalizePoppedCrossDomainMessage(uint256 newFinalizedQueueIndexPlusOne) external; + /// @notice Drop a skipped message from the queue. function dropCrossDomainMessage(uint256 index) external; } diff --git a/src/L1/rollup/IScrollChain.sol b/src/L1/rollup/IScrollChain.sol index 7af98457..637b0067 100644 --- a/src/L1/rollup/IScrollChain.sol +++ b/src/L1/rollup/IScrollChain.sol @@ -81,26 +81,32 @@ interface IScrollChain { bytes calldata skippedL1MessageBitmap ) external; - /// @notice Revert a pending batch. - /// @dev one can only revert unfinalized batches. - /// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch`. - /// @param count The number of subsequent batches to revert, including current batch. - function revertBatch(bytes calldata batchHeader, uint256 count) external; - - /// @notice Finalize a committed batch on layer 1. - /// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch. - /// @param prevStateRoot The state root of parent batch. - /// @param postStateRoot The state root of current batch. - /// @param withdrawRoot The withdraw trie root of current batch. - /// @param aggrProof The aggregation proof for current batch. - function finalizeBatchWithProof( - bytes calldata batchHeader, - bytes32 prevStateRoot, - bytes32 postStateRoot, - bytes32 withdrawRoot, - bytes calldata aggrProof + /// @notice Commit a batch of transactions on layer 1 with blob data proof. + /// + /// @dev Memory layout of `blobDataProof`: + /// | z | y | kzg_commitment | kzg_proof | + /// |---------|---------|----------------|-----------| + /// | bytes32 | bytes32 | bytes48 | bytes48 | + /// + /// @param version The version of current batch. + /// @param parentBatchHeader The header of parent batch, see the comments of `BatchHeaderV0Codec`. + /// @param chunks The list of encoded chunks, see the comments of `ChunkCodec`. + /// @param skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. + /// @param blobDataProof The proof for blob data. + function commitBatchWithBlobProof( + uint8 version, + bytes calldata parentBatchHeader, + bytes[] memory chunks, + bytes calldata skippedL1MessageBitmap, + bytes calldata blobDataProof ) external; + /// @notice Revert pending batches. + /// @dev one can only revert unfinalized batches. + /// @param firstBatchHeader The header of first batch to revert, see the encoding in comments of `commitBatch`. + /// @param lastBatchHeader The header of last batch to revert, see the encoding in comments of `commitBatch`. + function revertBatch(bytes calldata firstBatchHeader, bytes calldata lastBatchHeader) external; + /// @notice Finalize a committed batch (with blob) on layer 1. /// /// @dev Memory layout of `blobDataProof`: @@ -122,4 +128,16 @@ interface IScrollChain { bytes calldata blobDataProof, bytes calldata aggrProof ) external; + + /// @notice Finalize a list of committed batches (i.e. bundle) on layer 1. + /// @param batchHeader The header of last batch in current bundle, see the encoding in comments of `commitBatch. + /// @param postStateRoot The state root after current bundle. + /// @param withdrawRoot The withdraw trie root after current batch. + /// @param aggrProof The aggregation proof for current bundle. + function finalizeBundleWithProof( + bytes calldata batchHeader, + bytes32 postStateRoot, + bytes32 withdrawRoot, + bytes calldata aggrProof + ) external; } diff --git a/src/L1/rollup/L1MessageQueue.sol b/src/L1/rollup/L1MessageQueue.sol index 6ffee522..9f015102 100644 --- a/src/L1/rollup/L1MessageQueue.sol +++ b/src/L1/rollup/L1MessageQueue.sol @@ -64,8 +64,11 @@ contract L1MessageQueue is OwnableUpgradeable, IL1MessageQueue { /// @dev The bitmap for skipped messages, where `skippedMessageBitmap[i]` keeps the bits from `[i*256, (i+1)*256)`. mapping(uint256 => uint256) private skippedMessageBitmap; + /// @inheritdoc IL1MessageQueue + uint256 public nextUnfinalizedQueueIndex; + /// @dev The storage slots for future usage. - uint256[41] private __gap; + uint256[40] private __gap; /********************** * Function Modifiers * @@ -76,6 +79,11 @@ contract L1MessageQueue is OwnableUpgradeable, IL1MessageQueue { _; } + modifier onlyScrollChain() { + require(_msgSender() == scrollChain, "Only callable by the ScrollChain"); + _; + } + /*************** * Constructor * ***************/ @@ -343,9 +351,7 @@ contract L1MessageQueue is OwnableUpgradeable, IL1MessageQueue { uint256 _startIndex, uint256 _count, uint256 _skippedBitmap - ) external { - require(_msgSender() == scrollChain, "Only callable by the ScrollChain"); - + ) external override onlyScrollChain { require(_count <= 256, "pop too many messages"); require(pendingQueueIndex == _startIndex, "start index mismatch"); @@ -367,9 +373,53 @@ contract L1MessageQueue is OwnableUpgradeable, IL1MessageQueue { emit DequeueTransaction(_startIndex, _count, _skippedBitmap); } + /// @inheritdoc IL1MessageQueue + /// @dev Caller should make sure `_startIndex < pendingQueueIndex` to reduce unnecessary contract call. + function resetPoppedCrossDomainMessage(uint256 _startIndex) external override onlyScrollChain { + uint256 cachedPendingQueueIndex = pendingQueueIndex; + if (_startIndex == cachedPendingQueueIndex) return; + + require(_startIndex >= nextUnfinalizedQueueIndex, "reset finalized messages"); + require(_startIndex < cachedPendingQueueIndex, "reset pending messages"); + + unchecked { + uint256 count = cachedPendingQueueIndex - _startIndex; + uint256 bucket = _startIndex >> 8; + uint256 offset = _startIndex & 0xff; + skippedMessageBitmap[bucket] &= (1 << offset) - 1; + uint256 numResetMessages = 256 - offset; + while (numResetMessages < count) { + bucket += 1; + uint256 bitmap = skippedMessageBitmap[bucket]; + if (bitmap > 0) skippedMessageBitmap[bucket] = 0; + numResetMessages += 256; + } + } + + pendingQueueIndex = _startIndex; + emit ResetDequeuedTransaction(_startIndex); + } + + /// @inheritdoc IL1MessageQueue + function finalizePoppedCrossDomainMessage(uint256 _newFinalizedQueueIndexPlusOne) + external + override + onlyScrollChain + { + uint256 cachedFinalizedQueueIndexPlusOne = nextUnfinalizedQueueIndex; + if (_newFinalizedQueueIndexPlusOne == cachedFinalizedQueueIndexPlusOne) return; + require(_newFinalizedQueueIndexPlusOne > cachedFinalizedQueueIndexPlusOne, "finalized index too small"); + require(_newFinalizedQueueIndexPlusOne <= pendingQueueIndex, "finalized index too large"); + + nextUnfinalizedQueueIndex = _newFinalizedQueueIndexPlusOne; + unchecked { + emit FinalizedDequeuedTransaction(_newFinalizedQueueIndexPlusOne - 1); + } + } + /// @inheritdoc IL1MessageQueue function dropCrossDomainMessage(uint256 _index) external onlyMessenger { - require(_index < pendingQueueIndex, "cannot drop pending message"); + require(_index < nextUnfinalizedQueueIndex, "cannot drop pending message"); require(_isMessageSkipped(_index), "drop non-skipped message"); require(!droppedMessageBitmap.get(_index), "message already dropped"); diff --git a/src/L1/rollup/L1MessageQueueWithGasPriceOracle.sol b/src/L1/rollup/L1MessageQueueWithGasPriceOracle.sol index 0be3acff..dbe49512 100644 --- a/src/L1/rollup/L1MessageQueueWithGasPriceOracle.sol +++ b/src/L1/rollup/L1MessageQueueWithGasPriceOracle.sol @@ -51,6 +51,10 @@ contract L1MessageQueueWithGasPriceOracle is L1MessageQueue, IL1MessageQueueWith whitelistChecker = IL2GasPriceOracle(gasOracle).whitelist(); } + function initializeV3() external reinitializer(3) { + nextUnfinalizedQueueIndex = pendingQueueIndex; + } + /************************* * Public View Functions * *************************/ diff --git a/src/L1/rollup/MultipleVersionRollupVerifier.sol b/src/L1/rollup/MultipleVersionRollupVerifier.sol index eba5e148..9b0ac120 100644 --- a/src/L1/rollup/MultipleVersionRollupVerifier.sol +++ b/src/L1/rollup/MultipleVersionRollupVerifier.sol @@ -5,7 +5,7 @@ pragma solidity =0.8.24; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IRollupVerifier} from "../../libraries/verifier/IRollupVerifier.sol"; -import {IZkEvmVerifier} from "../../libraries/verifier/IZkEvmVerifier.sol"; +import {IZkEvmVerifierV1, IZkEvmVerifierV2} from "../../libraries/verifier/IZkEvmVerifier.sol"; /// @title MultipleVersionRollupVerifier /// @notice Verifies aggregate zk proofs using the appropriate verifier. @@ -111,7 +111,7 @@ contract MultipleVersionRollupVerifier is IRollupVerifier, Ownable { ) external view override { address _verifier = getVerifier(0, _batchIndex); - IZkEvmVerifier(_verifier).verify(_aggrProof, _publicInputHash); + IZkEvmVerifierV1(_verifier).verify(_aggrProof, _publicInputHash); } /// @inheritdoc IRollupVerifier @@ -123,7 +123,19 @@ contract MultipleVersionRollupVerifier is IRollupVerifier, Ownable { ) external view override { address _verifier = getVerifier(_version, _batchIndex); - IZkEvmVerifier(_verifier).verify(_aggrProof, _publicInputHash); + IZkEvmVerifierV1(_verifier).verify(_aggrProof, _publicInputHash); + } + + /// @inheritdoc IRollupVerifier + function verifyBundleProof( + uint256 _version, + uint256 _batchIndex, + bytes calldata _bundleProof, + bytes calldata _publicInput + ) external view override { + address _verifier = getVerifier(_version, _batchIndex); + + IZkEvmVerifierV2(_verifier).verify(_bundleProof, _publicInput); } /************************ diff --git a/src/L1/rollup/ScrollChain.sol b/src/L1/rollup/ScrollChain.sol index 20e08c20..0cf493dd 100644 --- a/src/L1/rollup/ScrollChain.sol +++ b/src/L1/rollup/ScrollChain.sol @@ -9,6 +9,7 @@ import {IL1MessageQueue} from "./IL1MessageQueue.sol"; import {IScrollChain} from "./IScrollChain.sol"; import {BatchHeaderV0Codec} from "../../libraries/codec/BatchHeaderV0Codec.sol"; import {BatchHeaderV1Codec} from "../../libraries/codec/BatchHeaderV1Codec.sol"; +import {BatchHeaderV3Codec} from "../../libraries/codec/BatchHeaderV3Codec.sol"; import {ChunkCodecV0} from "../../libraries/codec/ChunkCodecV0.sol"; import {ChunkCodecV1} from "../../libraries/codec/ChunkCodecV1.sol"; import {IRollupVerifier} from "../../libraries/verifier/IRollupVerifier.sol"; @@ -45,7 +46,7 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { error ErrorCallerIsNotSequencer(); /// @dev Thrown when the transaction has multiple blobs. - error ErrorFoundMultipleBlob(); + error ErrorFoundMultipleBlobs(); /// @dev Thrown when some fields are not zero in genesis batch. error ErrorGenesisBatchHasNonZeroField(); @@ -68,12 +69,12 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { /// @dev Thrown when the batch index is incorrect. error ErrorIncorrectBatchIndex(); + /// @dev Thrown when the batch version is incorrect. + error ErrorIncorrectBatchVersion(); + /// @dev Thrown when the bitmap length is incorrect. error ErrorIncorrectBitmapLength(); - /// @dev Thrown when the previous state root doesn't match stored one. - error ErrorIncorrectPreviousStateRoot(); - /// @dev Thrown when the last message is skipped. error ErrorLastL1MessageSkipped(); @@ -83,9 +84,6 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { /// @dev Thrown when the number of transactions is less than number of L1 message in one block. error ErrorNumTxsLessThanNumL1Msgs(); - /// @dev Thrown when the given previous state is zero. - error ErrorPreviousStateRootIsZero(); - /// @dev Thrown when the number of batches to revert is zero. error ErrorRevertZeroBatches(); @@ -270,23 +268,19 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { bytes[] memory _chunks, bytes calldata _skippedL1MessageBitmap ) external override OnlySequencer whenNotPaused { - // check whether the batch is empty - if (_chunks.length == 0) revert ErrorBatchIsEmpty(); - - (, bytes32 _parentBatchHash, uint256 _batchIndex, uint256 _totalL1MessagesPoppedOverall) = _loadBatchHeader( - _parentBatchHeader + (bytes32 _parentBatchHash, uint256 _batchIndex, uint256 _totalL1MessagesPoppedOverall) = _beforeCommitBatch( + _parentBatchHeader, + _chunks ); - unchecked { - _batchIndex += 1; - } - if (committedBatches[_batchIndex] != 0) revert ErrorBatchIsAlreadyCommitted(); bytes32 _batchHash; uint256 batchPtr; bytes32 _dataHash; uint256 _totalL1MessagesPoppedInBatch; - if (_version == 0) { - (_dataHash, _totalL1MessagesPoppedInBatch) = _commitChunksV0( + if (1 <= _version && _version <= 2) { + // versions 1 and 2 both use ChunkCodecV1 and BatchHeaderV1Codec, + // but they use different blob encoding and different verifiers. + (_dataHash, _totalL1MessagesPoppedInBatch) = _commitChunksV1( _totalL1MessagesPoppedOverall, _chunks, _skippedL1MessageBitmap @@ -295,90 +289,157 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { batchPtr := mload(0x40) _totalL1MessagesPoppedOverall := add(_totalL1MessagesPoppedOverall, _totalL1MessagesPoppedInBatch) } + // store entries, the order matters - BatchHeaderV0Codec.storeVersion(batchPtr, 0); + // Some are using `BatchHeaderV0Codec`, see comments of `BatchHeaderV1Codec`. + BatchHeaderV0Codec.storeVersion(batchPtr, _version); BatchHeaderV0Codec.storeBatchIndex(batchPtr, _batchIndex); BatchHeaderV0Codec.storeL1MessagePopped(batchPtr, _totalL1MessagesPoppedInBatch); BatchHeaderV0Codec.storeTotalL1MessagePopped(batchPtr, _totalL1MessagesPoppedOverall); BatchHeaderV0Codec.storeDataHash(batchPtr, _dataHash); - BatchHeaderV0Codec.storeParentBatchHash(batchPtr, _parentBatchHash); - BatchHeaderV0Codec.storeSkippedBitmap(batchPtr, _skippedL1MessageBitmap); - // compute batch hash - _batchHash = BatchHeaderV0Codec.computeBatchHash( - batchPtr, - BatchHeaderV0Codec.BATCH_HEADER_FIXED_LENGTH + _skippedL1MessageBitmap.length - ); - } else if (_version >= 1) { - // versions 1 and 2 both use ChunkCodecV1 and BatchHeaderV1Codec, - // but they use different blob encoding and different verifiers. - - bytes32 blobVersionedHash; - (blobVersionedHash, _dataHash, _totalL1MessagesPoppedInBatch) = _commitChunksV1( - _totalL1MessagesPoppedOverall, - _chunks, - _skippedL1MessageBitmap - ); - assembly { - batchPtr := mload(0x40) - _totalL1MessagesPoppedOverall := add(_totalL1MessagesPoppedOverall, _totalL1MessagesPoppedInBatch) - } - // store entries, the order matters - BatchHeaderV1Codec.storeVersion(batchPtr, _version); - BatchHeaderV1Codec.storeBatchIndex(batchPtr, _batchIndex); - BatchHeaderV1Codec.storeL1MessagePopped(batchPtr, _totalL1MessagesPoppedInBatch); - BatchHeaderV1Codec.storeTotalL1MessagePopped(batchPtr, _totalL1MessagesPoppedOverall); - BatchHeaderV1Codec.storeDataHash(batchPtr, _dataHash); - BatchHeaderV1Codec.storeBlobVersionedHash(batchPtr, blobVersionedHash); + BatchHeaderV1Codec.storeBlobVersionedHash(batchPtr, _getBlobVersionedHash()); BatchHeaderV1Codec.storeParentBatchHash(batchPtr, _parentBatchHash); BatchHeaderV1Codec.storeSkippedBitmap(batchPtr, _skippedL1MessageBitmap); - // compute batch hash - _batchHash = BatchHeaderV1Codec.computeBatchHash( + // compute batch hash, V1 and V2 has same code as V0 + _batchHash = BatchHeaderV0Codec.computeBatchHash( batchPtr, BatchHeaderV1Codec.BATCH_HEADER_FIXED_LENGTH + _skippedL1MessageBitmap.length ); + } else { + // we don't allow v0 and other versions + revert ErrorIncorrectBatchVersion(); } - // check the length of bitmap + // verify skippedL1MessageBitmap + _checkSkippedL1MessageBitmap( + _totalL1MessagesPoppedOverall, + _totalL1MessagesPoppedInBatch, + _skippedL1MessageBitmap, + false + ); + + _afterCommitBatch(_batchIndex, _batchHash); + } + + /// @inheritdoc IScrollChain + /// + /// @dev This function will revert unless all V0/V1/V2 batches are finalized. This is because we start to + /// pop L1 messages in `commitBatchWithBlobProof` but not in `commitBatch`. We also introduce `finalizedQueueIndex` + /// in `L1MessageQueue`. If one of V0/V1/V2 batches not finalized, `L1MessageQueue.pendingQueueIndex` will not + /// match `parentBatchHeader.totalL1MessagePopped` and thus revert. + function commitBatchWithBlobProof( + uint8 _version, + bytes calldata _parentBatchHeader, + bytes[] memory _chunks, + bytes calldata _skippedL1MessageBitmap, + bytes calldata _blobDataProof + ) external override OnlySequencer whenNotPaused { + if (_version <= 2) { + revert ErrorIncorrectBatchVersion(); + } + + // allocate memory of batch header and store entries if necessary, the order matters + // @note why store entries if necessary, to avoid stack overflow problem. + // The codes for `version`, `batchIndex`, `l1MessagePopped`, `totalL1MessagePopped` and `dataHash` + // are the same as `BatchHeaderV0Codec`. + // The codes for `blobVersionedHash`, and `parentBatchHash` are the same as `BatchHeaderV1Codec`. + uint256 batchPtr; + assembly { + batchPtr := mload(0x40) + // This is `BatchHeaderV3Codec.BATCH_HEADER_FIXED_LENGTH`, use `193` here to reduce code + // complexity. Be careful that the length may changed in future versions. + mstore(0x40, add(batchPtr, 193)) + } + BatchHeaderV0Codec.storeVersion(batchPtr, _version); + + (bytes32 _parentBatchHash, uint256 _batchIndex, uint256 _totalL1MessagesPoppedOverall) = _beforeCommitBatch( + _parentBatchHeader, + _chunks + ); + BatchHeaderV0Codec.storeBatchIndex(batchPtr, _batchIndex); + + // versions 2 and 3 both use ChunkCodecV1 + (bytes32 _dataHash, uint256 _totalL1MessagesPoppedInBatch) = _commitChunksV1( + _totalL1MessagesPoppedOverall, + _chunks, + _skippedL1MessageBitmap + ); unchecked { - if (((_totalL1MessagesPoppedInBatch + 255) / 256) * 32 != _skippedL1MessageBitmap.length) { - revert ErrorIncorrectBitmapLength(); - } + _totalL1MessagesPoppedOverall += _totalL1MessagesPoppedInBatch; } - committedBatches[_batchIndex] = _batchHash; - emit CommitBatch(_batchIndex, _batchHash); + // verify skippedL1MessageBitmap + _checkSkippedL1MessageBitmap( + _totalL1MessagesPoppedOverall, + _totalL1MessagesPoppedInBatch, + _skippedL1MessageBitmap, + true + ); + BatchHeaderV0Codec.storeL1MessagePopped(batchPtr, _totalL1MessagesPoppedInBatch); + BatchHeaderV0Codec.storeTotalL1MessagePopped(batchPtr, _totalL1MessagesPoppedOverall); + BatchHeaderV0Codec.storeDataHash(batchPtr, _dataHash); + + // verify blob versioned hash + bytes32 _blobVersionedHash = _getBlobVersionedHash(); + _checkBlobVersionedHash(_blobVersionedHash, _blobDataProof); + BatchHeaderV1Codec.storeBlobVersionedHash(batchPtr, _blobVersionedHash); + BatchHeaderV1Codec.storeParentBatchHash(batchPtr, _parentBatchHash); + + uint256 lastBlockTimestamp; + { + bytes memory lastChunk = _chunks[_chunks.length - 1]; + lastBlockTimestamp = ChunkCodecV1.getLastBlockTimestamp(lastChunk); + } + BatchHeaderV3Codec.storeLastBlockTimestamp(batchPtr, lastBlockTimestamp); + BatchHeaderV3Codec.storeBlobDataProof(batchPtr, _blobDataProof); + + // compute batch hash, V3 has same code as V0 + bytes32 _batchHash = BatchHeaderV0Codec.computeBatchHash( + batchPtr, + BatchHeaderV3Codec.BATCH_HEADER_FIXED_LENGTH + ); + + _afterCommitBatch(_batchIndex, _batchHash); } /// @inheritdoc IScrollChain /// @dev If the owner want to revert a sequence of batches by sending multiple transactions, /// make sure to revert recent batches first. - function revertBatch(bytes calldata _batchHeader, uint256 _count) external onlyOwner { - if (_count == 0) revert ErrorRevertZeroBatches(); + function revertBatch(bytes calldata _firstBatchHeader, bytes calldata _lastBatchHeader) external onlyOwner { + ( + uint256 firstBatchPtr, + , + uint256 _firstBatchIndex, + uint256 _totalL1MessagesPoppedOverallFirstBatch + ) = _loadBatchHeader(_firstBatchHeader); + (, , uint256 _lastBatchIndex, ) = _loadBatchHeader(_lastBatchHeader); + if (_firstBatchIndex > _lastBatchIndex) revert ErrorRevertZeroBatches(); - (, bytes32 _batchHash, uint256 _batchIndex, ) = _loadBatchHeader(_batchHeader); // make sure no gap is left when reverting from the ending to the beginning. - if (committedBatches[_batchIndex + _count] != bytes32(0)) revert ErrorRevertNotStartFromEnd(); + if (committedBatches[_lastBatchIndex + 1] != bytes32(0)) revert ErrorRevertNotStartFromEnd(); // check finalization - if (_batchIndex <= lastFinalizedBatchIndex) revert ErrorRevertFinalizedBatch(); + if (_firstBatchIndex <= lastFinalizedBatchIndex) revert ErrorRevertFinalizedBatch(); - while (_count > 0) { + // actual revert + for (uint256 _batchIndex = _lastBatchIndex; _batchIndex >= _firstBatchIndex; --_batchIndex) { + bytes32 _batchHash = committedBatches[_batchIndex]; committedBatches[_batchIndex] = bytes32(0); emit RevertBatch(_batchIndex, _batchHash); + } - unchecked { - _batchIndex += 1; - _count -= 1; - } - - _batchHash = committedBatches[_batchIndex]; - if (_batchHash == bytes32(0)) break; + // `getL1MessagePopped` codes are the same in V0, V1, V2, V3 + uint256 l1MessagePoppedFirstBatch = BatchHeaderV0Codec.getL1MessagePopped(firstBatchPtr); + unchecked { + IL1MessageQueue(messageQueue).resetPoppedCrossDomainMessage( + _totalL1MessagesPoppedOverallFirstBatch - l1MessagePoppedFirstBatch + ); } } + /* This function will never be used since we already upgrade to 4844. We comment out the codes for reference. /// @inheritdoc IScrollChain - /// @dev We keep this function to upgrade to 4844 more smoothly. function finalizeBatchWithProof( bytes calldata _batchHeader, bytes32 _prevStateRoot, @@ -386,46 +447,34 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { bytes32 _withdrawRoot, bytes calldata _aggrProof ) external override OnlyProver whenNotPaused { - if (_prevStateRoot == bytes32(0)) revert ErrorPreviousStateRootIsZero(); - if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); - - // compute batch hash and verify - (uint256 memPtr, bytes32 _batchHash, uint256 _batchIndex, ) = _loadBatchHeader(_batchHeader); - bytes32 _dataHash = BatchHeaderV0Codec.getDataHash(memPtr); - - // verify previous state root. - if (finalizedStateRoots[_batchIndex - 1] != _prevStateRoot) revert ErrorIncorrectPreviousStateRoot(); - - // avoid duplicated verification - if (finalizedStateRoots[_batchIndex] != bytes32(0)) revert ErrorBatchIsAlreadyVerified(); - - // compute public input hash - bytes32 _publicInputHash = keccak256( - abi.encodePacked(layer2ChainId, _prevStateRoot, _postStateRoot, _withdrawRoot, _dataHash) + (uint256 batchPtr, bytes32 _batchHash, uint256 _batchIndex) = _beforeFinalizeBatch( + _batchHeader, + _postStateRoot ); + // compute public input hash + bytes32 _publicInputHash; + { + bytes32 _dataHash = BatchHeaderV0Codec.getDataHash(batchPtr); + bytes32 _prevStateRoot = finalizedStateRoots[_batchIndex - 1]; + _publicInputHash = keccak256( + abi.encodePacked(layer2ChainId, _prevStateRoot, _postStateRoot, _withdrawRoot, _dataHash) + ); + } // verify batch IRollupVerifier(verifier).verifyAggregateProof(0, _batchIndex, _aggrProof, _publicInputHash); - // check and update lastFinalizedBatchIndex - unchecked { - if (lastFinalizedBatchIndex + 1 != _batchIndex) revert ErrorIncorrectBatchIndex(); - lastFinalizedBatchIndex = _batchIndex; - } - - // record state root and withdraw root - finalizedStateRoots[_batchIndex] = _postStateRoot; - withdrawRoots[_batchIndex] = _withdrawRoot; - // Pop finalized and non-skipped message from L1MessageQueue. - _popL1Messages( - BatchHeaderV0Codec.getSkippedBitmapPtr(memPtr), - BatchHeaderV0Codec.getTotalL1MessagePopped(memPtr), - BatchHeaderV0Codec.getL1MessagePopped(memPtr) + uint256 _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); + _popL1MessagesMemory( + BatchHeaderV0Codec.getSkippedBitmapPtr(batchPtr), + _totalL1MessagesPoppedOverall, + BatchHeaderV0Codec.getL1MessagePopped(batchPtr) ); - emit FinalizeBatch(_batchIndex, _batchHash, _postStateRoot, _withdrawRoot); + _afterFinalizeBatch(_totalL1MessagesPoppedOverall, _batchIndex, _batchHash, _postStateRoot, _withdrawRoot); } + */ /// @inheritdoc IScrollChain /// @dev Memory layout of `_blobDataProof`: @@ -436,75 +485,100 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { /// ``` function finalizeBatchWithProof4844( bytes calldata _batchHeader, - bytes32 _prevStateRoot, + bytes32, /*_prevStateRoot*/ bytes32 _postStateRoot, bytes32 _withdrawRoot, bytes calldata _blobDataProof, bytes calldata _aggrProof ) external override OnlyProver whenNotPaused { - if (_prevStateRoot == bytes32(0)) revert ErrorPreviousStateRootIsZero(); - if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); - - // compute batch hash and verify - (uint256 memPtr, bytes32 _batchHash, uint256 _batchIndex, ) = _loadBatchHeader(_batchHeader); - bytes32 _dataHash = BatchHeaderV1Codec.getDataHash(memPtr); - bytes32 _blobVersionedHash = BatchHeaderV1Codec.getBlobVersionedHash(memPtr); + (uint256 batchPtr, bytes32 _batchHash, uint256 _batchIndex) = _beforeFinalizeBatch( + _batchHeader, + _postStateRoot + ); - // Calls the point evaluation precompile and verifies the output + // compute public input hash + bytes32 _publicInputHash; { - (bool success, bytes memory data) = POINT_EVALUATION_PRECOMPILE_ADDR.staticcall( - abi.encodePacked(_blobVersionedHash, _blobDataProof) + bytes32 _dataHash = BatchHeaderV0Codec.getDataHash(batchPtr); + bytes32 _blobVersionedHash = BatchHeaderV1Codec.getBlobVersionedHash(batchPtr); + bytes32 _prevStateRoot = finalizedStateRoots[_batchIndex - 1]; + // verify blob versioned hash + _checkBlobVersionedHash(_blobVersionedHash, _blobDataProof); + _publicInputHash = keccak256( + abi.encodePacked( + layer2ChainId, + _prevStateRoot, + _postStateRoot, + _withdrawRoot, + _dataHash, + _blobDataProof[0:64], + _blobVersionedHash + ) ); - // We verify that the point evaluation precompile call was successful by testing the latter 32 bytes of the - // response is equal to BLS_MODULUS as defined in https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile - if (!success) revert ErrorCallPointEvaluationPrecompileFailed(); - (, uint256 result) = abi.decode(data, (uint256, uint256)); - if (result != BLS_MODULUS) revert ErrorUnexpectedPointEvaluationPrecompileOutput(); } - // verify previous state root. - if (finalizedStateRoots[_batchIndex - 1] != _prevStateRoot) revert ErrorIncorrectPreviousStateRoot(); + // load version from batch header, it is always the first byte. + uint256 batchVersion = BatchHeaderV0Codec.getVersion(batchPtr); + // verify batch + IRollupVerifier(verifier).verifyAggregateProof(batchVersion, _batchIndex, _aggrProof, _publicInputHash); - // avoid duplicated verification - if (finalizedStateRoots[_batchIndex] != bytes32(0)) revert ErrorBatchIsAlreadyVerified(); + // Pop finalized and non-skipped message from L1MessageQueue. + uint256 _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); + _popL1MessagesMemory( + BatchHeaderV1Codec.getSkippedBitmapPtr(batchPtr), + _totalL1MessagesPoppedOverall, + BatchHeaderV0Codec.getL1MessagePopped(batchPtr) + ); - // compute public input hash - bytes32 _publicInputHash = keccak256( - abi.encodePacked( - layer2ChainId, - _prevStateRoot, - _postStateRoot, - _withdrawRoot, - _dataHash, - _blobDataProof[0:64], - _blobVersionedHash - ) + _afterFinalizeBatch(_totalL1MessagesPoppedOverall, _batchIndex, _batchHash, _postStateRoot, _withdrawRoot); + } + + /// @inheritdoc IScrollChain + function finalizeBundleWithProof( + bytes calldata _batchHeader, + bytes32 _postStateRoot, + bytes32 _withdrawRoot, + bytes calldata _aggrProof + ) external override OnlyProver whenNotPaused { + if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); + + // compute pending batch hash and verify + ( + uint256 batchPtr, + bytes32 _batchHash, + uint256 _batchIndex, + uint256 _totalL1MessagesPoppedOverall + ) = _loadBatchHeader(_batchHeader); + + // retrieve finalized state root and batch hash from storage to construct the public input + uint256 _finalizedBatchIndex = lastFinalizedBatchIndex; + if (_batchIndex <= _finalizedBatchIndex) revert ErrorBatchIsAlreadyVerified(); + + bytes memory _publicInput = abi.encodePacked( + layer2ChainId, + uint32(_batchIndex - _finalizedBatchIndex), // numBatches + finalizedStateRoots[_finalizedBatchIndex], // _prevStateRoot + committedBatches[_finalizedBatchIndex], // _prevBatchHash + _postStateRoot, + _batchHash, + _withdrawRoot ); // load version from batch header, it is always the first byte. - uint256 batchVersion; - assembly { - batchVersion := shr(248, calldataload(_batchHeader.offset)) - } - // verify batch - IRollupVerifier(verifier).verifyAggregateProof(batchVersion, _batchIndex, _aggrProof, _publicInputHash); + uint256 batchVersion = BatchHeaderV0Codec.getVersion(batchPtr); - // check and update lastFinalizedBatchIndex - unchecked { - if (lastFinalizedBatchIndex + 1 != _batchIndex) revert ErrorIncorrectBatchIndex(); - lastFinalizedBatchIndex = _batchIndex; - } + // verify bundle, choose the correct verifier based on the last batch + // our off-chain service will make sure all unfinalized batches have the same batch version. + IRollupVerifier(verifier).verifyBundleProof(batchVersion, _batchIndex, _aggrProof, _publicInput); - // record state root and withdraw root + // store in state + // @note we do not store intermediate finalized roots + lastFinalizedBatchIndex = _batchIndex; finalizedStateRoots[_batchIndex] = _postStateRoot; withdrawRoots[_batchIndex] = _withdrawRoot; // Pop finalized and non-skipped message from L1MessageQueue. - _popL1Messages( - BatchHeaderV1Codec.getSkippedBitmapPtr(memPtr), - BatchHeaderV1Codec.getTotalL1MessagePopped(memPtr), - BatchHeaderV1Codec.getL1MessagePopped(memPtr) - ); + _finalizePoppedL1Messages(_totalL1MessagesPoppedOverall); emit FinalizeBatch(_batchIndex, _batchHash, _postStateRoot, _withdrawRoot); } @@ -575,12 +649,151 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { * Internal Functions * **********************/ + /// @dev Internal function to do common checks before actual batch committing. + /// @param _parentBatchHeader The parent batch header in calldata. + /// @param _chunks The list of chunks in memory. + /// @return _parentBatchHash The batch hash of parent batch header. + /// @return _batchIndex The index of current batch. + /// @return _totalL1MessagesPoppedOverall The total number of L1 messages popped before current batch. + function _beforeCommitBatch(bytes calldata _parentBatchHeader, bytes[] memory _chunks) + private + view + returns ( + bytes32 _parentBatchHash, + uint256 _batchIndex, + uint256 _totalL1MessagesPoppedOverall + ) + { + // check whether the batch is empty + if (_chunks.length == 0) revert ErrorBatchIsEmpty(); + (, _parentBatchHash, _batchIndex, _totalL1MessagesPoppedOverall) = _loadBatchHeader(_parentBatchHeader); + unchecked { + _batchIndex += 1; + } + if (committedBatches[_batchIndex] != 0) revert ErrorBatchIsAlreadyCommitted(); + } + + /// @dev Internal function to do common checks after actual batch committing. + /// @param _batchIndex The index of current batch. + /// @param _batchHash The hash of current batch. + function _afterCommitBatch(uint256 _batchIndex, bytes32 _batchHash) private { + committedBatches[_batchIndex] = _batchHash; + emit CommitBatch(_batchIndex, _batchHash); + } + + /// @dev Internal function to do common checks before actual batch finalization. + /// @param _batchHeader The current batch header in calldata. + /// @param _postStateRoot The state root after current batch. + /// @return batchPtr The start memory offset of current batch in memory. + /// @return _batchHash The hash of current batch. + /// @return _batchIndex The index of current batch. + function _beforeFinalizeBatch(bytes calldata _batchHeader, bytes32 _postStateRoot) + internal + view + returns ( + uint256 batchPtr, + bytes32 _batchHash, + uint256 _batchIndex + ) + { + if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); + + // compute batch hash and verify + (batchPtr, _batchHash, _batchIndex, ) = _loadBatchHeader(_batchHeader); + + // avoid duplicated verification + if (finalizedStateRoots[_batchIndex] != bytes32(0)) revert ErrorBatchIsAlreadyVerified(); + } + + /// @dev Internal function to do common checks after actual batch finalization. + /// @param _totalL1MessagesPoppedOverall The total number of L1 messages popped after current batch. + /// @param _batchIndex The index of current batch. + /// @param _batchHash The hash of current batch. + /// @param _postStateRoot The state root after current batch. + /// @param _withdrawRoot The withdraw trie root after current batch. + function _afterFinalizeBatch( + uint256 _totalL1MessagesPoppedOverall, + uint256 _batchIndex, + bytes32 _batchHash, + bytes32 _postStateRoot, + bytes32 _withdrawRoot + ) internal { + // check and update lastFinalizedBatchIndex + unchecked { + if (lastFinalizedBatchIndex + 1 != _batchIndex) revert ErrorIncorrectBatchIndex(); + lastFinalizedBatchIndex = _batchIndex; + } + + // record state root and withdraw root + finalizedStateRoots[_batchIndex] = _postStateRoot; + withdrawRoots[_batchIndex] = _withdrawRoot; + + // Pop finalized and non-skipped message from L1MessageQueue. + _finalizePoppedL1Messages(_totalL1MessagesPoppedOverall); + + emit FinalizeBatch(_batchIndex, _batchHash, _postStateRoot, _withdrawRoot); + } + + /// @dev Internal function to check blob versioned hash. + /// @param _blobVersionedHash The blob versioned hash to check. + /// @param _blobDataProof The blob data proof used to verify the blob versioned hash. + function _checkBlobVersionedHash(bytes32 _blobVersionedHash, bytes calldata _blobDataProof) internal view { + // Calls the point evaluation precompile and verifies the output + (bool success, bytes memory data) = POINT_EVALUATION_PRECOMPILE_ADDR.staticcall( + abi.encodePacked(_blobVersionedHash, _blobDataProof) + ); + // We verify that the point evaluation precompile call was successful by testing the latter 32 bytes of the + // response is equal to BLS_MODULUS as defined in https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile + if (!success) revert ErrorCallPointEvaluationPrecompileFailed(); + (, uint256 result) = abi.decode(data, (uint256, uint256)); + if (result != BLS_MODULUS) revert ErrorUnexpectedPointEvaluationPrecompileOutput(); + } + + /// @dev Internal function to check the `SkippedL1MessageBitmap`. + /// @param _totalL1MessagesPoppedOverall The total number of L1 messages popped after current batch. + /// @param _totalL1MessagesPoppedInBatch The total number of L1 messages popped in current batch. + /// @param _skippedL1MessageBitmap The skipped L1 message bitmap in calldata. + /// @param _doPopMessage Whether we actually pop the messages from message queue. + function _checkSkippedL1MessageBitmap( + uint256 _totalL1MessagesPoppedOverall, + uint256 _totalL1MessagesPoppedInBatch, + bytes calldata _skippedL1MessageBitmap, + bool _doPopMessage + ) private { + // check the length of bitmap + unchecked { + if (((_totalL1MessagesPoppedInBatch + 255) / 256) * 32 != _skippedL1MessageBitmap.length) { + revert ErrorIncorrectBitmapLength(); + } + } + if (_doPopMessage) { + _popL1MessagesCalldata( + _skippedL1MessageBitmap, + _totalL1MessagesPoppedOverall, + _totalL1MessagesPoppedInBatch + ); + } + } + + /// @dev Internal function to get the blob versioned hash. + /// @return _blobVersionedHash The retrieved blob versioned hash. + function _getBlobVersionedHash() internal virtual returns (bytes32 _blobVersionedHash) { + bytes32 _secondBlob; + // Get blob's versioned hash + assembly { + _blobVersionedHash := blobhash(0) + _secondBlob := blobhash(1) + } + if (_blobVersionedHash == bytes32(0)) revert ErrorNoBlobFound(); + if (_secondBlob != bytes32(0)) revert ErrorFoundMultipleBlobs(); + } + /// @dev Internal function to commit chunks with version 0 /// @param _totalL1MessagesPoppedOverall The number of L1 messages popped before the list of chunks. /// @param _chunks The list of chunks to commit. /// @param _skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. /// @return _batchDataHash The computed data hash for the list of chunks. - /// @return _totalL1MessagesPoppedInBatch The total number of L1 messages poped in this batch, including skipped one. + /// @return _totalL1MessagesPoppedInBatch The total number of L1 messages popped in this batch, including skipped one. function _commitChunksV0( uint256 _totalL1MessagesPoppedOverall, bytes[] memory _chunks, @@ -625,33 +838,13 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { /// @param _totalL1MessagesPoppedOverall The number of L1 messages popped before the list of chunks. /// @param _chunks The list of chunks to commit. /// @param _skippedL1MessageBitmap The bitmap indicates whether each L1 message is skipped or not. - /// @return _blobVersionedHash The blob versioned hash for the blob carried in this transaction. /// @return _batchDataHash The computed data hash for the list of chunks. - /// @return _totalL1MessagesPoppedInBatch The total number of L1 messages poped in this batch, including skipped one. + /// @return _totalL1MessagesPoppedInBatch The total number of L1 messages popped in this batch, including skipped one. function _commitChunksV1( uint256 _totalL1MessagesPoppedOverall, bytes[] memory _chunks, bytes calldata _skippedL1MessageBitmap - ) - internal - view - returns ( - bytes32 _blobVersionedHash, - bytes32 _batchDataHash, - uint256 _totalL1MessagesPoppedInBatch - ) - { - { - bytes32 _secondBlob; - // Get blob's versioned hash - assembly { - _blobVersionedHash := blobhash(0) - _secondBlob := blobhash(1) - } - if (_blobVersionedHash == bytes32(0)) revert ErrorNoBlobFound(); - if (_secondBlob != bytes32(0)) revert ErrorFoundMultipleBlob(); - } - + ) internal view returns (bytes32 _batchDataHash, uint256 _totalL1MessagesPoppedInBatch) { uint256 _chunksLength = _chunks.length; // load `batchDataHashPtr` and reserve the memory region for chunk data hashes @@ -697,6 +890,7 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { function _loadBatchHeader(bytes calldata _batchHeader) internal view + virtual returns ( uint256 batchPtr, bytes32 _batchHash, @@ -713,18 +907,22 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { uint256 _length; if (version == 0) { (batchPtr, _length) = BatchHeaderV0Codec.loadAndValidate(_batchHeader); - _batchHash = BatchHeaderV0Codec.computeBatchHash(batchPtr, _length); - _batchIndex = BatchHeaderV0Codec.getBatchIndex(batchPtr); - } else if (version >= 1) { + } else if (version <= 2) { (batchPtr, _length) = BatchHeaderV1Codec.loadAndValidate(_batchHeader); - _batchHash = BatchHeaderV1Codec.computeBatchHash(batchPtr, _length); - _batchIndex = BatchHeaderV1Codec.getBatchIndex(batchPtr); + } else if (version >= 3) { + (batchPtr, _length) = BatchHeaderV3Codec.loadAndValidate(_batchHeader); } + + // the code for compute batch hash is the same for V0, V1, V2, V3 + // also the `_batchIndex` and `_totalL1MessagesPoppedOverall`. + _batchHash = BatchHeaderV0Codec.computeBatchHash(batchPtr, _length); + _batchIndex = BatchHeaderV0Codec.getBatchIndex(batchPtr); + _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); + // only check when genesis is imported if (committedBatches[_batchIndex] != _batchHash && finalizedStateRoots[0] != bytes32(0)) { revert ErrorIncorrectBatchHash(); } - _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); } /// @dev Internal function to commit a chunk with version 0. @@ -948,28 +1146,75 @@ contract ScrollChain is OwnableUpgradeable, PausableUpgradeable, IScrollChain { return _ptr; } - /// @dev Internal function to pop finalized l1 messages. - /// @param bitmapPtr The memory offset of `skippedL1MessageBitmap`. - /// @param totalL1MessagePopped The total number of L1 messages poped in all batches including current batch. - /// @param l1MessagePopped The number of L1 messages popped in current batch. + /// @param totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. + function _finalizePoppedL1Messages(uint256 totalL1MessagesPoppedOverall) internal { + if (totalL1MessagesPoppedOverall > 0) { + unchecked { + IL1MessageQueue(messageQueue).finalizePoppedCrossDomainMessage(totalL1MessagesPoppedOverall); + } + } + } + + /// @dev Internal function to pop l1 messages from `skippedL1MessageBitmap` in memory. + /// @param bitmapPtr The memory offset of `skippedL1MessageBitmap` in memory. + /// @param totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. + /// @param totalL1MessagesPoppedInBatch The number of L1 messages popped in current batch. + function _popL1MessagesMemory( + uint256 bitmapPtr, + uint256 totalL1MessagesPoppedOverall, + uint256 totalL1MessagesPoppedInBatch + ) internal { + if (totalL1MessagesPoppedInBatch == 0) return; + _popL1Messages(false, bitmapPtr, totalL1MessagesPoppedOverall, totalL1MessagesPoppedInBatch); + } + + /// @dev Internal function to pop l1 messages from `skippedL1MessageBitmap` in calldata. + /// @param skippedL1MessageBitmap The `skippedL1MessageBitmap` in calldata. + /// @param totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. + /// @param totalL1MessagesPoppedInBatch The number of L1 messages popped in current batch. + function _popL1MessagesCalldata( + bytes calldata skippedL1MessageBitmap, + uint256 totalL1MessagesPoppedOverall, + uint256 totalL1MessagesPoppedInBatch + ) internal { + if (totalL1MessagesPoppedInBatch == 0) return; + uint256 bitmapPtr; + assembly { + bitmapPtr := skippedL1MessageBitmap.offset + } + _popL1Messages(true, bitmapPtr, totalL1MessagesPoppedOverall, totalL1MessagesPoppedInBatch); + } + + /// @dev Internal function to pop l1 messages from `skippedL1MessageBitmap` in calldata or memory. + /// @param isCalldata Whether the `skippedL1MessageBitmap` is in calldata or memory. + /// @param bitmapPtr The offset of `skippedL1MessageBitmap` in calldata or memory. + /// @param totalL1MessagesPoppedOverall The total number of L1 messages popped in all batches including current batch. + /// @param totalL1MessagesPoppedInBatch The number of L1 messages popped in current batch. function _popL1Messages( + bool isCalldata, uint256 bitmapPtr, - uint256 totalL1MessagePopped, - uint256 l1MessagePopped + uint256 totalL1MessagesPoppedOverall, + uint256 totalL1MessagesPoppedInBatch ) internal { - if (l1MessagePopped == 0) return; + if (totalL1MessagesPoppedInBatch == 0) return; unchecked { - uint256 startIndex = totalL1MessagePopped - l1MessagePopped; + uint256 startIndex = totalL1MessagesPoppedOverall - totalL1MessagesPoppedInBatch; uint256 bitmap; - for (uint256 i = 0; i < l1MessagePopped; i += 256) { + for (uint256 i = 0; i < totalL1MessagesPoppedInBatch; i += 256) { uint256 _count = 256; - if (l1MessagePopped - i < _count) { - _count = l1MessagePopped - i; + if (totalL1MessagesPoppedInBatch - i < _count) { + _count = totalL1MessagesPoppedInBatch - i; } assembly { - bitmap := mload(bitmapPtr) + switch isCalldata + case 1 { + bitmap := calldataload(bitmapPtr) + } + default { + bitmap := mload(bitmapPtr) + } bitmapPtr := add(bitmapPtr, 0x20) } IL1MessageQueue(messageQueue).popCrossDomainMessage(startIndex, _count, bitmap); diff --git a/src/libraries/codec/BatchHeaderV0Codec.sol b/src/libraries/codec/BatchHeaderV0Codec.sol index fabfe682..36685868 100644 --- a/src/libraries/codec/BatchHeaderV0Codec.sol +++ b/src/libraries/codec/BatchHeaderV0Codec.sol @@ -17,10 +17,10 @@ pragma solidity ^0.8.24; /// ``` library BatchHeaderV0Codec { /// @dev Thrown when the length of batch header is smaller than 89 - error ErrorBatchHeaderLengthTooSmall(); + error ErrorBatchHeaderV0LengthTooSmall(); /// @dev Thrown when the length of skippedL1MessageBitmap is incorrect. - error ErrorIncorrectBitmapLength(); + error ErrorIncorrectBitmapLengthV0(); /// @dev The length of fixed parts of the batch header. uint256 internal constant BATCH_HEADER_FIXED_LENGTH = 89; @@ -31,7 +31,7 @@ library BatchHeaderV0Codec { /// @return length The length in bytes of the batch header. function loadAndValidate(bytes calldata _batchHeader) internal pure returns (uint256 batchPtr, uint256 length) { length = _batchHeader.length; - if (length < BATCH_HEADER_FIXED_LENGTH) revert ErrorBatchHeaderLengthTooSmall(); + if (length < BATCH_HEADER_FIXED_LENGTH) revert ErrorBatchHeaderV0LengthTooSmall(); // copy batch header to memory. assembly { @@ -45,7 +45,7 @@ library BatchHeaderV0Codec { unchecked { if (length != BATCH_HEADER_FIXED_LENGTH + ((_l1MessagePopped + 255) / 256) * 32) { - revert ErrorIncorrectBitmapLength(); + revert ErrorIncorrectBitmapLengthV0(); } } } diff --git a/src/libraries/codec/BatchHeaderV1Codec.sol b/src/libraries/codec/BatchHeaderV1Codec.sol index 228173c1..45c31aeb 100644 --- a/src/libraries/codec/BatchHeaderV1Codec.sol +++ b/src/libraries/codec/BatchHeaderV1Codec.sol @@ -2,6 +2,8 @@ pragma solidity ^0.8.24; +import {BatchHeaderV0Codec} from "./BatchHeaderV0Codec.sol"; + // solhint-disable no-inline-assembly /// @dev Below is the encoding for `BatchHeader` V1, total 121 + ceil(l1MessagePopped / 256) * 32 bytes. @@ -16,12 +18,16 @@ pragma solidity ^0.8.24; /// * parentBatchHash 32 bytes32 89 The parent batch hash /// * skippedL1MessageBitmap dynamic uint256[] 121 A bitmap to indicate which L1 messages are skipped in the batch /// ``` +/// +/// The codes for `version`, `batchIndex`, `l1MessagePopped`, `totalL1MessagePopped`, `dataHash` and `computeBatchHash` +/// are the same as `BatchHeaderV0Codec`. However, we won't reuse the codes in this library since they are very simple. +/// Reusing the codes will introduce extra code jump in solidity, which increase gas costs. library BatchHeaderV1Codec { /// @dev Thrown when the length of batch header is smaller than 121. - error ErrorBatchHeaderLengthTooSmall(); + error ErrorBatchHeaderV1LengthTooSmall(); /// @dev Thrown when the length of skippedL1MessageBitmap is incorrect. - error ErrorIncorrectBitmapLength(); + error ErrorIncorrectBitmapLengthV1(); /// @dev The length of fixed parts of the batch header. uint256 internal constant BATCH_HEADER_FIXED_LENGTH = 121; @@ -32,7 +38,7 @@ library BatchHeaderV1Codec { /// @return length The length in bytes of the batch header. function loadAndValidate(bytes calldata _batchHeader) internal pure returns (uint256 batchPtr, uint256 length) { length = _batchHeader.length; - if (length < BATCH_HEADER_FIXED_LENGTH) revert ErrorBatchHeaderLengthTooSmall(); + if (length < BATCH_HEADER_FIXED_LENGTH) revert ErrorBatchHeaderV1LengthTooSmall(); // copy batch header to memory. assembly { @@ -42,56 +48,11 @@ library BatchHeaderV1Codec { } // check batch header length - uint256 _l1MessagePopped = getL1MessagePopped(batchPtr); + uint256 _l1MessagePopped = BatchHeaderV0Codec.getL1MessagePopped(batchPtr); unchecked { if (length != BATCH_HEADER_FIXED_LENGTH + ((_l1MessagePopped + 255) / 256) * 32) - revert ErrorIncorrectBitmapLength(); - } - } - - /// @notice Get the version of the batch header. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _version The version of the batch header. - function getVersion(uint256 batchPtr) internal pure returns (uint256 _version) { - assembly { - _version := shr(248, mload(batchPtr)) - } - } - - /// @notice Get the batch index of the batch. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _batchIndex The batch index of the batch. - function getBatchIndex(uint256 batchPtr) internal pure returns (uint256 _batchIndex) { - assembly { - _batchIndex := shr(192, mload(add(batchPtr, 1))) - } - } - - /// @notice Get the number of L1 messages of the batch. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _l1MessagePopped The number of L1 messages of the batch. - function getL1MessagePopped(uint256 batchPtr) internal pure returns (uint256 _l1MessagePopped) { - assembly { - _l1MessagePopped := shr(192, mload(add(batchPtr, 9))) - } - } - - /// @notice Get the number of L1 messages popped before this batch. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _totalL1MessagePopped The number of L1 messages popped before this batch. - function getTotalL1MessagePopped(uint256 batchPtr) internal pure returns (uint256 _totalL1MessagePopped) { - assembly { - _totalL1MessagePopped := shr(192, mload(add(batchPtr, 17))) - } - } - - /// @notice Get the data hash of the batch header. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @return _dataHash The data hash of the batch header. - function getDataHash(uint256 batchPtr) internal pure returns (bytes32 _dataHash) { - assembly { - _dataHash := mload(add(batchPtr, 25)) + revert ErrorIncorrectBitmapLengthV1(); } } @@ -133,57 +94,6 @@ library BatchHeaderV1Codec { } } - /// @notice Store the version of batch header. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _version The version of batch header. - function storeVersion(uint256 batchPtr, uint256 _version) internal pure { - assembly { - mstore8(batchPtr, _version) - } - } - - /// @notice Store the batch index of batch header. - /// @dev Because this function can overwrite the subsequent fields, it must be called before - /// `storeL1MessagePopped`, `storeTotalL1MessagePopped`, and `storeDataHash`. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _batchIndex The batch index. - function storeBatchIndex(uint256 batchPtr, uint256 _batchIndex) internal pure { - assembly { - mstore(add(batchPtr, 1), shl(192, _batchIndex)) - } - } - - /// @notice Store the number of L1 messages popped in current batch to batch header. - /// @dev Because this function can overwrite the subsequent fields, it must be called before - /// `storeTotalL1MessagePopped` and `storeDataHash`. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _l1MessagePopped The number of L1 messages popped in current batch. - function storeL1MessagePopped(uint256 batchPtr, uint256 _l1MessagePopped) internal pure { - assembly { - mstore(add(batchPtr, 9), shl(192, _l1MessagePopped)) - } - } - - /// @notice Store the total number of L1 messages popped after current batch to batch header. - /// @dev Because this function can overwrite the subsequent fields, it must be called before - /// `storeDataHash`. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _totalL1MessagePopped The total number of L1 messages popped after current batch. - function storeTotalL1MessagePopped(uint256 batchPtr, uint256 _totalL1MessagePopped) internal pure { - assembly { - mstore(add(batchPtr, 17), shl(192, _totalL1MessagePopped)) - } - } - - /// @notice Store the data hash of batch header. - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param _dataHash The data hash. - function storeDataHash(uint256 batchPtr, bytes32 _dataHash) internal pure { - assembly { - mstore(add(batchPtr, 25), _dataHash) - } - } - /// @notice Store the parent batch hash of batch header. /// @param batchPtr The start memory offset of the batch header in memory. /// @param _blobVersionedHash The versioned hash of the blob with this batch’s data. @@ -214,17 +124,4 @@ library BatchHeaderV1Codec { ) } } - - /// @notice Compute the batch hash. - /// @dev Caller should make sure that the encoded batch header is correct. - /// - /// @param batchPtr The start memory offset of the batch header in memory. - /// @param length The length of the batch. - /// @return _batchHash The hash of the corresponding batch. - function computeBatchHash(uint256 batchPtr, uint256 length) internal pure returns (bytes32 _batchHash) { - // in the current version, the hash is: keccak(BatchHeader without timestamp) - assembly { - _batchHash := keccak256(batchPtr, length) - } - } } diff --git a/src/libraries/codec/BatchHeaderV3Codec.sol b/src/libraries/codec/BatchHeaderV3Codec.sol new file mode 100644 index 00000000..c07014b0 --- /dev/null +++ b/src/libraries/codec/BatchHeaderV3Codec.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.24; + +// solhint-disable no-inline-assembly + +/// @dev Below is the encoding for `BatchHeader` V3, total 193 bytes. +/// ```text +/// * Field Bytes Type Index Comments +/// * version 1 uint8 0 The batch version +/// * batchIndex 8 uint64 1 The index of the batch +/// * l1MessagePopped 8 uint64 9 Number of L1 messages popped in the batch +/// * totalL1MessagePopped 8 uint64 17 Number of total L1 messages popped after the batch +/// * dataHash 32 bytes32 25 The data hash of the batch +/// * blobVersionedHash 32 bytes32 57 The versioned hash of the blob with this batch’s data +/// * parentBatchHash 32 bytes32 89 The parent batch hash +/// * lastBlockTimestamp 8 uint64 121 A bitmap to indicate which L1 messages are skipped in the batch +/// * blobDataProof 64 bytes64 129 The blob data proof: z (32), y (32) +/// ``` +/// The codes for `version`, `batchIndex`, `l1MessagePopped`, `totalL1MessagePopped`, `dataHash` and `computeBatchHash` +/// are the same as `BatchHeaderV0Codec`. The codes for `blobVersionedHash` and `parentBatchHash` are the same as +/// `BatchHeaderV1Codec`. However, we won't reuse the codes since they are very simple. Reusing the codes will introduce +/// extra code jump in solidity, which increase gas costs. +library BatchHeaderV3Codec { + /// @dev Thrown when the length of batch header is not equal to 193. + error ErrorBatchHeaderV3LengthMismatch(); + + /// @dev The length of fixed parts of the batch header. + uint256 internal constant BATCH_HEADER_FIXED_LENGTH = 193; + + /// @notice Load batch header in calldata to memory. + /// @param _batchHeader The encoded batch header bytes in calldata. + /// @return batchPtr The start memory offset of the batch header in memory. + /// @return length The length in bytes of the batch header. + function loadAndValidate(bytes calldata _batchHeader) internal pure returns (uint256 batchPtr, uint256 length) { + length = _batchHeader.length; + if (length != BATCH_HEADER_FIXED_LENGTH) { + revert ErrorBatchHeaderV3LengthMismatch(); + } + + // copy batch header to memory. + assembly { + batchPtr := mload(0x40) + calldatacopy(batchPtr, _batchHeader.offset, length) + mstore(0x40, add(batchPtr, length)) + } + } + + /// @notice Store the last block timestamp of batch header. + /// @param batchPtr The start memory offset of the batch header in memory. + /// @param _lastBlockTimestamp The timestamp of the last block in this batch. + function storeLastBlockTimestamp(uint256 batchPtr, uint256 _lastBlockTimestamp) internal pure { + assembly { + mstore(add(batchPtr, 121), shl(192, _lastBlockTimestamp)) + } + } + + /// @notice Store the last block timestamp of batch header. + /// @param batchPtr The start memory offset of the batch header in memory. + /// @param blobDataProof The blob data proof: z (32), y (32) + function storeBlobDataProof(uint256 batchPtr, bytes calldata blobDataProof) internal pure { + assembly { + // z and y is in the first 64 bytes of `blobDataProof` + calldatacopy(add(batchPtr, 129), blobDataProof.offset, 64) + } + } +} diff --git a/src/libraries/codec/ChunkCodecV0.sol b/src/libraries/codec/ChunkCodecV0.sol index 1d4751c7..a4d49b83 100644 --- a/src/libraries/codec/ChunkCodecV0.sol +++ b/src/libraries/codec/ChunkCodecV0.sol @@ -26,10 +26,10 @@ pragma solidity ^0.8.24; /// ``` library ChunkCodecV0 { /// @dev Thrown when no blocks in chunk. - error ErrorNoBlockInChunk(); + error ErrorNoBlockInChunkV0(); /// @dev Thrown when the length of chunk is incorrect. - error ErrorIncorrectChunkLength(); + error ErrorIncorrectChunkLengthV0(); /// @dev The length of one block context. uint256 internal constant BLOCK_CONTEXT_LENGTH = 60; @@ -42,10 +42,10 @@ library ChunkCodecV0 { _numBlocks = getNumBlocks(chunkPtr); // should contain at least one block - if (_numBlocks == 0) revert ErrorNoBlockInChunk(); + if (_numBlocks == 0) revert ErrorNoBlockInChunkV0(); // should contain at least the number of the blocks and block contexts - if (_length < 1 + _numBlocks * BLOCK_CONTEXT_LENGTH) revert ErrorIncorrectChunkLength(); + if (_length < 1 + _numBlocks * BLOCK_CONTEXT_LENGTH) revert ErrorIncorrectChunkLengthV0(); } /// @notice Return the start memory offset of `l2Transactions`. @@ -81,12 +81,7 @@ library ChunkCodecV0 { // only first 58 bytes is needed. assembly { chunkPtr := add(chunkPtr, add(1, mul(BLOCK_CONTEXT_LENGTH, index))) - mstore(dstPtr, mload(chunkPtr)) // first 32 bytes - mstore( - add(dstPtr, 0x20), - and(mload(add(chunkPtr, 0x20)), 0xffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000) - ) // next 26 bytes - + mcopy(dstPtr, chunkPtr, 58) dstPtr := add(dstPtr, 58) } diff --git a/src/libraries/codec/ChunkCodecV1.sol b/src/libraries/codec/ChunkCodecV1.sol index 51f09930..4390fe45 100644 --- a/src/libraries/codec/ChunkCodecV1.sol +++ b/src/libraries/codec/ChunkCodecV1.sol @@ -28,10 +28,10 @@ import {ChunkCodecV0} from "./ChunkCodecV0.sol"; /// ``` library ChunkCodecV1 { /// @dev Thrown when no blocks in chunk. - error ErrorNoBlockInChunk(); + error ErrorNoBlockInChunkV1(); /// @dev Thrown when the length of chunk is incorrect. - error ErrorIncorrectChunkLength(); + error ErrorIncorrectChunkLengthV1(); /// @dev The length of one block context. uint256 internal constant BLOCK_CONTEXT_LENGTH = 60; @@ -44,10 +44,10 @@ library ChunkCodecV1 { _numBlocks = getNumBlocks(chunkPtr); // should contain at least one block - if (_numBlocks == 0) revert ErrorNoBlockInChunk(); + if (_numBlocks == 0) revert ErrorNoBlockInChunkV1(); // should contain the number of the blocks and block contexts - if (_length != 1 + _numBlocks * BLOCK_CONTEXT_LENGTH) revert ErrorIncorrectChunkLength(); + if (_length != 1 + _numBlocks * BLOCK_CONTEXT_LENGTH) revert ErrorIncorrectChunkLengthV1(); } /// @notice Return the number of blocks in current chunk. @@ -83,4 +83,17 @@ library ChunkCodecV1 { function getNumL1Messages(uint256 blockPtr) internal pure returns (uint256 _numL1Messages) { return ChunkCodecV0.getNumL1Messages(blockPtr); } + + /// @notice Return the block timestamp of last block in current chunk + /// @param chunk Current chunk in memory. + /// @return _timestamp The number of L1 messages in current block. + function getLastBlockTimestamp(bytes memory chunk) internal pure returns (uint256 _timestamp) { + assembly { + let chunkPtr := add(chunk, 0x20) + let numBlocks := shr(248, mload(chunkPtr)) + // blockPtr is chunkPtr + 1 + (numBlocks - 1) * BLOCK_CONTEXT_LENGTH + let blockPtr := sub(add(chunkPtr, mul(numBlocks, 60)), 59) + _timestamp := shr(192, mload(add(blockPtr, 8))) + } + } } diff --git a/src/libraries/verifier/IRollupVerifier.sol b/src/libraries/verifier/IRollupVerifier.sol index 3ae9ab1e..b5f77526 100644 --- a/src/libraries/verifier/IRollupVerifier.sol +++ b/src/libraries/verifier/IRollupVerifier.sol @@ -26,4 +26,16 @@ interface IRollupVerifier { bytes calldata aggrProof, bytes32 publicInputHash ) external view; + + /// @notice Verify bundle zk proof. + /// @param version The version of verifier to use. + /// @param batchIndex The batch index used to select verifier. + /// @param bundleProof The aggregated proof. + /// @param publicInput The public input. + function verifyBundleProof( + uint256 version, + uint256 batchIndex, + bytes calldata bundleProof, + bytes calldata publicInput + ) external view; } diff --git a/src/libraries/verifier/IZkEvmVerifier.sol b/src/libraries/verifier/IZkEvmVerifier.sol index 853aca15..244b0dee 100644 --- a/src/libraries/verifier/IZkEvmVerifier.sol +++ b/src/libraries/verifier/IZkEvmVerifier.sol @@ -2,9 +2,16 @@ pragma solidity ^0.8.24; -interface IZkEvmVerifier { +interface IZkEvmVerifierV1 { /// @notice Verify aggregate zk proof. /// @param aggrProof The aggregated proof. /// @param publicInputHash The public input hash. function verify(bytes calldata aggrProof, bytes32 publicInputHash) external view; } + +interface IZkEvmVerifierV2 { + /// @notice Verify bundle zk proof. + /// @param bundleProof The bundle recursion proof. + /// @param publicInput The public input. + function verify(bytes calldata bundleProof, bytes calldata publicInput) external view; +} diff --git a/src/libraries/verifier/ZkEvmVerifierV1.sol b/src/libraries/verifier/ZkEvmVerifierV1.sol index 45bfe909..1ff15e14 100644 --- a/src/libraries/verifier/ZkEvmVerifierV1.sol +++ b/src/libraries/verifier/ZkEvmVerifierV1.sol @@ -2,11 +2,11 @@ pragma solidity =0.8.24; -import {IZkEvmVerifier} from "./IZkEvmVerifier.sol"; +import {IZkEvmVerifierV1} from "./IZkEvmVerifier.sol"; // solhint-disable no-inline-assembly -contract ZkEvmVerifierV1 is IZkEvmVerifier { +contract ZkEvmVerifierV1 is IZkEvmVerifierV1 { /********** * Errors * **********/ @@ -33,7 +33,7 @@ contract ZkEvmVerifierV1 is IZkEvmVerifier { * Public View Functions * *************************/ - /// @inheritdoc IZkEvmVerifier + /// @inheritdoc IZkEvmVerifierV1 function verify(bytes calldata aggrProof, bytes32 publicInputHash) external view override { address _verifier = plonkVerifier; bool success; diff --git a/src/libraries/verifier/ZkEvmVerifierV2.sol b/src/libraries/verifier/ZkEvmVerifierV2.sol new file mode 100644 index 00000000..85380a88 --- /dev/null +++ b/src/libraries/verifier/ZkEvmVerifierV2.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {IZkEvmVerifierV2} from "./IZkEvmVerifier.sol"; + +// solhint-disable no-inline-assembly + +contract ZkEvmVerifierV2 is IZkEvmVerifierV2 { + /********** + * Errors * + **********/ + + /// @dev Thrown when bundle recursion zk proof verification is failed. + error VerificationFailed(); + + /************* + * Constants * + *************/ + + /// @notice The address of highly optimized plonk verifier contract. + address public immutable plonkVerifier; + + /// @notice A predetermined digest for the `plonkVerifier`. + bytes32 public immutable verifierDigest; + + /*************** + * Constructor * + ***************/ + + constructor(address _verifier, bytes32 _verifierDigest) { + plonkVerifier = _verifier; + verifierDigest = _verifierDigest; + } + + /************************* + * Public View Functions * + *************************/ + + /// @inheritdoc IZkEvmVerifierV2 + /// + /// @dev Encoding for `publicInput` + /// ```text + /// | layer2ChainId | numBatches | prevStateRoot | prevBatchHash | postStateRoot | batchHash | withdrawRoot | + /// | 8 bytes | 4 bytes | 32 bytes | 32 bytes | 32 bytes | 32 bytes | 32 bytes | + /// ``` + function verify(bytes calldata bundleProof, bytes calldata publicInput) external view override { + address _verifier = plonkVerifier; + bytes32 _verifierDigest = verifierDigest; + bool success; + + // 1. the first 12 * 32 (0x180) bytes of `bundleProof` is `accumulator` + // 2. the rest bytes of `bundleProof` is the actual `bundle_recursion_proof` + // 3. Inserted between `accumulator` and `bundle_recursion_proof` are + // 32 * 13 (0x1a0) bytes, such that: + // | start | end | field | + // |---------------|---------------|-------------------------| + // | 0x00 | 0x180 | bundleProof[0x00:0x180] | + // | 0x180 | 0x180 + 0x20 | verifierDigest | + // | 0x180 + 0x20 | 0x180 + 0x40 | prevStateRoot_hi | + // | 0x180 + 0x40 | 0x180 + 0x60 | prevStateRoot_lo | + // | 0x180 + 0x60 | 0x180 + 0x80 | prevBatchHash_hi | + // | 0x180 + 0x80 | 0x180 + 0xa0 | prevBatchHash_lo | + // | 0x180 + 0xa0 | 0x180 + 0xc0 | postStateRoot_hi | + // | 0x180 + 0xc0 | 0x180 + 0xe0 | postStateRoot_lo | + // | 0x180 + 0xe0 | 0x180 + 0x100 | batchHash_hi | + // | 0x180 + 0x100 | 0x180 + 0x120 | batchHash_lo | + // | 0x180 + 0x120 | 0x180 + 0x140 | layer2ChainId | + // | 0x180 + 0x140 | 0x180 + 0x160 | withdrawRoot_hi | + // | 0x180 + 0x160 | 0x180 + 0x180 | withdrawRoot_lo | + // | 0x180 + 0x180 | 0x180 + 0x1a0 | numRound | + // | 0x180 + 0x1a0 | dynamic | bundleProof[0x180:] | + assembly { + let p := mload(0x40) + // 1. copy the accumulator's 0x180 bytes + calldatacopy(p, bundleProof.offset, 0x180) + // 2. insert the public input's 0x1a0 bytes + mstore(add(p, 0x180), _verifierDigest) // verifierDigest + let value := calldataload(add(publicInput.offset, 0xc)) + mstore(add(p, 0x1a0), shr(128, value)) // prevStateRoot_hi + mstore(add(p, 0x1c0), and(value, 0xffffffffffffffffffffffffffffffff)) // prevStateRoot_lo + value := calldataload(add(publicInput.offset, 0x2c)) + mstore(add(p, 0x1e0), shr(128, value)) // prevBatchHash_hi + mstore(add(p, 0x200), and(value, 0xffffffffffffffffffffffffffffffff)) // prevBatchHash_lo + value := calldataload(add(publicInput.offset, 0x4c)) + mstore(add(p, 0x220), shr(128, value)) // postStateRoot_hi + mstore(add(p, 0x240), and(value, 0xffffffffffffffffffffffffffffffff)) // postStateRoot_lo + value := calldataload(add(publicInput.offset, 0x6c)) + mstore(add(p, 0x260), shr(128, value)) // batchHash_hi + mstore(add(p, 0x280), and(value, 0xffffffffffffffffffffffffffffffff)) // batchHash_lo + value := shr(192, calldataload(publicInput.offset)) + mstore(add(p, 0x2a0), value) // layer2ChainId + value := calldataload(add(publicInput.offset, 0x8c)) + mstore(add(p, 0x2c0), shr(128, value)) // withdrawRoot_hi + mstore(add(p, 0x2e0), and(value, 0xffffffffffffffffffffffffffffffff)) // withdrawRoot_lo + value := shr(224, calldataload(add(publicInput.offset, 0x08))) + mstore(add(p, 0x300), sub(value, 1)) // numRound, which is numBatches - 1 + // 3. copy all remaining bytes from bundleProof + calldatacopy(add(p, 0x320), add(bundleProof.offset, 0x180), sub(bundleProof.length, 0x180)) + // 4. call plonk verifier + success := staticcall(gas(), _verifier, p, add(bundleProof.length, 0x1a0), 0x00, 0x00) + } + if (!success) { + revert VerificationFailed(); + } + } +} diff --git a/src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.2.bin b/src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.2.bin new file mode 100644 index 0000000000000000000000000000000000000000..b77f53864b0bfbe0da8b5af7ca3acfc961aaa86d GIT binary patch literal 16464 zcmb`Od3;S*_y12MB9WLf5#ttOsK`V@2sS~?a<5qo`xslTvBqj;C#cfFP)b$VhH9y) zR0rcmTa=o$RMlx!OIxK?Ra*Q$>)dm0c%Ikm>-ppN$31Jk_gd?-)|u{b$NVy3Jo_!bQ51ae==+9ryWG}^>dG>Dhe1eh!V!MC|OWeMo-I+nUA%coJZDAofi84C1+Z} zqjf}JLCDnnsOkAJ3+&-?=FQE)p_al(3l_{P1%u_V99F;zSP3g(6|92Quo~8awbFvk z0K+S>A&-&A$m8U3@&tK;JV~A;Pm!m{)8uLLEb=UPMGSaF4DuLxj66;rCr^+k$dlwr z@)UWBJWZY^&mzx)7iho>G{|G#yvjZMk1X?C_=`stc75)}RSmnvY-%tl`H%TE&g7SC zyJqm%RAG3Lmxc-shm#|`)662z6-+aYHr;dW(~30;NMuNI6lE-XI73lDBSVv8QO2H! zGJ*_YFf$1Kf(%c7ey|zDFlZ3><{%w4L4qRWNGiVfV6hNLWM+^;it-iHo(Eap91&m^ zHM)qZ00z&Cmz_|Q)QggO5QAt@Qs?B5dSIUi)zO*)BreI(lriPu3`GG885&NoK^f}d z42uGc`jf*cWA8&50SxmnGZ>Qu3wy?3i5Y_xW-Q96NTZsQW1%|8c&NIlK%kg`3`q{7 zjJSt06a_dkG&zDYT0Wd%Q9z=#$d(FVwj|uwr4D6Va5={n}e}fTCf>H z$2FLf$H^1q3GyU)k~~G8B2Sa2$+O6_;1x6Ag&O2B@)&uXJWieelmt>emf`tUjP6#K_aE8+zDslY7xz`L;k_o)z)~@PQ*dVw3G5 zmwAQs2<4CI2V$Ib#y+HDdCUOAO*RAA1KGlB25^K$VOTy8mL&Gj{ZFUNL$6S?1no)* z<)Ify6KRkpvWSq0SEyOi0F^X6^a3#=24X~@X!myh!}_waUu@lM1n|w1d$|?AW5W%6i5+iA`Q|+7Lf(AK&1^(X~RP= z5F=tBM#PCYh!Y7S0TM)#NP;AhB2pklq`mULK4Jgk3xRkRR71Mr0isj4VoJNDXY)J!I##MXw~JeYdR9pok8aOHNu^rqYXJ8vWB@@cA7n zOXx}nG0SkIR$u<_mra)iZXT0=Zu-4}l@DC{WXRuTXLY*Lv2BYF51%br(NPsh4cqHk zvSQwn39XI{OP*ReV}6T~`8flUs=oc#qRrn_tMU6KM^z%VM8Eg<#+*w?9q?_lVTrfO zzj3AiALXAZpK~?%O*7@E)1CS|stT#qioU+-^X^aI>NY00gLhVwJxx#kRrmg~Dyy2b zoIfDsvG-Ousv4;^aw_k>)a&P-HLh1X`O}E@Lw+Ci#r&XTiRH6PJUh5ba`uJh9|gARk~G4n8o`iSE91mcHgo%*uhkecb$78Aou6Oz_2H<+ zyzL;>WX{@k$6j?*IZ|V5=B50)b@ye_dP3-u&~A@MY})#1_>s+9r-kNEeQWin2OL#_ z)UugJ`Ja=m<~>7?th+R^$j#`fsZ*c&dFQ#^XU3Lp*Q-&6qbiZgwtaBv){ytF{$1_$ zE1%vk$xnSSqf6D5XNr_8=dCom&zRal*yTBKvuE_8 z*=Yw?ju$Im){d&i7pnlL%tG0Je%t-8YuCPXA`PTg+V*1Z`9as7`hM}8jCCvZrRo`d zvObQR{M!DUIftLx|La1ZY9vEy#F~9&0}pT7aeC|4XHT79I5F_fOF{azKkqy{chLT+ z4I_v7hKb}zEiwPgjD_jXE_~-|%${ey-jGqF&f>ot9a?HMo4>bga+Bl2Q58syJ329= z?LXD#l^U3MGkEpd>P132<}|%}Vs22!de83Oo4DLjl}Jr)RDbq{-kpOg_bK{B?2f2X zkJp%zw6(W4u3%H$VWmq3C`VO!<&?)_FQ$IwiGTf1-f`%sEj#KG!^(Zqzw(GZDFAGNDZ6G zYBwGEV#t!^N2iwDl(+6s>f4KVwm(_d)9lEiDOSx_994r;; z^mv6yyYD)x8mSRew~cH+x%~KTEaYB6O08Y1)_+`M$?mT{sTkMz$K20C20E%1QY%^W z0~dTSee=EK%n$G9BrTo#d{WhKZZGp2zPY_{=;=Xkd=o!ZSgwz2Z8 zedV9dJ~`yKJ69Z4j@0<|eK)V(J!yI8V<+yPJT~u{TX#=}9pQh^et+oLyEW>LcaCec zKx*+1uIol)YP|4x-k1;8Z~FB6Fs_xopf;Wp_hvfdn|8y;^Yx;PV$MyFo>49xN^_TIX7l({&e8e|CSinC8+Y@ z4GBYP#ts-Yc6E9p`pf_wE zoOn0{dO#3m<##{|E7;OODey~^B6^0b`os7j<(n{j%VXWX`$ zcavsJdSBc>Kec4=7fDYZP2M-U|E?3c6^1&h3aR1WOniU#_8$Ybvt5~Au%3Bu#eX-s zUB~4@j#_ZK(yAX8JE|I~A7y=tDoD<`o%i#Q!UGoTIQv>Z@v8Nm>*WfF3fv-ZhG+X zI%^MJDZilc#o}S@2S-&&c2qf1!&Y{yQln33^TS)l56|8_l&v37yw~Uk_cN!Zgq{5U zl^O>fRe{v%`gWIXr(gT&mnBErW*qrF^O@u4uZ84~?z(%^6G(QS>M(9r|z_m-uUX;v~L>E`O@g}p7U8(Rw1>P==I4iv+MbawPIU+++;#Z z-Qa<<&wrO6K6Le$LLuy>qjJ5aQta|CS zxH)s5S?XOi<@pJokapdauy7O-znvpla zQI$w7(ek6|{X$P~s8{`oRtsO<)3Qy}U&kBVzS4AJ*r|#OFFw20QB_E-R%OA}sWm^J zJiX30qpnUjC$*t2w(Qch(lT%m0u*s>bz-)5rDsZA0r>=sq z$*q$%xpm4Ww@wq4b?YpfoVtpJO-@}!W|LD_krS13>M9DG+&XEKTc>Pt>oifUTW1l` z&kH&$mGF!~FtZZ((pK18{QRwCc+5)5`+t5bymtToeY2AOzmx3epp`6dfe4@mOlb5H zMSI_g!sAS^N8neHg-5gn1!hIe1n?FV6ok&rp@DtN*bRWYTuwX73d`lRe_1-ql9r`^ znLEpZmbrh~)#kM9*DmX7Gc4oH$eE<9t8LJ-U%RZMUBRMdzcx;+J$D67%YN+`N4tW; za*SU)#?h`IY1ywG<7x|9_G{x}^J#Nh_G?GG+6>Fle(h*i+n{B?cC@2i-lAo{Hf{i0 zyS%1lzjlntMFMN=I!h)@?zb&L_AE}H5X2gRT+n(CM!LS2kqCy7uO zW7jDn)Wz6!8dMf_F?O9rgu1d+SJfawU0JHD%7{=`mg=f<5Z*J*vQ$@95TUM|T_=f9 zSI(|eM5rrg*J%*mg3NMuorRyv%wtvty2;y5To zdI|#J5({vs^uVE9Nx7h4Nu(%OqY~0)oTeC&qB@J}3|ohui&Zm-l?M)Tt1(bD235+f z#)-J2T1|k8(*z;_F$uzz0f*`oWs-`ZI!&bAI*aO%iC3su-S83iqq>3I>I_`j@W7!c z2UX|Lq1mbnBH`#%msF`~aws9Hs1mx>6;*1=)gVbRiwH6Mc*Gl&N&8Hb$1@_1>zW}m zo)ZZV93nv^L4rsUDG+JKDd%tPZQ6GEpQN`p|qDZ3{VXN#1X5(Kt-7c4iR@U ziyM?FC{s9RxrTHzC1om#an#Ws*3fPpBeE!FIcK$|;ndYMP*;;tOncxUvnB@>S0GL# zK$uemz?blAO6OU5O+|z}d*+%NL^Idaq-go7@r&(cHBxw5V-R zOnTs;MQsMc6%2=ngKBfSo@xrp72tRaQ5vVVq$qOZ4T>oub!gB!+$TC^ zdHS}s*_n!B z3U!iHG?8{QEy^^U%(@1sE-1l5W?e?aoXol$M5i!RP)xYQh$LkS4;)NZSAozObBA$? zYKkgEHAO9oy19u4DAC?W)Q6afjM%QNYY}rW?QM17I~6$6zZwIpdj1_#4eh$Jc6yKsdmk~IAk zf7DZHU#UfvpL~3!f=WeUSBcU`KJfOHDk?49 z*JO>-#H+iz=l-ziqgf^6D~&5Pu2-Ak6LzgSeb7v}7!Tys0t&(GFzw&v*)d%ZN zJEdDa`%9s43VlJydt|;d@s!j*e_K6zc*x28*nKA_t{m}v|2s$DZn`;beBg~6=`X$T z*#o+abW4oBuN;8bxM;(jk_LQH0G(lr_D&**kNq#k za0bLV^DP^+Z26bDZ#mVXW$s^Q&a$Ru=3h2^%eY{$Y&gsLxPb5w0$b-YvVXdw%;Pxt z+@;f(hSMi867Cg}P2*m=lCUml9mm93$1_4)MRYB>3aPGwvK8oVvlTQlrJbpq78nG5 zXemwjE}C@v5=v7JF}k4AEQh##L8aT5Qo5oGDjk~X++(Ic;##pUs0POWa6vV|;j=HO zbb$*hUHUJmbU_ysX0cC9I-_G^xrZ79`<4w_R{mw-TgEebk=s~Y<{ zHD*2yO%d+Yg$b%_ENDimYYa9UOGIhL#?qd#v2wVPU8_NjDT@2jY-~A7p`4U54Oc1C zfKnzy6ju}+TPc$}Y%667P$qS?pp+?HCCq?zm9 zu976BCfrqO!lBeeP$hDk2wSO%bl9h)Kusi~w0BLktArV_ZuylgC^a<@#a#f$R%*%| zww0Q4P*Vma4W*{SRYE1!rK{9bl9HlI#Jct?X;QMNl5#Cui5m{vN}PeXfvAEK=dKbb zB`#bgE}+CERZ0&WpOSLer=&?qA<9X~a+Odi&E|%y)ZBnlb4HcOZO&|^=Gm_Ss=QLk_7c^;qTdkDqAo_8)^?6yJrjTu-&tTaHzSW zTzTzJwtHp?P!^P0(0*n~ z5WPQUNvc#1HReRxC3G>fEQc}$sHNdh6N8Akq=>jfO*xTp$s&>tHIqcjAoi+C+}f71K-n5mj#=9npbYMTgUU9{p=?3KU81@+0@Q|K z|7joFNKlGzAKNJS_^Cnr+eUlw6S9rv6-CUph8KArv#sw7563e8*E2T7oPUySV0yb4!$LEBnU~HV5cZhBB+t1U@foN2)3Q!CTnzPtNk6?as(MV2v`oQ zVFj!OE1jZt3>~oXcc3JN4wR(5W)`vKCM$Gkr~Dn-F^}2a@IoDy!75k|i=y_zDQa(^ z12%4lAc3Hyzea#n=wQKWH(8=Xd+G1c-ayduLfvC_Fkn&Cfx#+R?iN|p!E!s~1+4hy z@SA_XnH5}+*7@;0HAz9+7h8#lv~v7zUv zv_XkW53m&#yx}WEd;d}bHQ4$!ee$cU?nVb zi!^5Ip#8Iz+SKPzzDS#QMC>$QpBXgj+Q=pAR_+-$>cWJ8uZq__+r#Y0y?GV)Bv%^V zI`Kl{q>!}Kl?|>n3(4CZwjk!196OPh{Vsfp*->CNhBne^(~)B~Y~0y8Xap5zv0$|q zAy^Amc+5_QTcj{sN9CWb@)KA0ZEY9-)~?F`jEmm-^NL>Gm$p1QV)E-ROg<6NrA+D0 zW+&#&tKBp(um0urGgkldbItg1`#raZRW5$$dhX2$or>n~JKV6E*@qwOb^h-dVWnc?pR(&v$yO=Kc?sum5<`(b$VIM{_*6aq+(%89RpFh+oiT3C9yk8!%$3h9dHM-6$G~i8pTpcX7R_e) zXX`8wl?gXaf7s~C2O+`P z@lS4Px2N~2AIu!>&5MnixJOQY_KBIXd(TXMdfSX;HU9lQ>VxZt-}v^E?iYvNi!^gA z%%(i1$8g(d%$B45v*mCE8Dp zw5oJ}+x#~>HC%S_-ipaT-}v!+)1$n3L75ZSjp6Af-g@fdk$o}mw)!$-SLiS8Ka3pO z@VAJb!Grsm9*xvV*wPiD z{bLtinaSeMoXUP@Z9-UB+!IUs{&8W&(C{K1O|SIk)rwscFstT!%?3r+eR;v~f4|&3 z^S2hyN6y)Hzw^sqre!uBZh94Fv(QGnZ6s#Hhm(7~c?|?DFXr-?T?|+W%U~5OcZ)2V z&GOGy`KvF+-njRCmM+gOH2e7M&NUfo-~RL8u6Ql+-7{-;_nKvP5#GESuXf)bwtva& z-(M=o`eaG$jQ9Fn?=U~m>J9JeDN+@br_0cj#pxXnCRTF?$=Z5|+U#Snd{C z)WIt3U?C{zZ~kBV+sRS!ZNprPJI8u6W`B5kR!=}#rtvWE3dvfuSA8~ea_DN z>#8Y~H!n1J=CPjruaEn6>FevC2(PzbNBfj|qqe+qquaW#zd0VaFxM2?n-_7Q-&^Ni z8vaYWcSp;Y5AoR-kN@;Uc-G0u9ez9(DNy zDUtN+xn&E6-duX(w~HexSL!(_?|A0Hyp4P3mg+Yv;*TPC7MrH;j4&KXGeBZ1LVQ1E Z@cRbjq5qv)VDj)D!jO0IH~jL({{xs)%uxUU literal 0 HcmV?d00001 diff --git a/src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.3.bin b/src/libraries/verifier/plonk-verifier/plonk_verifier_v0.12.0-rc.3.bin new file mode 100644 index 0000000000000000000000000000000000000000..4ba80d3ca6fa551baed7d77ce4f716706c67ffa0 GIT binary patch literal 16464 zcmb`Od3;S*_y12MB9WLfnb|@N6`4o~!6t}V?lsT*XwhnoHC8J-L6r`MnySh+wv<+j zw&snt=6PsU)oE2rQCd}{6~E6q_naGjp4aQ^`Q!J;J!`%9TI;jcneK4N0K{~Y zduC+|BR6n>VU+7G#H{Szxw!#?duPwe?$+DnrLbN%7n{P}dXs6Im!6w@J6{CkBt6w} z)c47%)@Ru*KgrGQ(RV@akl9ah$}9QUlqn@;Ud){AZ0t#1lrW}5$-L4sdP;80T&!hhKem4Il+gb#IaBf; zuOkBULMG=%P0fv&XAhS>XLdFYwG>8buwY&(7%Ye7umV=VN>~Z2U=^%})vy+QGM4^3Ls38@Lz81s#_oS* z1R26$W)S)X8J^tSU^9qe&>-&3MmlPO1VzY^RGj~4u@FdPW{^UP@)gsb2U*^15nvWJ zI*Td*2G5I^oluz63zK>fgJ@w==j4!jV4p|T(V7AzF3Hi9G3nnKiUJlgG@M|AGSt5_ zEDA8{PY$PyJ^#uGV3>!Q!I&gi*fR!8%owaNV_`-`8r7T}3)Ml!zp4uh1d15QkmNAR zi2Zklq5wyRCPz?4i+^WW6p-j|kfSJL(7!S;W3Xao5lm7<+cOriFk^_}&BjZb+ z@&w%p=*-M89L+H4q3bzJAs(jfOES!&OEOF&!9s#%Cxnw|IK$}CZBaG!cOsfR<|4AoQv*-#5kF$2ZH@&77j9(>k_9_4cb@PQ*dVuS4= zmwAQs2<4CIM`E0GM*mC4@|XdJn`{QKN3w<24B!Zhg0OrfEJ^HN_dlI754}RoVzev8 zl!sm*O{77Z$Ra`}UZG}j1617b&E&ZA`aq2f=GY_ktC8JNu-DrND*lw4bnsw zkp;3qB@9pr!$U6+BVr&%#ECeF6A2;#5=4?nf+Ue5QXoa7i8M$PSwt4d0+lpCB@GX~ zK#Yii7!fDpAWkHR1V|7`A_*O02si@g0>xu;5JRcuv~#|>Ni z^xKy!hy1iAAtLkWKx9!WLuz2#ZXr8vE_@?C_4}m_pNeRIrTBy;r7FHUs^Q=52VU5o zyqK#VWulvrzV*-**4&+O;p8NCT-Ax4zo@!c#Y&`(e?n^mQxri+jbuoTShKfu;NcD1&urfO;^_+u#s}ViElAJ*F=F30}RnTA`2**-dVooE_Am?u)zjBrJ1OB~p_b)|>f3uTDXg`V@Yq?DnV< zPgkFmxVe`%Hg7|nAtj3kC`VO!<)kOdUP}4O6Zh61yu;uxT6ECGhLridf2Co&llRxU z_*=f|h-!$I^|UBi^5ZSNhGnfTl09fu(ZJ!o*NoTMzvor_YfzfLf5;KFkXkyj=z!ys zemd4RWa)>=D!j7j$=4fH80k}uVo0q$(5l<4@Zfs`|ETxf7q8yB_gej@zL~Wxwr!1` zy^{v)yEMyDJ<(Ole=xT0sN-L6=o`S-Zy);3lfN&o{`bhrUqA1t3Z#Zj zXSJFPe>G(BvSX8rZ^&79DCONnJKCM9<7s+y;UufZ8;+_(YKb9#-&vA)b9{@2$5Jy^ zpLp?~BG2eepMIGKIjRb&?4I|f%zzCajgB6h+v1y-t@zsi_Vb=pkRULTW{8 zZs5F6rhc5Cl=11q?8GILUrwy@?Y)IZYV6vwes22RB|g)AYlmo)cY5b!@D|v)~P|i-oNUoa-_zs@B8uUT@#jdI)3uuspE5AxclH#*iru1%uRzwKd4@3taDtW z1yYNCa!WTHRsEHxb4Go#e!~|(B&9`Xygzz^qc^JAB+z?2hv?)pSy42ULqha9W?UWv4% zcVy>cQ``Q0Ch@?;L$4Pd@|EJiP&Owz9 ze-J;YM%e))29BOR;1x%dL$v6vw)ggAzPIVKvCk)c_Kj7!Tb;4Zj@(k8pM2%gJpIA8 zQI4oUYTW3+36*Z#9sTg!$*KESk8gZ3cvSHF`;Q$S*|SuBqNl}7M^z%V>a;UEJ!7`k zc#t@4!Y1+X!sOz?M-rbsmb7>gBupT+9;=Z5Q zw!<)Uu5wzM7Ms^~J-ZU)0Nqxmv!%*)B1YtMB~I zQMHg-deP19_bqRkn0HdYyV<(rf|>)XM&4gOZOorx%U*i!T(hb^)zSu1D}A;7NaxLU zT1KUPkaq4?Y`5+qjVH}oa=xqh>X+6tu30C1s-+oHOT9LG)$1>g`f+911v&4|P76L! zd+mX%<>ocIR5YyJz^KYejw(lL*ov-|tM>_Qc6j61p;;dfX6pwO?K!gk!;C4(VW)n0 zqxu0yRUoyRzSnu{nfX6oTYRid`qAGqUN~{#W=QVHF1t2d)x}1hYv8C#q=p3k@j>kI zcI_9}j32Q-^ZVL=*O~I!+h5(B@@=D8XN}GuIiGc<6;f-8o}ceDyIiPHvuw*PjmIU| z34U_sh3|922d{o=$IW#eozJ?`8mYC`PPtO%rOOr94*e;oMSfcUZR6jm)PKSDc~e@| zY&~g5!(z^?7E*(^9GJ0x}_T>pA`(EUHR-^d#>s`ry$ zE?e=+Cb6j6c)8S36-X`d!w*xYuWNJs(6|*Jy*%UX;j0dexe@*Q(Hq<9%)NJLTFwAR zRU)-mi_fO^3qA8e-D=OYT=3@Z7OkWHJW>DN)h6S^PFGlP>BY5M)A+_e9poOpQ|NCCn*qdiQ9F`N@s$Sn$8$^U340|}>Oo`9l zdfKO2*6`xHBz|O>rSOG#7JjRiWnLof5GRVjw^KVNY~l_{o7_5OlUt{WBHcR6Ca12P zVUtr=j@jhYmE%NFPF*=+lUpZka_f{$Zk;BIcIzygoVxOcO-@~TW|LD_o)g75b>)Rk zZk@Erty4C+b(*NOTW8ti)KxHSa_TBDo1D4|oT!XbS3%h1)=8V(I%Shvr-{nCbruo* zyr8pE5ziO|Gb?g0ZH2wX&)Kl|L3>Dn-3p8G%M==JIQ_yTG8_6i2!QAghnq> zxYzwCJkA7r1b!7+cto3*XI8*W0B>GiUg+#>8rZjt-2k}DWwf)buv|v_m!-2TX<7Q0 zxw9;2nfsSrZBEO6?b5C`!!q8CoJmT%+6FEAwM#qNuC}0Mzcwy5pEjpuzjm~%&9EHp*N%3z4O;eVM?2c(EL!$!;|8#` z%V}EnYezZS zntMFMN=I!h)@?zb&L_AE}H5X2gRT+n(CM!LS2kqCy7uO zW7jDn)Wz6!8dMr}F?O9rgu2pHSH&PgU1_ST!iZ2;n(C@>5Z*J*(o|PP5TUM&T_=f9 zSH`YWM5rrc*J%*mg3K~@orRyv%wtvpy2VmT;8 zdh!C{5({vs^uVE9Nx7h4Nu(%OqY~0)tfm-|qB@J}3|ohui&Zs6jf@<)gVbRiwH6Mc*Gf$N&8Hb$1x&~>zW}m zjuQzF93nv^L4rsUDG+JKDIyJ0L>d%lPZP(8EpQN`p|qFP4N!Fh#1X5`K!uqH4iR@U ziyD+EC{s9Rxw>>SC1om#an#WsR@ZJFBeE!FIcK$o;ndYIP*;OdOncxUvjzthRUl3z zK$uemz?blANatC34Ml`Jd*&J%L^IdWq-go7azbOD9TxlLt%FZpufF#5{$V3~_n-bo zzxhq$rWNnD?Q-3#%R|kY22yJpj%ZCr1R47xuE`zInjE4v1*nGQfrG(nN)QIiiQFho zUrD?goqs~)2F_f#r&RNa)0XG%cs`@XOIt6NtX~_cibR#$LKA7{NYu1IG@UgJOzEIoDGy4Z^5qQBIi_#ZVW@ zkoklGqW(`%-4o2sB+Vx{=n0Oy%Z>>*Q&6U)7}ZJ2RG=^eq=+<#4o#U4FIK&}ejK7s*_n!B z3U!iHG?8{QEy^^U%sK|B4k+G2W*tVvoXk2LM5i!RP)xYQh$LkS4;)NZM}g28bBA$? zYKkgEHAO9oy15AkD8b%G)Q6Y}jM%QNV-a&O?Q;T0ZGxaE)sk+41eMhIrxnsoP!1(1 zBJGkLvwTFiaH0VpIkwNp_ublwoN}m>M17(F6#*3^wM1z@1_#4eh$Jf7yKsdm5;gr4 zf80}PU#Uf9IFoTr%s7dfJnFxA^E;B$WdEfNQF%!2h`{%=x9sL8x{W36rW&H|4 z7b<;N_3YAw67#Cv?7gt%@e1dwyfOW~!d0t0BFyOXo0(*Q zB$0h;GzdrAOvZ`9ztgx!{(t#b8sCvmwvT+#q9wC1fT-r-aG zeXeikdm10<9P1aZp7Qd|JwwhJup=q< zk+1p5+#hpRCpTW$sLQd1qn`U~%Cv+J+mEi5G;Z(fUH-CGMHUEO{Bz>uiSq|td&5{W zcXO*xBSOYcJU==y@WDSzI+c$vS@;oQ`_LDvu>H!1k+nX5_raC-KKN$9;6cq_Jz9I! z#;@+1=F)AST&eFDu6^rbYq2hB=ZW`|SC>j08a)2eU)xR=%h+`K_=)_0p^0}M5w;I~ zl5`Gm3J(6`{$c7_f1AhL#q%F&Bk9t4Y`%LcOU7-EZIv+UO#1o>R= zr5Fwgo0vn=Chm~3$*t2iNhfC6qreu)cupj40Jfl@u;f1p&4d+lwbg%Xy5GqI}DBEi9)f z_vucGlU-NSviqyuOc74DqGjRF=FYODW$s^Q&a$9o=3h3PWlqb6yNui39GY-I^hu0_dxd0ExtFdatP5JlF>%)Mj1X55T}!S)imRY(1-jd81&vH;XDX)!20R_qI^zVSa?Q1x;6>=Tp5=$KgUp~k?zWrLQLe_8mJv5#05{xd+wmJTrvVk$?dKF9k$ zG|W^LS_TQp#}yKbBPggmpGAdNf1ewB$0AS z5own+k>!#FN;g2^hKF7t=1@8#;x2I_0ZPLDg&>A+5x6$tBVu2GKn4^A$br)N8j&vP zn!@ok)3IcxEBiw+U3n%4g0w5F9ud|BN+fI*AcR8=R~Xl#Ba95Qp#dp6>J1HBx*_v1 zeWh&3;WwlaG`<`*6!r)W1yxC(&&gNF!r8SeG<@7W^phhLwRW%iXy1@}H8Sj~M!rss zm`_7fggbR%g6bLxnvv=nfz3t|QJS%lv}bIj9BydWYEUDJ;=VK+S&mXDC#4L-Rmw1+ zl)(_i6$Qsu%HR&$N*Mx_L0v5EGhki$l@uvys?<=@J|)XxTdA=@N*1CLN{yMT zBuS|;ca<7*C^Z&TiQLA*R%$FA_9-b)V~Hs3U1RMkVFs*QekBV^O$FTvDm9U$q^J_PO_WbbJM2@kNJ%3qpw!fGl!_Xp)RehOO&OG$ za;oGWIJQz#;jpdLRDzlcL=93>t`aJ-uKh}ylq{;GT+3GChQqcJXCQ7Ms-VQVtHeo( z3s;E?C~--Z(gVk*q#X7sX;M;%a#FHfB~(hYnc*rmGoaLrQ6+MlFhnm~OT#^*yE-516k|vT4W!iNLl&SCzM@O-x2H~@f-V0k=@KbOcib9dz{qenl zp2WHD{wW*?LHkQcE8p=J9%x;(EYo5h@qoB~t5{^t5dqjr2 zGSa>`NJdh!LNdK;XDRzS&C(9HvZX9gmPV9g*473noqOP*vNdxkOAv9FsIIjDwPx6V z+Q-%slHGM2W+UC91X`tC&cypqEyR5IrWWC-+4}Yav=Ix9> z4i5dk)@NOx?f9VT5oUYoHCv#4d*!rgFEAT6?ip-nA*j8W3)X@a9(phc8~YV)vL47smyBRkY5z?q&z>&8e_Esp8O9 z2^SM4grugdsDHC*NY1XXc`?W3=<&St_u-Sw4g#|=w2@Am4ji*#OhuA^|;bYz$f z8+W!23PFikG_3L>1gl}G$a0G$X6q>3+3?$-li{T;gSzmTow$?O$$&aGu6jp_pn#f! zm0pBk6)c0*Zjpd`C*i8+#3$Uj&~a6beV;5_zh%O)vX^3xWqW$Z#$7+o|0vOF{md`T zPL?+({v^)}d${d>3q83`e$17X;T^|(ZQPkTX6*ABD_&Uq{4-{@f!WYLo4IW)n$7ah z)=419F$*OLSPNEqQ3$J?qHK=YuyO8}oO0rP+w{>7;&<$QDdE-|<8Gh%wBglHLV~m6 zp554XcdwN{n%UZ$Q#NY+ZaMMAXQr3k^Yz5%w@zDH{h!~WKDl-H?e9MCc4=^aq?v7D zHsvurhTBGCwruU6Et@0AFpGfYuo_mtTCmb7@-WPXjXPV&^M?bE#(bZ+cGR@@M>l@2 zWyObE=f2ai!O~0l%P0PF`==jFkMiaOWsGCDho%)<_1vYSdt=^jc{Y7#=(TpAMhm4o%P<@_^`0pXBPMU{o?Y$;e|SwUg^!LS$0jpj2a&`eJZ-n>+^>GbN1uu zzczn4a@N*|onAkin$c*e=~bA`LL2S2k(do1PVV*QH4wDCn9E~!Hee+zgH^EHEwX4f z%RgJCua1nqo&R#CF2^o5-EwZnnsl{y--Yj%&rf*&>ovQ2&M-R*Z%*|$yX_0xw|M4n zujOTazPRkPkNVu|IO^?_yhoaC+y9k6jbbWsROC~8>cMF>{IQjz5rNp$Ec3pya! z%|HhM%g})=capmq=zxvep{qntKvBU;FG8>imceSbNT5SEQP6>kEObCocLN>3-I<$g zQ3uQ4p_@RELy?jMtOYB*D1=o`QFo3G*tnmQ!3;r-^T1&(bWk3%hv6n`bm*@A9l9f_ z2ZN%3<**u7z*?}l?{$M3K2w3GL_Y&xUjeDkhQnL0!9oB+Ha&H4x!ZNo=qeCz4?-0%r=IDWq+oP98nu4YUtGx)pTCgbZW4J{MJ$kEx9!T!Pyk;>2mZOJ; z6;5&=h7Q=c9eOJSB@`)1c@cuuupHKMizGVqk^T;Sq{r-QAW6Y8?2QG>eI5G>SO%7` z99F>!SPd&-E&Ms0fpTW{Gw^k{pWz8M`!VuRg;%KAkNb$e2KN(QNFg9$6|C}N4OTm| z^`jGyjk`mA4Fu7nFY}oF4J1og2CHDXTSO<$awHkBct0-t#+z@>Db~8-D6#9)Zc#vj@V-ge4vyuzPlMwxzgC?LySTF`m~rZI5YP2-G1L(X!YHWKIi8A zdBYUSn-dy5{dkZ5x5ivw^49ui!t2i4-Y&WBh>dUD?z--qZ%@Q7=xqw^&579GZ`JwN zhF)v?{z&=yAwKiciJzYd&pb7;{ZEGj2Hk&Yttn_nw8u1QM=-0&(0)MPyqC5_zJG4% z?DIYIpP7>|FDN+hW(&RJg%#_6{p-#;)8yWq(sMICv32YIE-vid^kK`g<);pseq+rq zn-3j1zq5Pz6>-uug*PYo+{lM*M-Se6z2~sAH@_U+Jt5`6aPOy8?oCSFu<=xv!JSQ0 zBI)}1rSk^gS#t8%OT#Kv>@gwdM8<)f5BJP2(Qih??}hF!GELtZVK|UxfW%gW_= 3) { + (batchPtr, _length) = BatchHeaderV3Codec.loadAndValidate(_batchHeader); + } + + // the code for compute batch hash is the same for V0, V1, V2, V3 + // also the `_batchIndex` and `_totalL1MessagesPoppedOverall`. + _batchHash = BatchHeaderV0Codec.computeBatchHash(batchPtr, _length); + _batchIndex = BatchHeaderV0Codec.getBatchIndex(batchPtr); + _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); + + // only check when genesis is imported + if ( + !overrideBatchHashCheck && + committedBatches[_batchIndex] != _batchHash && + finalizedStateRoots[0] != bytes32(0) + ) { + revert ErrorIncorrectBatchHash(); + } + + if (overrideBatchHashCheck) { + _batchHash = committedBatches[_batchIndex]; + } + } +} diff --git a/src/mocks/ScrollChainMockFinalize.sol b/src/mocks/ScrollChainMockFinalize.sol index 3e576b3d..e4ff3758 100644 --- a/src/mocks/ScrollChainMockFinalize.sol +++ b/src/mocks/ScrollChainMockFinalize.sol @@ -27,94 +27,56 @@ contract ScrollChainMockFinalize is ScrollChain { * Public Mutating Functions * *****************************/ - /// @notice Finalize batch without proof, see the comments of {ScrollChain-finalizeBatchWithProof}. - function finalizeBatch( + /// @notice Finalize 4844 batch without proof, See the comments of {ScrollChain-finalizeBatchWithProof4844}. + function finalizeBatch4844( bytes calldata _batchHeader, - bytes32 _prevStateRoot, + bytes32, /*_prevStateRoot*/ bytes32 _postStateRoot, - bytes32 _withdrawRoot + bytes32 _withdrawRoot, + bytes calldata _blobDataProof ) external OnlyProver whenNotPaused { - if (_prevStateRoot == bytes32(0)) revert ErrorPreviousStateRootIsZero(); - if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); - - // compute batch hash and verify - (uint256 memPtr, bytes32 _batchHash, uint256 _batchIndex, ) = _loadBatchHeader(_batchHeader); - - // verify previous state root. - if (finalizedStateRoots[_batchIndex - 1] != _prevStateRoot) revert ErrorIncorrectPreviousStateRoot(); - - // avoid duplicated verification - if (finalizedStateRoots[_batchIndex] != bytes32(0)) revert ErrorBatchIsAlreadyVerified(); - - // check and update lastFinalizedBatchIndex - unchecked { - if (lastFinalizedBatchIndex + 1 != _batchIndex) revert ErrorIncorrectBatchIndex(); - lastFinalizedBatchIndex = _batchIndex; - } + (uint256 batchPtr, bytes32 _batchHash, uint256 _batchIndex) = _beforeFinalizeBatch( + _batchHeader, + _postStateRoot + ); - // record state root and withdraw root - finalizedStateRoots[_batchIndex] = _postStateRoot; - withdrawRoots[_batchIndex] = _withdrawRoot; + // verify blob versioned hash + bytes32 _blobVersionedHash = BatchHeaderV1Codec.getBlobVersionedHash(batchPtr); + _checkBlobVersionedHash(_blobVersionedHash, _blobDataProof); // Pop finalized and non-skipped message from L1MessageQueue. - _popL1Messages( - BatchHeaderV0Codec.getSkippedBitmapPtr(memPtr), - BatchHeaderV0Codec.getTotalL1MessagePopped(memPtr), - BatchHeaderV0Codec.getL1MessagePopped(memPtr) + uint256 _totalL1MessagesPoppedOverall = BatchHeaderV0Codec.getTotalL1MessagePopped(batchPtr); + _popL1MessagesMemory( + BatchHeaderV1Codec.getSkippedBitmapPtr(batchPtr), + _totalL1MessagesPoppedOverall, + BatchHeaderV0Codec.getL1MessagePopped(batchPtr) ); - emit FinalizeBatch(_batchIndex, _batchHash, _postStateRoot, _withdrawRoot); + _afterFinalizeBatch(_totalL1MessagesPoppedOverall, _batchIndex, _batchHash, _postStateRoot, _withdrawRoot); } - /// @notice Finalize 4844 batch without proof, See the comments of {ScrollChain-finalizeBatchWithProof4844}. - function finalizeBatch4844( + /// @notice Finalize bundle without proof, See the comments of {ScrollChain-finalizeBundleWithProof}. + function finalizeBundle( bytes calldata _batchHeader, - bytes32 _prevStateRoot, bytes32 _postStateRoot, - bytes32 _withdrawRoot, - bytes calldata _blobDataProof + bytes32 _withdrawRoot ) external OnlyProver whenNotPaused { - if (_prevStateRoot == bytes32(0)) revert ErrorPreviousStateRootIsZero(); if (_postStateRoot == bytes32(0)) revert ErrorStateRootIsZero(); - // compute batch hash and verify - (uint256 memPtr, bytes32 _batchHash, uint256 _batchIndex, ) = _loadBatchHeader(_batchHeader); - bytes32 _blobVersionedHash = BatchHeaderV1Codec.getBlobVersionedHash(memPtr); - - // Calls the point evaluation precompile and verifies the output - { - (bool success, bytes memory data) = POINT_EVALUATION_PRECOMPILE_ADDR.staticcall( - abi.encodePacked(_blobVersionedHash, _blobDataProof) - ); - // We verify that the point evaluation precompile call was successful by testing the latter 32 bytes of the - // response is equal to BLS_MODULUS as defined in https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile - if (!success) revert ErrorCallPointEvaluationPrecompileFailed(); - (, uint256 result) = abi.decode(data, (uint256, uint256)); - if (result != BLS_MODULUS) revert ErrorUnexpectedPointEvaluationPrecompileOutput(); - } - - // verify previous state root. - if (finalizedStateRoots[_batchIndex - 1] != _prevStateRoot) revert ErrorIncorrectPreviousStateRoot(); - - // avoid duplicated verification - if (finalizedStateRoots[_batchIndex] != bytes32(0)) revert ErrorBatchIsAlreadyVerified(); - - // check and update lastFinalizedBatchIndex - unchecked { - if (lastFinalizedBatchIndex + 1 != _batchIndex) revert ErrorIncorrectBatchIndex(); - lastFinalizedBatchIndex = _batchIndex; - } + // compute pending batch hash and verify + (, bytes32 _batchHash, uint256 _batchIndex, uint256 _totalL1MessagesPoppedOverall) = _loadBatchHeader( + _batchHeader + ); + if (_batchIndex <= lastFinalizedBatchIndex) revert ErrorBatchIsAlreadyVerified(); - // record state root and withdraw root + // store in state + // @note we do not store intermediate finalized roots + lastFinalizedBatchIndex = _batchIndex; finalizedStateRoots[_batchIndex] = _postStateRoot; withdrawRoots[_batchIndex] = _withdrawRoot; // Pop finalized and non-skipped message from L1MessageQueue. - _popL1Messages( - BatchHeaderV1Codec.getSkippedBitmapPtr(memPtr), - BatchHeaderV1Codec.getTotalL1MessagePopped(memPtr), - BatchHeaderV1Codec.getL1MessagePopped(memPtr) - ); + _finalizePoppedL1Messages(_totalL1MessagesPoppedOverall); emit FinalizeBatch(_batchIndex, _batchHash, _postStateRoot, _withdrawRoot); } diff --git a/src/test/L1CustomERC20Gateway.t.sol b/src/test/L1CustomERC20Gateway.t.sol index a1b667d2..ecc0b2cc 100644 --- a/src/test/L1CustomERC20Gateway.t.sol +++ b/src/test/L1CustomERC20Gateway.t.sol @@ -195,7 +195,9 @@ contract L1CustomERC20GatewayTest is L1GatewayTestBase { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); assertEq(messageQueue.pendingQueueIndex(), 1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); hevm.stopPrank(); // drop message 0 diff --git a/src/test/L1ERC1155Gateway.t.sol b/src/test/L1ERC1155Gateway.t.sol index c9c7836c..96b44970 100644 --- a/src/test/L1ERC1155Gateway.t.sol +++ b/src/test/L1ERC1155Gateway.t.sol @@ -222,6 +222,8 @@ contract L1ERC1155GatewayTest is L1GatewayTestBase, ERC1155TokenReceiver { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); @@ -260,6 +262,8 @@ contract L1ERC1155GatewayTest is L1GatewayTestBase, ERC1155TokenReceiver { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/src/test/L1ERC721Gateway.t.sol b/src/test/L1ERC721Gateway.t.sol index b76163d8..5f568f06 100644 --- a/src/test/L1ERC721Gateway.t.sol +++ b/src/test/L1ERC721Gateway.t.sol @@ -210,6 +210,8 @@ contract L1ERC721GatewayTest is L1GatewayTestBase, ERC721TokenReceiver { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); @@ -244,6 +246,8 @@ contract L1ERC721GatewayTest is L1GatewayTestBase, ERC721TokenReceiver { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/src/test/L1ETHGateway.t.sol b/src/test/L1ETHGateway.t.sol index d03dee7a..565d5d5a 100644 --- a/src/test/L1ETHGateway.t.sol +++ b/src/test/L1ETHGateway.t.sol @@ -163,6 +163,8 @@ contract L1ETHGatewayTest is L1GatewayTestBase { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/src/test/L1GatewayTestBase.t.sol b/src/test/L1GatewayTestBase.t.sol index a47b5945..c5889350 100644 --- a/src/test/L1GatewayTestBase.t.sol +++ b/src/test/L1GatewayTestBase.t.sol @@ -9,12 +9,12 @@ import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transp import {EnforcedTxGateway} from "../L1/gateways/EnforcedTxGateway.sol"; import {L1MessageQueueWithGasPriceOracle} from "../L1/rollup/L1MessageQueueWithGasPriceOracle.sol"; import {L2GasPriceOracle} from "../L1/rollup/L2GasPriceOracle.sol"; -import {ScrollChain, IScrollChain} from "../L1/rollup/ScrollChain.sol"; import {Whitelist} from "../L2/predeploys/Whitelist.sol"; import {L1ScrollMessenger} from "../L1/L1ScrollMessenger.sol"; import {L2ScrollMessenger} from "../L2/L2ScrollMessenger.sol"; import {EmptyContract} from "../misc/EmptyContract.sol"; +import {ScrollChainMockBlob} from "../mocks/ScrollChainMockBlob.sol"; import {MockRollupVerifier} from "./mocks/MockRollupVerifier.sol"; import {ScrollTestBase} from "./ScrollTestBase.t.sol"; @@ -62,7 +62,7 @@ abstract contract L1GatewayTestBase is ScrollTestBase { L1MessageQueueWithGasPriceOracle internal messageQueue; L2GasPriceOracle internal gasOracle; EnforcedTxGateway internal enforcedTxGateway; - ScrollChain internal rollup; + ScrollChainMockBlob internal rollup; MockRollupVerifier internal verifier; @@ -87,7 +87,7 @@ abstract contract L1GatewayTestBase is ScrollTestBase { // deploy proxy and contracts in L1 l1Messenger = L1ScrollMessenger(payable(_deployProxy(address(0)))); messageQueue = L1MessageQueueWithGasPriceOracle(_deployProxy(address(0))); - rollup = ScrollChain(_deployProxy(address(0))); + rollup = ScrollChainMockBlob(_deployProxy(address(0))); enforcedTxGateway = EnforcedTxGateway(_deployProxy(address(new EnforcedTxGateway()))); gasOracle = L2GasPriceOracle(_deployProxy(address(new L2GasPriceOracle()))); whitelist = new Whitelist(address(this)); @@ -124,7 +124,7 @@ abstract contract L1GatewayTestBase is ScrollTestBase { // Upgrade the ScrollChain implementation and initialize admin.upgrade( ITransparentUpgradeableProxy(address(rollup)), - address(new ScrollChain(1233, address(messageQueue), address(verifier))) + address(new ScrollChainMockBlob(1233, address(messageQueue), address(verifier))) ); rollup.initialize(address(messageQueue), address(0), 44); @@ -149,31 +149,39 @@ abstract contract L1GatewayTestBase is ScrollTestBase { rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); bytes32 batchHash0 = rollup.committedBatches(0); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + rollup.setBlobVersionedHash(blobVersionedHash); + // commit one batch bytes[] memory chunks = new bytes[](1); bytes memory chunk0 = new bytes(1 + 60); chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; hevm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); hevm.stopPrank(); - bytes memory batchHeader1 = new bytes(89); + bytes memory batchHeader1 = new bytes(121); assembly { - mstore(add(batchHeader1, 0x20), 0) // version + mstore8(add(batchHeader1, 0x20), 1) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash - mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash } hevm.startPrank(address(0)); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), messageHash, + blobDataProof, new bytes(0) ); hevm.stopPrank(); diff --git a/src/test/L1MessageQueue.t.sol b/src/test/L1MessageQueue.t.sol new file mode 100644 index 00000000..b2a3fb89 --- /dev/null +++ b/src/test/L1MessageQueue.t.sol @@ -0,0 +1,628 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {DSTestPlus} from "solmate/test/utils/DSTestPlus.sol"; + +import {ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +import {IL1MessageQueue} from "../L1/rollup/IL1MessageQueue.sol"; +import {L1MessageQueue} from "../L1/rollup/L1MessageQueue.sol"; +import {L2GasPriceOracle} from "../L1/rollup/L2GasPriceOracle.sol"; +import {Whitelist} from "../L2/predeploys/Whitelist.sol"; + +import {ScrollTestBase} from "./ScrollTestBase.t.sol"; + +contract L1MessageQueueTest is ScrollTestBase { + // events + event QueueTransaction( + address indexed sender, + address indexed target, + uint256 value, + uint64 queueIndex, + uint256 gasLimit, + bytes data + ); + event DequeueTransaction(uint256 startIndex, uint256 count, uint256 skippedBitmap); + event ResetDequeuedTransaction(uint256 startIndex); + event FinalizedDequeuedTransaction(uint256 finalizedIndex); + event DropTransaction(uint256 index); + event UpdateGasOracle(address indexed _oldGasOracle, address indexed _newGasOracle); + event UpdateMaxGasLimit(uint256 _oldMaxGasLimit, uint256 _newMaxGasLimit); + + address private FakeScrollChain = 0x1000000000000000000000000000000000000001; + address private FakeMessenger = 0x1000000000000000000000000000000000000002; + address private FakeGateway = 0x1000000000000000000000000000000000000003; + address private FakeSigner = 0x1000000000000000000000000000000000000004; + + L1MessageQueue private queue; + L2GasPriceOracle private gasOracle; + + function setUp() public { + __ScrollTestBase_setUp(); + + queue = L1MessageQueue(_deployProxy(address(0))); + gasOracle = L2GasPriceOracle(_deployProxy(address(new L2GasPriceOracle()))); + + // Upgrade the L1MessageQueue implementation and initialize + admin.upgrade( + ITransparentUpgradeableProxy(address(queue)), + address(new L1MessageQueue(FakeMessenger, FakeScrollChain, FakeGateway)) + ); + gasOracle.initialize(21000, 50000, 8, 16); + queue.initialize(address(1), address(1), address(1), address(gasOracle), 10000000); + } + + function testInitialize() external { + assertEq(queue.owner(), address(this)); + assertEq(queue.messenger(), FakeMessenger); + assertEq(queue.scrollChain(), FakeScrollChain); + assertEq(queue.enforcedTxGateway(), FakeGateway); + assertEq(queue.gasOracle(), address(gasOracle)); + assertEq(queue.maxGasLimit(), 10000000); + + hevm.expectRevert("Initializable: contract is already initialized"); + queue.initialize(address(0), address(0), address(0), address(0), 0); + } + + function testUpdateGasOracle(address newGasOracle) external { + // call by non-owner, should revert + hevm.startPrank(address(1)); + hevm.expectRevert("Ownable: caller is not the owner"); + queue.updateGasOracle(newGasOracle); + hevm.stopPrank(); + + // call by owner, should succeed + assertEq(queue.gasOracle(), address(gasOracle)); + hevm.expectEmit(true, true, false, true); + emit UpdateGasOracle(address(gasOracle), newGasOracle); + queue.updateGasOracle(newGasOracle); + assertEq(queue.gasOracle(), newGasOracle); + } + + function testUpdateMaxGasLimit(uint256 newMaxGasLimit) external { + // call by non-owner, should revert + hevm.startPrank(address(1)); + hevm.expectRevert("Ownable: caller is not the owner"); + queue.updateMaxGasLimit(newMaxGasLimit); + hevm.stopPrank(); + + // call by owner, should succeed + assertEq(queue.maxGasLimit(), 10000000); + hevm.expectEmit(true, true, false, true); + emit UpdateMaxGasLimit(10000000, newMaxGasLimit); + queue.updateMaxGasLimit(newMaxGasLimit); + assertEq(queue.maxGasLimit(), newMaxGasLimit); + } + + function testAppendCrossDomainMessage(uint256 gasLimit, bytes memory data) external { + gasLimit = bound(gasLimit, 21000 + data.length * 16, 10000000); + + // should revert, when non-messenger call + hevm.expectRevert("Only callable by the L1ScrollMessenger"); + queue.appendCrossDomainMessage(address(0), 0, "0x"); + + hevm.startPrank(FakeMessenger); + + // should revert, when exceed maxGasLimit + hevm.expectRevert("Gas limit must not exceed maxGasLimit"); + queue.appendCrossDomainMessage(address(0), 10000001, "0x"); + + // should revert, when below intrinsic gas + hevm.expectRevert("Insufficient gas limit, must be above intrinsic gas"); + queue.appendCrossDomainMessage(address(0), 0, "0x"); + + // should succeed + assertEq(queue.nextCrossDomainMessageIndex(), 0); + address sender = address(uint160(FakeMessenger) + uint160(0x1111000000000000000000000000000000001111)); + bytes32 hash0 = queue.computeTransactionHash(sender, 0, 0, FakeSigner, gasLimit, data); + hevm.expectEmit(true, true, false, true); + emit QueueTransaction(sender, FakeSigner, 0, 0, gasLimit, data); + queue.appendCrossDomainMessage(FakeSigner, gasLimit, data); + assertEq(queue.nextCrossDomainMessageIndex(), 1); + assertEq(queue.getCrossDomainMessage(0), hash0); + + bytes32 hash1 = queue.computeTransactionHash(sender, 1, 0, FakeSigner, gasLimit, data); + hevm.expectEmit(true, true, false, true); + emit QueueTransaction(sender, FakeSigner, 0, 1, gasLimit, data); + queue.appendCrossDomainMessage(FakeSigner, gasLimit, data); + assertEq(queue.nextCrossDomainMessageIndex(), 2); + assertEq(queue.getCrossDomainMessage(0), hash0); + assertEq(queue.getCrossDomainMessage(1), hash1); + + hevm.stopPrank(); + } + + function testAppendEnforcedTransaction( + uint256 value, + uint256 gasLimit, + bytes memory data + ) external { + gasLimit = bound(gasLimit, 21000 + data.length * 16, 10000000); + + // should revert, when non-gateway call + hevm.expectRevert("Only callable by the EnforcedTxGateway"); + queue.appendEnforcedTransaction(FakeSigner, address(0), 0, 0, "0x"); + + hevm.startPrank(FakeGateway); + + // should revert, when sender is not EOA + hevm.expectRevert("only EOA"); + queue.appendEnforcedTransaction(address(this), address(0), 0, 0, "0x"); + + // should revert, when exceed maxGasLimit + hevm.expectRevert("Gas limit must not exceed maxGasLimit"); + queue.appendEnforcedTransaction(FakeSigner, address(0), 0, 10000001, "0x"); + + // should revert, when below intrinsic gas + hevm.expectRevert("Insufficient gas limit, must be above intrinsic gas"); + queue.appendEnforcedTransaction(FakeSigner, address(0), 0, 0, "0x"); + + // should succeed + assertEq(queue.nextCrossDomainMessageIndex(), 0); + address sender = address(uint160(FakeMessenger) + uint160(0x1111000000000000000000000000000000001111)); + bytes32 hash0 = queue.computeTransactionHash(sender, 0, value, FakeSigner, gasLimit, data); + hevm.expectEmit(true, true, false, true); + emit QueueTransaction(sender, FakeSigner, value, 0, gasLimit, data); + queue.appendEnforcedTransaction(sender, FakeSigner, value, gasLimit, data); + assertEq(queue.nextCrossDomainMessageIndex(), 1); + assertEq(queue.getCrossDomainMessage(0), hash0); + + bytes32 hash1 = queue.computeTransactionHash(sender, 1, value, FakeSigner, gasLimit, data); + hevm.expectEmit(true, true, false, true); + emit QueueTransaction(sender, FakeSigner, value, 1, gasLimit, data); + queue.appendEnforcedTransaction(sender, FakeSigner, value, gasLimit, data); + assertEq(queue.nextCrossDomainMessageIndex(), 2); + assertEq(queue.getCrossDomainMessage(0), hash0); + assertEq(queue.getCrossDomainMessage(1), hash1); + + hevm.stopPrank(); + } + + function testPopCrossDomainMessage(uint256 bitmap) external { + // should revert, when non-scrollChain call + hevm.expectRevert("Only callable by the ScrollChain"); + queue.popCrossDomainMessage(0, 0, 0); + + // should revert, when pop too many messages + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("pop too many messages"); + queue.popCrossDomainMessage(0, 257, 0); + hevm.stopPrank(); + + // should revert, when start index mismatch + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("start index mismatch"); + queue.popCrossDomainMessage(1, 256, 0); + hevm.stopPrank(); + + // should succeed + // append 512 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 512; ++i) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // pop 50 messages with no skip + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(0, 50, 0); + queue.popCrossDomainMessage(0, 50, 0); + assertEq(queue.pendingQueueIndex(), 50); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + for (uint256 i = 0; i < 50; i++) { + assertBoolEq(queue.isMessageSkipped(i), false); + assertBoolEq(queue.isMessageDropped(i), false); + } + + // pop 10 messages all skip + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(50, 10, 1023); + queue.popCrossDomainMessage(50, 10, 1023); + assertEq(queue.pendingQueueIndex(), 60); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + for (uint256 i = 50; i < 60; i++) { + assertBoolEq(queue.isMessageSkipped(i), true); + assertBoolEq(queue.isMessageDropped(i), false); + } + assertBoolEq(queue.isMessageSkipped(60), false); + + // pop 20 messages, skip first 5 + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(60, 20, 31); + queue.popCrossDomainMessage(60, 20, 31); + assertEq(queue.pendingQueueIndex(), 80); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + for (uint256 i = 60; i < 65; i++) { + assertBoolEq(queue.isMessageSkipped(i), true); + assertBoolEq(queue.isMessageDropped(i), false); + } + for (uint256 i = 65; i < 80; i++) { + assertBoolEq(queue.isMessageSkipped(i), false); + assertBoolEq(queue.isMessageDropped(i), false); + } + + // pop 256 messages with random skip + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(80, 256, bitmap); + queue.popCrossDomainMessage(80, 256, bitmap); + assertEq(queue.pendingQueueIndex(), 336); + for (uint256 i = 80; i < 80 + 256; i++) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap >> (i - 80)) & 1) == 1); + assertBoolEq(queue.isMessageDropped(i), false); + } + + hevm.stopPrank(); + } + + function testPopCrossDomainMessageRandom( + uint256 count1, + uint256 count2, + uint256 count3, + uint256 bitmap1, + uint256 bitmap2, + uint256 bitmap3 + ) external { + count1 = bound(count1, 1, 256); + count2 = bound(count2, 1, 256); + count3 = bound(count3, 1, 256); + // append count1 + count2 + count3 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < count1 + count2 + count3; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + hevm.startPrank(FakeScrollChain); + // first pop `count1` messages + hevm.expectEmit(false, false, false, true); + if (count1 == 256) { + emit DequeueTransaction(0, count1, bitmap1); + } else { + emit DequeueTransaction(0, count1, bitmap1 & ((1 << count1) - 1)); + } + queue.popCrossDomainMessage(0, count1, bitmap1); + assertEq(queue.pendingQueueIndex(), count1); + for (uint256 i = 0; i < count1; i++) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1 >> i) & 1) == 1); + assertBoolEq(queue.isMessageDropped(i), false); + } + + // then pop `count2` messages + hevm.expectEmit(false, false, false, true); + if (count2 == 256) { + emit DequeueTransaction(count1, count2, bitmap2); + } else { + emit DequeueTransaction(count1, count2, bitmap2 & ((1 << count2) - 1)); + } + queue.popCrossDomainMessage(count1, count2, bitmap2); + assertEq(queue.pendingQueueIndex(), count1 + count2); + for (uint256 i = 0; i < count2; i++) { + assertBoolEq(queue.isMessageSkipped(i + count1), ((bitmap2 >> i) & 1) == 1); + assertBoolEq(queue.isMessageDropped(i + count1), false); + } + + // last pop `count3` messages + hevm.expectEmit(false, false, false, true); + if (count3 == 256) { + emit DequeueTransaction(count1 + count2, count3, bitmap3); + } else { + emit DequeueTransaction(count1 + count2, count3, bitmap3 & ((1 << count3) - 1)); + } + queue.popCrossDomainMessage(count1 + count2, count3, bitmap3); + assertEq(queue.pendingQueueIndex(), count1 + count2 + count3); + for (uint256 i = 0; i < count3; i++) { + assertBoolEq(queue.isMessageSkipped(i + count1 + count2), ((bitmap3 >> i) & 1) == 1); + assertBoolEq(queue.isMessageDropped(i + count1 + count2), false); + } + hevm.stopPrank(); + } + + function testResetPoppedCrossDomainMessage(uint256 startIndex) external { + // should revert, when non-scrollChain call + hevm.expectRevert("Only callable by the ScrollChain"); + queue.resetPoppedCrossDomainMessage(0); + + // should do nothing + hevm.startPrank(FakeScrollChain); + queue.resetPoppedCrossDomainMessage(0); + hevm.stopPrank(); + + // append 512 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 512; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // pop 256 messages with no skip + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(0, 256, 0); + queue.popCrossDomainMessage(0, 256, 0); + assertEq(queue.pendingQueueIndex(), 256); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + hevm.stopPrank(); + + // finalize 128 messages + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit FinalizedDequeuedTransaction(127); + queue.finalizePoppedCrossDomainMessage(128); + assertEq(queue.nextUnfinalizedQueueIndex(), 128); + hevm.stopPrank(); + + // should revert, when reset finalized messages + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("reset finalized messages"); + queue.resetPoppedCrossDomainMessage(127); + hevm.stopPrank(); + + // should revert, when reset pending messages + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("reset pending messages"); + queue.resetPoppedCrossDomainMessage(257); + hevm.stopPrank(); + + // should succeed + startIndex = bound(startIndex, 128, 256); + hevm.startPrank(FakeScrollChain); + if (startIndex < 256) { + hevm.expectEmit(false, false, false, true); + emit ResetDequeuedTransaction(startIndex); + } + queue.resetPoppedCrossDomainMessage(startIndex); + assertEq(queue.pendingQueueIndex(), startIndex); + assertEq(queue.nextUnfinalizedQueueIndex(), 128); + hevm.stopPrank(); + } + + // pop, reset, pop, reset, pop + function testResetPoppedCrossDomainMessageRandom( + uint256 bitmap1, + uint256 bitmap2, + uint256 startIndex1, + uint256 startIndex2 + ) external { + // append 1024 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 512; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // first pop 512 messages + hevm.startPrank(FakeScrollChain); + queue.popCrossDomainMessage(0, 256, bitmap1); + assertEq(queue.pendingQueueIndex(), 256); + queue.popCrossDomainMessage(256, 256, bitmap2); + assertEq(queue.pendingQueueIndex(), 512); + hevm.stopPrank(); + + for (uint256 i = 0; i < 512; ++i) { + if (i < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> i) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (i - 256)) & 1 == 1); + } + } + + // first reset + startIndex1 = bound(startIndex1, 0, 512); + hevm.startPrank(FakeScrollChain); + queue.resetPoppedCrossDomainMessage(startIndex1); + hevm.stopPrank(); + assertEq(queue.pendingQueueIndex(), startIndex1); + for (uint256 i = 0; i < 512; ++i) { + if (i >= startIndex1) { + assertBoolEq(queue.isMessageSkipped(i), false); + continue; + } + if (i < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> i) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (i - 256)) & 1 == 1); + } + } + + // next pop 512 messages + hevm.startPrank(FakeScrollChain); + queue.popCrossDomainMessage(startIndex1, 256, bitmap1); + assertEq(queue.pendingQueueIndex(), startIndex1 + 256); + queue.popCrossDomainMessage(startIndex1 + 256, 256, bitmap2); + assertEq(queue.pendingQueueIndex(), startIndex1 + 512); + hevm.stopPrank(); + + for (uint256 i = 0; i < startIndex1 + 512; ++i) { + if (i < startIndex1) { + if (i < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> i) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (i - 256)) & 1 == 1); + } + } else { + uint256 offset = i - startIndex1; + if (offset < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> offset) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (offset - 256)) & 1 == 1); + } + } + } + + // second reset + startIndex2 = bound(startIndex2, 0, startIndex1 + 512); + hevm.startPrank(FakeScrollChain); + queue.resetPoppedCrossDomainMessage(startIndex2); + hevm.stopPrank(); + assertEq(queue.pendingQueueIndex(), startIndex2); + for (uint256 i = 0; i < startIndex1 + 512; ++i) { + if (i >= startIndex2) { + assertBoolEq(queue.isMessageSkipped(i), false); + continue; + } + if (i < startIndex1) { + if (i < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> i) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (i - 256)) & 1 == 1); + } + } else { + uint256 offset = i - startIndex1; + if (offset < 256) { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap1) >> offset) & 1 == 1); + } else { + assertBoolEq(queue.isMessageSkipped(i), ((bitmap2) >> (offset - 256)) & 1 == 1); + } + } + } + } + + function testFinalizePoppedCrossDomainMessage() external { + // should revert, when non-scrollChain call + hevm.expectRevert("Only callable by the ScrollChain"); + queue.finalizePoppedCrossDomainMessage(0); + + // append 10 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 10; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // pop 5 messages with no skip + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(0, 5, 0); + queue.popCrossDomainMessage(0, 5, 0); + assertEq(queue.pendingQueueIndex(), 5); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + hevm.stopPrank(); + + // should revert, when finalized index too large + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("finalized index too large"); + queue.finalizePoppedCrossDomainMessage(6); + hevm.stopPrank(); + + // should succeed + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit FinalizedDequeuedTransaction(4); + queue.finalizePoppedCrossDomainMessage(5); + assertEq(queue.nextUnfinalizedQueueIndex(), 5); + hevm.stopPrank(); + + // should revert, finalized index too small + hevm.startPrank(FakeScrollChain); + hevm.expectRevert("finalized index too small"); + queue.finalizePoppedCrossDomainMessage(4); + hevm.stopPrank(); + + // should do nothing + hevm.startPrank(FakeScrollChain); + queue.finalizePoppedCrossDomainMessage(5); + assertEq(queue.nextUnfinalizedQueueIndex(), 5); + hevm.stopPrank(); + } + + function testDropCrossDomainMessageFailed() external { + // should revert, when non-messenger call + hevm.expectRevert("Only callable by the L1ScrollMessenger"); + queue.dropCrossDomainMessage(0); + + // should revert, when drop non-skipped message + // append 10 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 10; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // pop 5 messages with no skip + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(0, 5, 0); + queue.popCrossDomainMessage(0, 5, 0); + assertEq(queue.pendingQueueIndex(), 5); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + hevm.stopPrank(); + + // drop pending message + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 5; i++) { + hevm.expectRevert("cannot drop pending message"); + queue.dropCrossDomainMessage(i); + } + hevm.stopPrank(); + + hevm.startPrank(FakeScrollChain); + queue.finalizePoppedCrossDomainMessage(5); + hevm.stopPrank(); + assertEq(queue.pendingQueueIndex(), 5); + assertEq(queue.nextUnfinalizedQueueIndex(), 5); + + // drop non-skipped message + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 5; i++) { + hevm.expectRevert("drop non-skipped message"); + queue.dropCrossDomainMessage(i); + } + hevm.stopPrank(); + + // drop pending message + hevm.startPrank(FakeMessenger); + for (uint256 i = 5; i < 10; i++) { + hevm.expectRevert("cannot drop pending message"); + queue.dropCrossDomainMessage(i); + } + hevm.stopPrank(); + } + + function testDropCrossDomainMessageSucceed() external { + // append 10 messages + hevm.startPrank(FakeMessenger); + for (uint256 i = 0; i < 10; i++) { + queue.appendCrossDomainMessage(address(0), 1000000, "0x"); + } + hevm.stopPrank(); + + // pop 10 messages, all skipped + hevm.startPrank(FakeScrollChain); + hevm.expectEmit(false, false, false, true); + emit DequeueTransaction(0, 10, 0x3ff); + queue.popCrossDomainMessage(0, 10, 0x3ff); + assertEq(queue.pendingQueueIndex(), 10); + assertEq(queue.nextUnfinalizedQueueIndex(), 0); + queue.finalizePoppedCrossDomainMessage(5); + assertEq(queue.pendingQueueIndex(), 10); + assertEq(queue.nextUnfinalizedQueueIndex(), 5); + hevm.stopPrank(); + + for (uint256 i = 0; i < 5; i++) { + assertBoolEq(queue.isMessageSkipped(i), true); + assertBoolEq(queue.isMessageDropped(i), false); + hevm.startPrank(FakeMessenger); + hevm.expectEmit(false, false, false, true); + emit DropTransaction(i); + queue.dropCrossDomainMessage(i); + + hevm.expectRevert("message already dropped"); + queue.dropCrossDomainMessage(i); + hevm.stopPrank(); + + assertBoolEq(queue.isMessageSkipped(i), true); + assertBoolEq(queue.isMessageDropped(i), true); + } + for (uint256 i = 5; i < 10; i++) { + assertBoolEq(queue.isMessageSkipped(i), true); + assertBoolEq(queue.isMessageDropped(i), false); + + hevm.startPrank(FakeMessenger); + hevm.expectRevert("cannot drop pending message"); + queue.dropCrossDomainMessage(i); + hevm.stopPrank(); + } + } +} diff --git a/src/test/L1ScrollMessengerTest.t.sol b/src/test/L1ScrollMessengerTest.t.sol index bd804e21..aae33cbd 100644 --- a/src/test/L1ScrollMessengerTest.t.sol +++ b/src/test/L1ScrollMessengerTest.t.sol @@ -256,6 +256,8 @@ contract L1ScrollMessengerTest is L1GatewayTestBase { // skip all 2 messages hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 2, 0x3); + messageQueue.finalizePoppedCrossDomainMessage(2); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 2); assertEq(messageQueue.pendingQueueIndex(), 2); hevm.stopPrank(); for (uint256 i = 0; i < 2; ++i) { @@ -281,6 +283,8 @@ contract L1ScrollMessengerTest is L1GatewayTestBase { // only first 3 are skipped hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(2, 4, 0x7); + messageQueue.finalizePoppedCrossDomainMessage(6); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 6); assertEq(messageQueue.pendingQueueIndex(), 6); hevm.stopPrank(); for (uint256 i = 2; i < 6; i++) { @@ -302,6 +306,8 @@ contract L1ScrollMessengerTest is L1GatewayTestBase { // skip all 5 messages hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(6, 5, 0x1f); + messageQueue.finalizePoppedCrossDomainMessage(11); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 11); assertEq(messageQueue.pendingQueueIndex(), 11); hevm.stopPrank(); for (uint256 i = 6; i < 11; ++i) { diff --git a/src/test/L1StandardERC20Gateway.t.sol b/src/test/L1StandardERC20Gateway.t.sol index 576c557d..548ef492 100644 --- a/src/test/L1StandardERC20Gateway.t.sol +++ b/src/test/L1StandardERC20Gateway.t.sol @@ -288,6 +288,8 @@ contract L1StandardERC20GatewayTest is L1GatewayTestBase { // skip message 0 and 1 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 2, 0x3); + messageQueue.finalizePoppedCrossDomainMessage(2); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 2); assertEq(messageQueue.pendingQueueIndex(), 2); hevm.stopPrank(); diff --git a/src/test/L1WETHGateway.t.sol b/src/test/L1WETHGateway.t.sol index f2a14425..3cbebc57 100644 --- a/src/test/L1WETHGateway.t.sol +++ b/src/test/L1WETHGateway.t.sol @@ -224,6 +224,8 @@ contract L1WETHGatewayTest is L1GatewayTestBase { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/src/test/ScrollChain.t.sol b/src/test/ScrollChain.t.sol index 35ad4a43..a5eb8612 100644 --- a/src/test/ScrollChain.t.sol +++ b/src/test/ScrollChain.t.sol @@ -2,6 +2,8 @@ pragma solidity =0.8.24; +import {console} from "hardhat/console.sol"; + import {DSTestPlus} from "solmate/test/utils/DSTestPlus.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; @@ -10,9 +12,13 @@ import {ITransparentUpgradeableProxy, TransparentUpgradeableProxy} from "@openze import {L1MessageQueue} from "../L1/rollup/L1MessageQueue.sol"; import {ScrollChain, IScrollChain} from "../L1/rollup/ScrollChain.sol"; import {BatchHeaderV0Codec} from "../libraries/codec/BatchHeaderV0Codec.sol"; +import {BatchHeaderV1Codec} from "../libraries/codec/BatchHeaderV1Codec.sol"; +import {BatchHeaderV3Codec} from "../libraries/codec/BatchHeaderV3Codec.sol"; import {ChunkCodecV0} from "../libraries/codec/ChunkCodecV0.sol"; +import {ChunkCodecV1} from "../libraries/codec/ChunkCodecV1.sol"; import {EmptyContract} from "../misc/EmptyContract.sol"; +import {ScrollChainMockBlob} from "../mocks/ScrollChainMockBlob.sol"; import {MockRollupVerifier} from "./mocks/MockRollupVerifier.sol"; // solhint-disable no-inline-assembly @@ -63,7 +69,7 @@ contract ScrollChainTest is DSTestPlus { rollup.initialize(address(messageQueue), address(0), 100); } - function testCommitBatchV0() external { + function testCommitBatchV1() external { bytes memory batchHeader0 = new bytes(89); // import 10 L1 messages @@ -76,29 +82,38 @@ contract ScrollChainTest is DSTestPlus { mstore(add(batchHeader0, add(0x20, 25)), 1) } rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); + assertEq(rollup.committedBatches(0), keccak256(batchHeader0)); // caller not sequencer, revert hevm.expectRevert(ScrollChain.ErrorCallerIsNotSequencer.selector); - rollup.commitBatch(0, batchHeader0, new bytes[](0), new bytes(0)); + rollup.commitBatch(1, batchHeader0, new bytes[](0), new bytes(0)); rollup.addSequencer(address(0)); // batch is empty, revert hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorBatchIsEmpty.selector); - rollup.commitBatch(0, batchHeader0, new bytes[](0), new bytes(0)); + rollup.commitBatch(1, batchHeader0, new bytes[](0), new bytes(0)); hevm.stopPrank(); // batch header length too small, revert + bytes memory header = new bytes(120); + assembly { + mstore8(add(header, 0x20), 1) // version + } hevm.startPrank(address(0)); - hevm.expectRevert(BatchHeaderV0Codec.ErrorBatchHeaderLengthTooSmall.selector); - rollup.commitBatch(0, new bytes(88), new bytes[](1), new bytes(0)); + hevm.expectRevert(BatchHeaderV1Codec.ErrorBatchHeaderV1LengthTooSmall.selector); + rollup.commitBatch(1, header, new bytes[](1), new bytes(0)); hevm.stopPrank(); // wrong bitmap length, revert + header = new bytes(122); + assembly { + mstore8(add(header, 0x20), 1) // version + } hevm.startPrank(address(0)); - hevm.expectRevert(BatchHeaderV0Codec.ErrorIncorrectBitmapLength.selector); - rollup.commitBatch(0, new bytes(90), new bytes[](1), new bytes(0)); + hevm.expectRevert(BatchHeaderV1Codec.ErrorIncorrectBitmapLengthV1.selector); + rollup.commitBatch(1, header, new bytes[](1), new bytes(0)); hevm.stopPrank(); // incorrect parent batch hash, revert @@ -107,7 +122,7 @@ contract ScrollChainTest is DSTestPlus { } hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); - rollup.commitBatch(0, batchHeader0, new bytes[](1), new bytes(0)); + rollup.commitBatch(1, batchHeader0, new bytes[](1), new bytes(0)); hevm.stopPrank(); assembly { mstore(add(batchHeader0, add(0x20, 25)), 1) // change back @@ -120,8 +135,8 @@ contract ScrollChainTest is DSTestPlus { chunk0 = new bytes(1); chunks[0] = chunk0; hevm.startPrank(address(0)); - hevm.expectRevert(ChunkCodecV0.ErrorNoBlockInChunk.selector); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + hevm.expectRevert(ChunkCodecV1.ErrorNoBlockInChunkV1.selector); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); hevm.stopPrank(); // invalid chunk length, revert @@ -129,8 +144,8 @@ contract ScrollChainTest is DSTestPlus { chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; hevm.startPrank(address(0)); - hevm.expectRevert(ChunkCodecV0.ErrorIncorrectChunkLength.selector); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + hevm.expectRevert(ChunkCodecV1.ErrorIncorrectChunkLengthV1.selector); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); hevm.stopPrank(); // cannot skip last L1 message, revert @@ -143,7 +158,7 @@ contract ScrollChainTest is DSTestPlus { chunks[0] = chunk0; hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorLastL1MessageSkipped.selector); - rollup.commitBatch(0, batchHeader0, chunks, bitmap); + rollup.commitBatch(1, batchHeader0, chunks, bitmap); hevm.stopPrank(); // num txs less than num L1 msgs, revert @@ -156,38 +171,71 @@ contract ScrollChainTest is DSTestPlus { chunks[0] = chunk0; hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorNumTxsLessThanNumL1Msgs.selector); - rollup.commitBatch(0, batchHeader0, chunks, bitmap); + rollup.commitBatch(1, batchHeader0, chunks, bitmap); hevm.stopPrank(); - // incomplete l2 transaction data, revert - chunk0 = new bytes(1 + 60 + 1); + // revert when ErrorNoBlobFound + chunk0 = new bytes(1 + 60); chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; hevm.startPrank(address(0)); - hevm.expectRevert(ScrollChain.ErrorIncompleteL2TransactionData.selector); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + hevm.expectRevert(ScrollChain.ErrorNoBlobFound.selector); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); hevm.stopPrank(); + // @note we cannot check `ErrorFoundMultipleBlobs` here + + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // this is keccak(""); + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash( + 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 + ); + + bytes32 batchHash0 = rollup.committedBatches(0); + bytes memory batchHeader1 = new bytes(121); + assembly { + mstore8(add(batchHeader1, 0x20), 1) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex + mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped + mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped + mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + } + // commit batch with one chunk, no tx, correctly chunk0 = new bytes(1 + 60); chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; hevm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + assertEq(rollup.committedBatches(1), bytes32(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); hevm.stopPrank(); - assertGt(uint256(rollup.committedBatches(1)), 0); + assertEq(rollup.committedBatches(1), keccak256(batchHeader1)); // batch is already committed, revert hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorBatchIsAlreadyCommitted.selector); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); + hevm.stopPrank(); + + // revert when ErrorIncorrectBatchVersion + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchVersion.selector); + rollup.commitBatch(3, batchHeader1, chunks, new bytes(0)); hevm.stopPrank(); } - function testFinalizeBatchWithProofV0() external { + function testFinalizeBatchWithProof4844() external { // caller not prover, revert hevm.expectRevert(ScrollChain.ErrorCallerIsNotProver.selector); - rollup.finalizeBatchWithProof(new bytes(0), bytes32(0), bytes32(0), bytes32(0), new bytes(0)); + rollup.finalizeBatchWithProof4844(new bytes(0), bytes32(0), bytes32(0), bytes32(0), new bytes(0), new bytes(0)); rollup.addProver(address(0)); rollup.addSequencer(address(0)); @@ -199,76 +247,103 @@ contract ScrollChainTest is DSTestPlus { mstore(add(batchHeader0, add(0x20, 25)), 1) } rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); - bytes32 batchHash0 = rollup.committedBatches(0); bytes[] memory chunks = new bytes[](1); bytes memory chunk0; - // commit one batch - chunk0 = new bytes(1 + 60); - chunk0[0] = bytes1(uint8(1)); // one block in this chunk - chunks[0] = chunk0; - hevm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); - hevm.stopPrank(); - assertGt(uint256(rollup.committedBatches(1)), 0); + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); - bytes memory batchHeader1 = new bytes(89); + bytes32 batchHash0 = rollup.committedBatches(0); + bytes memory batchHeader1 = new bytes(121); assembly { - mstore(add(batchHeader1, 0x20), 0) // version + mstore8(add(batchHeader1, 0x20), 1) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash - mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash } + // batch hash is 0xf7d9af8c2c8e1a84f1fa4b6af9425f85c50a61b24cdd28101a5f6d781906a5b9 + + // commit one batch + chunk0 = new bytes(1 + 60); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + hevm.startPrank(address(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); + hevm.stopPrank(); + assertEq(rollup.committedBatches(1), keccak256(batchHeader1)); // incorrect batch hash, revert batchHeader1[1] = bytes1(uint8(1)); // change random byte hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); - rollup.finalizeBatchWithProof(batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(0), new bytes(0)); + rollup.finalizeBatchWithProof4844( + batchHeader1, + bytes32(uint256(1)), + bytes32(uint256(2)), + bytes32(0), + new bytes(0), + new bytes(0) + ); hevm.stopPrank(); batchHeader1[1] = bytes1(uint8(0)); // change back // batch header length too small, revert + bytes memory header = new bytes(120); + assembly { + mstore8(add(header, 0x20), 1) // version + } hevm.startPrank(address(0)); - hevm.expectRevert(BatchHeaderV0Codec.ErrorBatchHeaderLengthTooSmall.selector); - rollup.finalizeBatchWithProof( - new bytes(88), + hevm.expectRevert(BatchHeaderV1Codec.ErrorBatchHeaderV1LengthTooSmall.selector); + rollup.finalizeBatchWithProof4844( + header, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(0), + new bytes(0), new bytes(0) ); hevm.stopPrank(); // wrong bitmap length, revert + header = new bytes(122); + assembly { + mstore8(add(header, 0x20), 1) // version + } hevm.startPrank(address(0)); - hevm.expectRevert(BatchHeaderV0Codec.ErrorIncorrectBitmapLength.selector); - rollup.finalizeBatchWithProof( - new bytes(90), + hevm.expectRevert(BatchHeaderV1Codec.ErrorIncorrectBitmapLengthV1.selector); + rollup.finalizeBatchWithProof4844( + header, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(0), + new bytes(0), new bytes(0) ); hevm.stopPrank(); - // incorrect previous state root, revert - hevm.startPrank(address(0)); - hevm.expectRevert(ScrollChain.ErrorIncorrectPreviousStateRoot.selector); - rollup.finalizeBatchWithProof(batchHeader1, bytes32(uint256(2)), bytes32(uint256(2)), bytes32(0), new bytes(0)); - hevm.stopPrank(); - // verify success assertBoolEq(rollup.isBatchFinalized(1), false); hevm.startPrank(address(0)); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(uint256(3)), + blobDataProof, new bytes(0) ); hevm.stopPrank(); @@ -280,17 +355,18 @@ contract ScrollChainTest is DSTestPlus { // batch already verified, revert hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorBatchIsAlreadyVerified.selector); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(uint256(3)), + blobDataProof, new bytes(0) ); hevm.stopPrank(); } - function testCommitAndFinalizeWithL1MessagesV0() external { + function testCommitAndFinalizeWithL1MessagesV1() external { rollup.addSequencer(address(0)); rollup.addProver(address(0)); @@ -307,6 +383,19 @@ contract ScrollChainTest is DSTestPlus { rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); bytes32 batchHash0 = rollup.committedBatches(0); + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); + bytes memory bitmap; bytes[] memory chunks; bytes memory chunk0; @@ -325,24 +414,26 @@ contract ScrollChainTest is DSTestPlus { // => data hash for all chunks // d9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3 // => payload for batch header - // 00 + // 01 // 0000000000000001 // 0000000000000001 // 0000000000000001 // d9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3 + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 // 119b828c2a2798d2c957228ebeaff7e10bb099ae0d4e224f3eeb779ff61cba61 // 0000000000000000000000000000000000000000000000000000000000000000 // => hash for batch header - // 00847173b29b238cf319cde79512b7c213e5a8b4138daa7051914c4592b6dfc7 - bytes memory batchHeader1 = new bytes(89 + 32); + // 66b68a5092940d88a8c6f203d2071303557c024275d8ceaa2e12662bc61c8d8f + bytes memory batchHeader1 = new bytes(121 + 32); assembly { - mstore(add(batchHeader1, 0x20), 0) // version + mstore8(add(batchHeader1, 0x20), 1) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 mstore(add(batchHeader1, add(0x20, 9)), shl(192, 1)) // l1MessagePopped = 1 mstore(add(batchHeader1, add(0x20, 17)), shl(192, 1)) // totalL1MessagePopped = 1 mstore(add(batchHeader1, add(0x20, 25)), 0xd9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3) // dataHash - mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash - mstore(add(batchHeader1, add(0x20, 89)), 0) // bitmap0 + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 121)), 0) // bitmap0 } chunk0 = new bytes(1 + 60); assembly { @@ -355,22 +446,23 @@ contract ScrollChainTest is DSTestPlus { bitmap = new bytes(32); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); - emit CommitBatch(1, bytes32(0x00847173b29b238cf319cde79512b7c213e5a8b4138daa7051914c4592b6dfc7)); - rollup.commitBatch(0, batchHeader0, chunks, bitmap); + emit CommitBatch(1, keccak256(batchHeader1)); + rollup.commitBatch(1, batchHeader0, chunks, bitmap); hevm.stopPrank(); assertBoolEq(rollup.isBatchFinalized(1), false); bytes32 batchHash1 = rollup.committedBatches(1); - assertEq(batchHash1, bytes32(0x00847173b29b238cf319cde79512b7c213e5a8b4138daa7051914c4592b6dfc7)); + assertEq(batchHash1, keccak256(batchHeader1)); // finalize batch1 hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit FinalizeBatch(1, batchHash1, bytes32(uint256(2)), bytes32(uint256(3))); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), bytes32(uint256(3)), + blobDataProof, new bytes(0) ); hevm.stopPrank(); @@ -391,7 +483,7 @@ contract ScrollChainTest is DSTestPlus { // 0003 // ... (some tx hashes) // => data hash for chunk0 - // 2ac1dad3f3696e5581dfc10f2c7a7a8fc5b344285f7d332c7895a8825fca609a + // c4e0d99a191bfcb1ba2edd2964a0f0a56c929b1ecdf149ba3ae4f045d6e6ef8b // 2. chunk1 has three blocks // 2.1 block0 has 5 tx, 3 L1 messages, no skips // 2.2 block1 has 10 tx, 5 L1 messages, even is skipped, last is not skipped @@ -412,47 +504,43 @@ contract ScrollChainTest is DSTestPlus { // 0000000000000000000000000000000000000000000000000000000000000000 // 0000000000000000 // 012c - // ... (some tx hashes) // => data hash for chunk2 - // e1276f58354ab2372050bde30d8c970ccc3728c76e97f37deebeee83ecbf5705 + // a84759a83bba5f73e3a748d138ae7b6c5a31a8a5273aeb0e578807bf1ef6ed4e // => data hash for all chunks - // 3c71d155351642d15f1542a1543ce423abeca1f8939100a0a34cdc3127b95f69 + // dae89323bf398ca9f6f8e83b1b0d603334be063fa3920015b6aa9df77a0ccbcd // => payload for batch header - // 00 + // 01 // 0000000000000002 // 0000000000000108 // 0000000000000109 - // 3c71d155351642d15f1542a1543ce423abeca1f8939100a0a34cdc3127b95f69 - // cef70bf80683c4d9b8b2813e90c314e8c56648e231300b8cfed9d666b0caf14e - // aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa800000000000000000000000000000000000000000000000000000000000000aa + // dae89323bf398ca9f6f8e83b1b0d603334be063fa3920015b6aa9df77a0ccbcd + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 + // 66b68a5092940d88a8c6f203d2071303557c024275d8ceaa2e12662bc61c8d8f + // aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa28000000000000000000000000000000000000000000000000000000000000002a // => hash for batch header - // 03a9cdcb9d582251acf60937db006ec99f3505fd4751b7c1f92c9a8ef413e873 - bytes memory batchHeader2 = new bytes(89 + 32 + 32); + // b9dff5d21381176a73b20a9294eb2703c803113f9559e358708c659fa1cf62eb + bytes memory batchHeader2 = new bytes(121 + 32 + 32); assembly { - mstore(add(batchHeader2, 0x20), 0) // version + mstore8(add(batchHeader2, 0x20), 1) // version mstore(add(batchHeader2, add(0x20, 1)), shl(192, 2)) // batchIndex = 2 mstore(add(batchHeader2, add(0x20, 9)), shl(192, 264)) // l1MessagePopped = 264 mstore(add(batchHeader2, add(0x20, 17)), shl(192, 265)) // totalL1MessagePopped = 265 - mstore(add(batchHeader2, add(0x20, 25)), 0x3c71d155351642d15f1542a1543ce423abeca1f8939100a0a34cdc3127b95f69) // dataHash - mstore(add(batchHeader2, add(0x20, 57)), batchHash1) // parentBatchHash + mstore(add(batchHeader2, add(0x20, 25)), 0xdae89323bf398ca9f6f8e83b1b0d603334be063fa3920015b6aa9df77a0ccbcd) // dataHash + mstore(add(batchHeader2, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader2, add(0x20, 89)), batchHash1) // parentBatchHash mstore( - add(batchHeader2, add(0x20, 89)), + add(batchHeader2, add(0x20, 121)), 77194726158210796949047323339125271902179989777093709359638389338608753093160 ) // bitmap0 - mstore(add(batchHeader2, add(0x20, 121)), 42) // bitmap1 + mstore(add(batchHeader2, add(0x20, 153)), 42) // bitmap1 } - chunk0 = new bytes(1 + 60 + 3 * 5); + chunk0 = new bytes(1 + 60); assembly { mstore(add(chunk0, 0x20), shl(248, 1)) // numBlocks = 1 mstore(add(chunk0, add(0x21, 56)), shl(240, 3)) // numTransactions = 3 mstore(add(chunk0, add(0x21, 58)), shl(240, 0)) // numL1Messages = 0 } - for (uint256 i = 0; i < 3; i++) { - assembly { - mstore(add(chunk0, add(93, mul(i, 5))), shl(224, 1)) // tx = "0x00" - } - } - chunk1 = new bytes(1 + 60 * 3 + 51 * 5); + chunk1 = new bytes(1 + 60 * 3); assembly { mstore(add(chunk1, 0x20), shl(248, 3)) // numBlocks = 3 mstore(add(chunk1, add(33, 56)), shl(240, 5)) // block0.numTransactions = 5 @@ -462,11 +550,6 @@ contract ScrollChainTest is DSTestPlus { mstore(add(chunk1, add(153, 56)), shl(240, 300)) // block1.numTransactions = 300 mstore(add(chunk1, add(153, 58)), shl(240, 256)) // block1.numL1Messages = 256 } - for (uint256 i = 0; i < 51; i++) { - assembly { - mstore(add(chunk1, add(213, mul(i, 5))), shl(224, 1)) // tx = "0x00" - } - } chunks = new bytes[](2); chunks[0] = chunk0; chunks[1] = chunk1; @@ -483,33 +566,34 @@ contract ScrollChainTest is DSTestPlus { rollup.updateMaxNumTxInChunk(2); // 3 - 1 hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorTooManyTxsInOneChunk.selector); - rollup.commitBatch(0, batchHeader1, chunks, bitmap); // first chunk with too many txs + rollup.commitBatch(1, batchHeader1, chunks, bitmap); // first chunk with too many txs hevm.stopPrank(); rollup.updateMaxNumTxInChunk(185); // 5+10+300 - 2 - 127 hevm.startPrank(address(0)); hevm.expectRevert(ScrollChain.ErrorTooManyTxsInOneChunk.selector); - rollup.commitBatch(0, batchHeader1, chunks, bitmap); // second chunk with too many txs + rollup.commitBatch(1, batchHeader1, chunks, bitmap); // second chunk with too many txs hevm.stopPrank(); rollup.updateMaxNumTxInChunk(186); hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); - emit CommitBatch(2, bytes32(0x03a9cdcb9d582251acf60937db006ec99f3505fd4751b7c1f92c9a8ef413e873)); - rollup.commitBatch(0, batchHeader1, chunks, bitmap); + emit CommitBatch(2, keccak256(batchHeader2)); + rollup.commitBatch(1, batchHeader1, chunks, bitmap); hevm.stopPrank(); assertBoolEq(rollup.isBatchFinalized(2), false); bytes32 batchHash2 = rollup.committedBatches(2); - assertEq(batchHash2, bytes32(0x03a9cdcb9d582251acf60937db006ec99f3505fd4751b7c1f92c9a8ef413e873)); + assertEq(batchHash2, keccak256(batchHeader2)); // verify committed batch correctly hevm.startPrank(address(0)); hevm.expectEmit(true, true, false, true); emit FinalizeBatch(2, batchHash2, bytes32(uint256(4)), bytes32(uint256(5))); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader2, bytes32(uint256(2)), bytes32(uint256(4)), bytes32(uint256(5)), + blobDataProof, new bytes(0) ); hevm.stopPrank(); @@ -540,124 +624,943 @@ contract ScrollChainTest is DSTestPlus { } } - function testRevertBatch() external { - // caller not owner, revert - hevm.startPrank(address(1)); - hevm.expectRevert("Ownable: caller is not the owner"); - rollup.revertBatch(new bytes(89), 1); - hevm.stopPrank(); - - rollup.addSequencer(address(0)); - + function testCommitBatchV3() external { bytes memory batchHeader0 = new bytes(89); - // import genesis batch + // import 10 L1 messages + for (uint256 i = 0; i < 10; i++) { + messageQueue.appendCrossDomainMessage(address(this), 1000000, new bytes(0)); + } + // import genesis batch first assembly { mstore(add(batchHeader0, add(0x20, 25)), 1) } rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); - bytes32 batchHash0 = rollup.committedBatches(0); + assertEq(rollup.committedBatches(0), keccak256(batchHeader0)); + + // caller not sequencer, revert + hevm.expectRevert(ScrollChain.ErrorCallerIsNotSequencer.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, new bytes[](0), new bytes(0), new bytes(0)); + rollup.addSequencer(address(0)); + + // revert when ErrorIncorrectBatchVersion + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchVersion.selector); + rollup.commitBatchWithBlobProof(2, batchHeader0, new bytes[](0), new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // revert when ErrorBatchIsEmpty + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorBatchIsEmpty.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, new bytes[](0), new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // revert when ErrorBatchHeaderV3LengthMismatch + bytes memory header = new bytes(192); + assembly { + mstore8(add(header, 0x20), 3) // version + } + hevm.startPrank(address(0)); + hevm.expectRevert(BatchHeaderV3Codec.ErrorBatchHeaderV3LengthMismatch.selector); + rollup.commitBatchWithBlobProof(3, header, new bytes[](1), new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // revert when ErrorIncorrectBatchHash + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 2) // change data hash for batch0 + } + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, new bytes[](1), new bytes(0), new bytes(0)); + hevm.stopPrank(); + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) // change back + } bytes[] memory chunks = new bytes[](1); bytes memory chunk0; - // commit one batch + // no block in chunk, revert + chunk0 = new bytes(1); + chunks[0] = chunk0; + hevm.startPrank(address(0)); + hevm.expectRevert(ChunkCodecV1.ErrorNoBlockInChunkV1.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // invalid chunk length, revert + chunk0 = new bytes(1); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + hevm.startPrank(address(0)); + hevm.expectRevert(ChunkCodecV1.ErrorIncorrectChunkLengthV1.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // cannot skip last L1 message, revert + chunk0 = new bytes(1 + 60); + bytes memory bitmap = new bytes(32); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunk0[58] = bytes1(uint8(1)); // numTransactions = 1 + chunk0[60] = bytes1(uint8(1)); // numL1Messages = 1 + bitmap[31] = bytes1(uint8(1)); + chunks[0] = chunk0; + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorLastL1MessageSkipped.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, bitmap, new bytes(0)); + hevm.stopPrank(); + + // num txs less than num L1 msgs, revert + chunk0 = new bytes(1 + 60); + bitmap = new bytes(32); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunk0[58] = bytes1(uint8(1)); // numTransactions = 1 + chunk0[60] = bytes1(uint8(3)); // numL1Messages = 3 + bitmap[31] = bytes1(uint8(3)); + chunks[0] = chunk0; + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorNumTxsLessThanNumL1Msgs.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, bitmap, new bytes(0)); + hevm.stopPrank(); + + // revert when ErrorNoBlobFound + // revert when ErrorNoBlobFound + chunk0 = new bytes(1 + 60); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorNoBlobFound.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), new bytes(0)); + hevm.stopPrank(); + + // @note we cannot check `ErrorFoundMultipleBlobs` here + + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); + chunk0 = new bytes(1 + 60); chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; + // revert when ErrorCallPointEvaluationPrecompileFailed hevm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + hevm.expectRevert(ScrollChain.ErrorCallPointEvaluationPrecompileFailed.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), new bytes(0)); hevm.stopPrank(); - bytes memory batchHeader1 = new bytes(89); + bytes32 batchHash0 = rollup.committedBatches(0); + bytes memory batchHeader1 = new bytes(193); assembly { - mstore(add(batchHeader1, 0x20), 0) // version + mstore8(add(batchHeader1, 0x20), 3) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash - mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 121)), 0) // lastBlockTimestamp + mcopy(add(batchHeader1, add(0x20, 129)), add(blobDataProof, 0x20), 64) // blobDataProof } + // hash is ed32768c5f910a11edaf1c1ec0c0da847def9d24e0a24567c3c3d284061cf935 - // commit another batch + // succeed hevm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader1, chunks, new bytes(0)); + assertEq(rollup.committedBatches(1), bytes32(0)); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), blobDataProof); hevm.stopPrank(); + assertEq(rollup.committedBatches(1), keccak256(batchHeader1)); - // count must be nonzero, revert - hevm.expectRevert(ScrollChain.ErrorRevertZeroBatches.selector); - rollup.revertBatch(batchHeader0, 0); + // revert when ErrorBatchIsAlreadyCommitted + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorBatchIsAlreadyCommitted.selector); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), blobDataProof); + hevm.stopPrank(); + } - // incorrect batch hash, revert - hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); - batchHeader1[1] = bytes1(uint8(1)); // change random byte - rollup.revertBatch(batchHeader1, 1); - batchHeader1[1] = bytes1(uint8(0)); // change back + function testFinalizeBundleWithProof() external { + // caller not prover, revert + hevm.expectRevert(ScrollChain.ErrorCallerIsNotProver.selector); + rollup.finalizeBundleWithProof(new bytes(0), bytes32(0), bytes32(0), new bytes(0)); - // revert middle batch, revert - hevm.expectRevert(ScrollChain.ErrorRevertNotStartFromEnd.selector); - rollup.revertBatch(batchHeader1, 1); + rollup.addProver(address(0)); + rollup.addSequencer(address(0)); - // can only revert unfinalized batch, revert - hevm.expectRevert(ScrollChain.ErrorRevertFinalizedBatch.selector); - rollup.revertBatch(batchHeader0, 3); + // import genesis batch + bytes memory batchHeader0 = new bytes(89); + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) + } + rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); - // succeed to revert next two pending batches. + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); - hevm.expectEmit(true, true, false, true); - emit RevertBatch(1, rollup.committedBatches(1)); - hevm.expectEmit(true, true, false, true); - emit RevertBatch(2, rollup.committedBatches(2)); + bytes[] memory chunks = new bytes[](1); + bytes memory chunk0; - assertGt(uint256(rollup.committedBatches(1)), 0); - assertGt(uint256(rollup.committedBatches(2)), 0); - rollup.revertBatch(batchHeader1, 2); - assertEq(uint256(rollup.committedBatches(1)), 0); - assertEq(uint256(rollup.committedBatches(2)), 0); - } + bytes32 batchHash0 = rollup.committedBatches(0); + bytes memory batchHeader1 = new bytes(193); + assembly { + mstore8(add(batchHeader1, 0x20), 3) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex + mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped + mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped + mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 121)), 0) // lastBlockTimestamp + mcopy(add(batchHeader1, add(0x20, 129)), add(blobDataProof, 0x20), 64) // blobDataProof + } + // hash is ed32768c5f910a11edaf1c1ec0c0da847def9d24e0a24567c3c3d284061cf935 - function testAddAndRemoveSequencer(address _sequencer) external { - // set by non-owner, should revert - hevm.startPrank(address(1)); - hevm.expectRevert("Ownable: caller is not the owner"); - rollup.addSequencer(_sequencer); - hevm.expectRevert("Ownable: caller is not the owner"); - rollup.removeSequencer(_sequencer); + // commit one batch + chunk0 = new bytes(1 + 60); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + hevm.startPrank(address(0)); + assertEq(rollup.committedBatches(1), bytes32(0)); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, new bytes(0), blobDataProof); hevm.stopPrank(); + assertEq(rollup.committedBatches(1), keccak256(batchHeader1)); - hevm.expectRevert(ScrollChain.ErrorAccountIsNotEOA.selector); - rollup.addSequencer(address(this)); - hevm.assume(_sequencer.code.length == 0); - - // change to random EOA operator - hevm.expectEmit(true, false, false, true); - emit UpdateSequencer(_sequencer, true); + // revert when ErrorStateRootIsZero + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorStateRootIsZero.selector); + rollup.finalizeBundleWithProof(batchHeader1, bytes32(0), bytes32(0), new bytes(0)); + hevm.stopPrank(); - assertBoolEq(rollup.isSequencer(_sequencer), false); - rollup.addSequencer(_sequencer); - assertBoolEq(rollup.isSequencer(_sequencer), true); + // revert when ErrorBatchHeaderV3LengthMismatch + bytes memory header = new bytes(192); + assembly { + mstore8(add(header, 0x20), 3) // version + } + hevm.startPrank(address(0)); + hevm.expectRevert(BatchHeaderV3Codec.ErrorBatchHeaderV3LengthMismatch.selector); + rollup.finalizeBundleWithProof(header, bytes32(uint256(1)), bytes32(uint256(2)), new bytes(0)); + hevm.stopPrank(); - hevm.expectEmit(true, false, false, true); - emit UpdateSequencer(_sequencer, false); - rollup.removeSequencer(_sequencer); - assertBoolEq(rollup.isSequencer(_sequencer), false); - } + // revert when ErrorIncorrectBatchHash + batchHeader1[1] = bytes1(uint8(1)); // change random byte + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); + rollup.finalizeBundleWithProof(batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), new bytes(0)); + hevm.stopPrank(); + batchHeader1[1] = bytes1(uint8(0)); // change back - function testAddAndRemoveProver(address _prover) external { - // set by non-owner, should revert - hevm.startPrank(address(1)); - hevm.expectRevert("Ownable: caller is not the owner"); - rollup.addProver(_prover); - hevm.expectRevert("Ownable: caller is not the owner"); - rollup.removeProver(_prover); + // verify success + assertBoolEq(rollup.isBatchFinalized(1), false); + hevm.startPrank(address(0)); + rollup.finalizeBundleWithProof(batchHeader1, bytes32(uint256(2)), bytes32(uint256(3)), new bytes(0)); hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(1), true); + assertEq(rollup.finalizedStateRoots(1), bytes32(uint256(2))); + assertEq(rollup.withdrawRoots(1), bytes32(uint256(3))); + assertEq(rollup.lastFinalizedBatchIndex(), 1); - hevm.expectRevert(ScrollChain.ErrorAccountIsNotEOA.selector); - rollup.addProver(address(this)); - hevm.assume(_prover.code.length == 0); + // revert when ErrorBatchIsAlreadyVerified + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorBatchIsAlreadyVerified.selector); + rollup.finalizeBundleWithProof(batchHeader1, bytes32(uint256(2)), bytes32(uint256(3)), new bytes(0)); + hevm.stopPrank(); + } - // change to random EOA operator - hevm.expectEmit(true, false, false, true); + function _commitBatchV3() + internal + returns ( + bytes memory batchHeader0, + bytes memory batchHeader1, + bytes memory batchHeader2 + ) + { + // import genesis batch first + batchHeader0 = new bytes(89); + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) + } + rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); + bytes32 batchHash0 = rollup.committedBatches(0); + + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); + + bytes memory bitmap; + bytes[] memory chunks; + bytes memory chunk0; + bytes memory chunk1; + + // commit batch1, one chunk with one block, 1 tx, 1 L1 message, no skip + // => payload for data hash of chunk0 + // 0000000000000000 + // 0000000000000123 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0001 + // a2277fd30bbbe74323309023b56035b376d7768ad237ae4fc46ead7dc9591ae1 + // => data hash for chunk0 + // 5972b8fa626c873a97abb6db14fb0cb2085e050a6f80ec90b92bb0bbaa12eb5a + // => data hash for all chunks + // f6166fe668c1e6a04e3c75e864452bb02a31358f285efcb7a4e6603eb5750359 + // => payload for batch header + // 03 + // 0000000000000001 + // 0000000000000001 + // 0000000000000001 + // f6166fe668c1e6a04e3c75e864452bb02a31358f285efcb7a4e6603eb5750359 + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 + // 119b828c2a2798d2c957228ebeaff7e10bb099ae0d4e224f3eeb779ff61cba61 + // 0000000000000123 + // 2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e687 + // 53ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0 + // => hash for batch header + // 07e1bede8c5047cf8ca7ac84f5390837fb6224953af83d7e967488fa63a2065e + batchHeader1 = new bytes(193); + assembly { + mstore8(add(batchHeader1, 0x20), 3) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 + mstore(add(batchHeader1, add(0x20, 9)), shl(192, 1)) // l1MessagePopped = 1 + mstore(add(batchHeader1, add(0x20, 17)), shl(192, 1)) // totalL1MessagePopped = 1 + mstore(add(batchHeader1, add(0x20, 25)), 0xf6166fe668c1e6a04e3c75e864452bb02a31358f285efcb7a4e6603eb5750359) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 121)), shl(192, 0x123)) // lastBlockTimestamp + mcopy(add(batchHeader1, add(0x20, 129)), add(blobDataProof, 0x20), 64) // blobDataProof + } + chunk0 = new bytes(1 + 60); + assembly { + mstore(add(chunk0, 0x20), shl(248, 1)) // numBlocks = 1 + mstore(add(chunk0, add(0x21, 8)), shl(192, 0x123)) // timestamp = 0x123 + mstore(add(chunk0, add(0x21, 56)), shl(240, 1)) // numTransactions = 1 + mstore(add(chunk0, add(0x21, 58)), shl(240, 1)) // numL1Messages = 1 + } + chunks = new bytes[](1); + chunks[0] = chunk0; + bitmap = new bytes(32); + hevm.startPrank(address(0)); + hevm.expectEmit(true, true, false, true); + emit CommitBatch(1, keccak256(batchHeader1)); + rollup.commitBatchWithBlobProof(3, batchHeader0, chunks, bitmap, blobDataProof); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(1), false); + bytes32 batchHash1 = rollup.committedBatches(1); + assertEq(batchHash1, keccak256(batchHeader1)); + assertEq(1, messageQueue.pendingQueueIndex()); + assertEq(0, messageQueue.nextUnfinalizedQueueIndex()); + assertBoolEq(messageQueue.isMessageSkipped(0), false); + + // commit batch2 with two chunks, correctly + // 1. chunk0 has one block, 3 tx, no L1 messages + // => payload for chunk0 + // 0000000000000000 + // 0000000000000456 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0003 + // ... (some tx hashes) + // => data hash for chunk0 + // 1c7649f248aed8448fa7997e44db7b7028581deb119c6d6aa1a2d126d62564cf + // 2. chunk1 has three blocks + // 2.1 block0 has 5 tx, 3 L1 messages, no skips + // 2.2 block1 has 10 tx, 5 L1 messages, even is skipped, last is not skipped + // 2.2 block1 has 300 tx, 256 L1 messages, odd position is skipped, last is not skipped + // => payload for chunk1 + // 0000000000000000 + // 0000000000000789 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0005 + // 0000000000000000 + // 0000000000001234 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 000a + // 0000000000000000 + // 0000000000005678 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 012c + // => data hash for chunk1 + // 4e82cb576135a69a0ecc2b2070c432abfdeb20076594faaa1aeed77f48d7c856 + // => data hash for all chunks + // 166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239 + // => payload for batch header + // 03 + // 0000000000000002 + // 0000000000000108 + // 0000000000000109 + // 166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239 + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 + // 07e1bede8c5047cf8ca7ac84f5390837fb6224953af83d7e967488fa63a2065e + // 0000000000005678 + // 2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e687 + // 53ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0 + // => hash for batch header + // 8a59f0de6f1071c0f48d6a49d9b794008d28b63cc586da0f44f8b2b4e13cb231 + batchHeader2 = new bytes(193); + assembly { + mstore8(add(batchHeader2, 0x20), 3) // version + mstore(add(batchHeader2, add(0x20, 1)), shl(192, 2)) // batchIndex = 2 + mstore(add(batchHeader2, add(0x20, 9)), shl(192, 264)) // l1MessagePopped = 264 + mstore(add(batchHeader2, add(0x20, 17)), shl(192, 265)) // totalL1MessagePopped = 265 + mstore(add(batchHeader2, add(0x20, 25)), 0x166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239) // dataHash + mstore(add(batchHeader2, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader2, add(0x20, 89)), batchHash1) // parentBatchHash + mstore(add(batchHeader2, add(0x20, 121)), shl(192, 0x5678)) // lastBlockTimestamp + mcopy(add(batchHeader2, add(0x20, 129)), add(blobDataProof, 0x20), 64) // blobDataProof + } + chunk0 = new bytes(1 + 60); + assembly { + mstore(add(chunk0, 0x20), shl(248, 1)) // numBlocks = 1 + mstore(add(chunk0, add(0x21, 8)), shl(192, 0x456)) // timestamp = 0x456 + mstore(add(chunk0, add(0x21, 56)), shl(240, 3)) // numTransactions = 3 + mstore(add(chunk0, add(0x21, 58)), shl(240, 0)) // numL1Messages = 0 + } + chunk1 = new bytes(1 + 60 * 3); + assembly { + mstore(add(chunk1, 0x20), shl(248, 3)) // numBlocks = 3 + mstore(add(chunk1, add(33, 8)), shl(192, 0x789)) // block0.timestamp = 0x789 + mstore(add(chunk1, add(33, 56)), shl(240, 5)) // block0.numTransactions = 5 + mstore(add(chunk1, add(33, 58)), shl(240, 3)) // block0.numL1Messages = 3 + mstore(add(chunk1, add(93, 8)), shl(192, 0x1234)) // block1.timestamp = 0x1234 + mstore(add(chunk1, add(93, 56)), shl(240, 10)) // block1.numTransactions = 10 + mstore(add(chunk1, add(93, 58)), shl(240, 5)) // block1.numL1Messages = 5 + mstore(add(chunk1, add(153, 8)), shl(192, 0x5678)) // block1.timestamp = 0x5678 + mstore(add(chunk1, add(153, 56)), shl(240, 300)) // block1.numTransactions = 300 + mstore(add(chunk1, add(153, 58)), shl(240, 256)) // block1.numL1Messages = 256 + } + chunks = new bytes[](2); + chunks[0] = chunk0; + chunks[1] = chunk1; + bitmap = new bytes(64); + assembly { + mstore( + add(bitmap, add(0x20, 0)), + 77194726158210796949047323339125271902179989777093709359638389338608753093160 + ) // bitmap0 + mstore(add(bitmap, add(0x20, 32)), 42) // bitmap1 + } + + // too many txs in one chunk, revert + rollup.updateMaxNumTxInChunk(2); // 3 - 1 + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorTooManyTxsInOneChunk.selector); + rollup.commitBatchWithBlobProof(3, batchHeader1, chunks, bitmap, blobDataProof); // first chunk with too many txs + hevm.stopPrank(); + rollup.updateMaxNumTxInChunk(185); // 5+10+300 - 2 - 127 + hevm.startPrank(address(0)); + hevm.expectRevert(ScrollChain.ErrorTooManyTxsInOneChunk.selector); + rollup.commitBatchWithBlobProof(3, batchHeader1, chunks, bitmap, blobDataProof); // second chunk with too many txs + hevm.stopPrank(); + + rollup.updateMaxNumTxInChunk(186); + hevm.startPrank(address(0)); + hevm.expectEmit(true, true, false, true); + emit CommitBatch(2, keccak256(batchHeader2)); + rollup.commitBatchWithBlobProof(3, batchHeader1, chunks, bitmap, blobDataProof); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(2), false); + bytes32 batchHash2 = rollup.committedBatches(2); + assertEq(batchHash2, keccak256(batchHeader2)); + assertEq(265, messageQueue.pendingQueueIndex()); + assertEq(0, messageQueue.nextUnfinalizedQueueIndex()); + } + + function testCommitAndFinalizeWithL1MessagesV3() external { + rollup.addSequencer(address(0)); + rollup.addProver(address(0)); + + // import 300 L1 messages + for (uint256 i = 0; i < 300; i++) { + messageQueue.appendCrossDomainMessage(address(this), 1000000, new bytes(0)); + } + + (bytes memory batchHeader0, bytes memory batchHeader1, bytes memory batchHeader2) = _commitBatchV3(); + + // 1 ~ 4, zero + for (uint256 i = 1; i < 4; i++) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } + // 4 ~ 9, even is nonzero, odd is zero + for (uint256 i = 4; i < 9; i++) { + if (i % 2 == 1 || i == 8) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } else { + assertBoolEq(messageQueue.isMessageSkipped(i), true); + } + } + // 9 ~ 265, even is nonzero, odd is zero + for (uint256 i = 9; i < 265; i++) { + if (i % 2 == 1 || i == 264) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } else { + assertBoolEq(messageQueue.isMessageSkipped(i), true); + } + } + + // finalize batch1 and batch2 together + assertBoolEq(rollup.isBatchFinalized(1), false); + assertBoolEq(rollup.isBatchFinalized(2), false); + hevm.startPrank(address(0)); + rollup.finalizeBundleWithProof(batchHeader2, bytes32(uint256(2)), bytes32(uint256(3)), new bytes(0)); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(1), true); + assertBoolEq(rollup.isBatchFinalized(2), true); + assertEq(rollup.finalizedStateRoots(1), bytes32(0)); + assertEq(rollup.withdrawRoots(1), bytes32(0)); + assertEq(rollup.finalizedStateRoots(2), bytes32(uint256(2))); + assertEq(rollup.withdrawRoots(2), bytes32(uint256(3))); + assertEq(rollup.lastFinalizedBatchIndex(), 2); + assertEq(265, messageQueue.nextUnfinalizedQueueIndex()); + } + + function testRevertBatchWithL1Messages() external { + rollup.addSequencer(address(0)); + rollup.addProver(address(0)); + + // import 300 L1 messages + for (uint256 i = 0; i < 300; i++) { + messageQueue.appendCrossDomainMessage(address(this), 1000000, new bytes(0)); + } + + (bytes memory batchHeader0, bytes memory batchHeader1, bytes memory batchHeader2) = _commitBatchV3(); + + // 1 ~ 4, zero + for (uint256 i = 1; i < 4; i++) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } + // 4 ~ 9, even is nonzero, odd is zero + for (uint256 i = 4; i < 9; i++) { + if (i % 2 == 1 || i == 8) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } else { + assertBoolEq(messageQueue.isMessageSkipped(i), true); + } + } + // 9 ~ 265, even is nonzero, odd is zero + for (uint256 i = 9; i < 265; i++) { + if (i % 2 == 1 || i == 264) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } else { + assertBoolEq(messageQueue.isMessageSkipped(i), true); + } + } + + // revert batch 1 and batch 2 + rollup.revertBatch(batchHeader1, batchHeader2); + assertEq(0, messageQueue.pendingQueueIndex()); + assertEq(0, messageQueue.nextUnfinalizedQueueIndex()); + for (uint256 i = 0; i < 265; i++) { + assertBoolEq(messageQueue.isMessageSkipped(i), false); + } + } + + function testSwitchBatchFromV1ToV3() external { + rollup.addSequencer(address(0)); + rollup.addProver(address(0)); + + // import 300 L1 messages + for (uint256 i = 0; i < 300; i++) { + messageQueue.appendCrossDomainMessage(address(this), 1000000, new bytes(0)); + } + + // import genesis batch first + bytes memory batchHeader0 = new bytes(89); + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) + } + rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); + bytes32 batchHash0 = rollup.committedBatches(0); + + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); + + bytes memory bitmap; + bytes[] memory chunks; + bytes memory chunk0; + bytes memory chunk1; + + // commit batch1 with version v1, one chunk with one block, 1 tx, 1 L1 message, no skip + // => payload for data hash of chunk0 + // 0000000000000000 + // 0000000000000000 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0001 + // a2277fd30bbbe74323309023b56035b376d7768ad237ae4fc46ead7dc9591ae1 + // => data hash for chunk0 + // 9ef1e5694bdb014a1eea42be756a8f63bfd8781d6332e9ef3b5126d90c62f110 + // => data hash for all chunks + // d9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3 + // => payload for batch header + // 01 + // 0000000000000001 + // 0000000000000001 + // 0000000000000001 + // d9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3 + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 + // 119b828c2a2798d2c957228ebeaff7e10bb099ae0d4e224f3eeb779ff61cba61 + // 0000000000000000000000000000000000000000000000000000000000000000 + // => hash for batch header + // 66b68a5092940d88a8c6f203d2071303557c024275d8ceaa2e12662bc61c8d8f + bytes memory batchHeader1 = new bytes(121 + 32); + assembly { + mstore8(add(batchHeader1, 0x20), 1) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 + mstore(add(batchHeader1, add(0x20, 9)), shl(192, 1)) // l1MessagePopped = 1 + mstore(add(batchHeader1, add(0x20, 17)), shl(192, 1)) // totalL1MessagePopped = 1 + mstore(add(batchHeader1, add(0x20, 25)), 0xd9cb6bf9264006fcea490d5c261f7453ab95b1b26033a3805996791b8e3a62f3) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 121)), 0) // bitmap0 + } + chunk0 = new bytes(1 + 60); + assembly { + mstore(add(chunk0, 0x20), shl(248, 1)) // numBlocks = 1 + mstore(add(chunk0, add(0x21, 56)), shl(240, 1)) // numTransactions = 1 + mstore(add(chunk0, add(0x21, 58)), shl(240, 1)) // numL1Messages = 1 + } + chunks = new bytes[](1); + chunks[0] = chunk0; + bitmap = new bytes(32); + hevm.startPrank(address(0)); + hevm.expectEmit(true, true, false, true); + emit CommitBatch(1, keccak256(batchHeader1)); + rollup.commitBatch(1, batchHeader0, chunks, bitmap); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(1), false); + bytes32 batchHash1 = rollup.committedBatches(1); + assertEq(batchHash1, keccak256(batchHeader1)); + + // commit batch2 with version v2, with two chunks, correctly + // 1. chunk0 has one block, 3 tx, no L1 messages + // => payload for chunk0 + // 0000000000000000 + // 0000000000000456 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0003 + // ... (some tx hashes) + // => data hash for chunk0 + // 1c7649f248aed8448fa7997e44db7b7028581deb119c6d6aa1a2d126d62564cf + // 2. chunk1 has three blocks + // 2.1 block0 has 5 tx, 3 L1 messages, no skips + // 2.2 block1 has 10 tx, 5 L1 messages, even is skipped, last is not skipped + // 2.2 block1 has 300 tx, 256 L1 messages, odd position is skipped, last is not skipped + // => payload for chunk1 + // 0000000000000000 + // 0000000000000789 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 0005 + // 0000000000000000 + // 0000000000001234 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 000a + // 0000000000000000 + // 0000000000005678 + // 0000000000000000000000000000000000000000000000000000000000000000 + // 0000000000000000 + // 012c + // => data hash for chunk1 + // 4e82cb576135a69a0ecc2b2070c432abfdeb20076594faaa1aeed77f48d7c856 + // => data hash for all chunks + // 166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239 + // => payload for batch header + // 03 + // 0000000000000002 + // 0000000000000108 + // 0000000000000109 + // 166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239 + // 013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757 + // 66b68a5092940d88a8c6f203d2071303557c024275d8ceaa2e12662bc61c8d8f + // 0000000000005678 + // 2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e687 + // 53ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0 + // => hash for batch header + // f212a256744ca658dfc4eb32665aa0fe845eb757a030bd625cb2880055e3cc92 + bytes memory batchHeader2 = new bytes(193); + assembly { + mstore8(add(batchHeader2, 0x20), 3) // version + mstore(add(batchHeader2, add(0x20, 1)), shl(192, 2)) // batchIndex = 2 + mstore(add(batchHeader2, add(0x20, 9)), shl(192, 264)) // l1MessagePopped = 264 + mstore(add(batchHeader2, add(0x20, 17)), shl(192, 265)) // totalL1MessagePopped = 265 + mstore(add(batchHeader2, add(0x20, 25)), 0x166e9d20206ae8cddcdf0f30093e3acc3866937172df5d7f69fb5567d9595239) // dataHash + mstore(add(batchHeader2, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader2, add(0x20, 89)), batchHash1) // parentBatchHash + mstore(add(batchHeader2, add(0x20, 121)), shl(192, 0x5678)) // lastBlockTimestamp + mcopy(add(batchHeader2, add(0x20, 129)), add(blobDataProof, 0x20), 64) // blobDataProof + } + chunk0 = new bytes(1 + 60); + assembly { + mstore(add(chunk0, 0x20), shl(248, 1)) // numBlocks = 1 + mstore(add(chunk0, add(0x21, 8)), shl(192, 0x456)) // timestamp = 0x456 + mstore(add(chunk0, add(0x21, 56)), shl(240, 3)) // numTransactions = 3 + mstore(add(chunk0, add(0x21, 58)), shl(240, 0)) // numL1Messages = 0 + } + chunk1 = new bytes(1 + 60 * 3); + assembly { + mstore(add(chunk1, 0x20), shl(248, 3)) // numBlocks = 3 + mstore(add(chunk1, add(33, 8)), shl(192, 0x789)) // block0.timestamp = 0x789 + mstore(add(chunk1, add(33, 56)), shl(240, 5)) // block0.numTransactions = 5 + mstore(add(chunk1, add(33, 58)), shl(240, 3)) // block0.numL1Messages = 3 + mstore(add(chunk1, add(93, 8)), shl(192, 0x1234)) // block1.timestamp = 0x1234 + mstore(add(chunk1, add(93, 56)), shl(240, 10)) // block1.numTransactions = 10 + mstore(add(chunk1, add(93, 58)), shl(240, 5)) // block1.numL1Messages = 5 + mstore(add(chunk1, add(153, 8)), shl(192, 0x5678)) // block1.timestamp = 0x5678 + mstore(add(chunk1, add(153, 56)), shl(240, 300)) // block1.numTransactions = 300 + mstore(add(chunk1, add(153, 58)), shl(240, 256)) // block1.numL1Messages = 256 + } + chunks = new bytes[](2); + chunks[0] = chunk0; + chunks[1] = chunk1; + bitmap = new bytes(64); + assembly { + mstore( + add(bitmap, add(0x20, 0)), + 77194726158210796949047323339125271902179989777093709359638389338608753093160 + ) // bitmap0 + mstore(add(bitmap, add(0x20, 32)), 42) // bitmap1 + } + + rollup.updateMaxNumTxInChunk(186); + // should revert, when all v1 batch not finalized + hevm.startPrank(address(0)); + hevm.expectRevert("start index mismatch"); + rollup.commitBatchWithBlobProof(3, batchHeader1, chunks, bitmap, blobDataProof); + hevm.stopPrank(); + + // finalize batch1 + hevm.startPrank(address(0)); + hevm.expectEmit(true, true, false, true); + emit FinalizeBatch(1, batchHash1, bytes32(uint256(2)), bytes32(uint256(3))); + rollup.finalizeBatchWithProof4844( + batchHeader1, + bytes32(uint256(1)), + bytes32(uint256(2)), + bytes32(uint256(3)), + blobDataProof, + new bytes(0) + ); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(1), true); + assertEq(rollup.finalizedStateRoots(1), bytes32(uint256(2))); + assertEq(rollup.withdrawRoots(1), bytes32(uint256(3))); + assertEq(rollup.lastFinalizedBatchIndex(), 1); + assertBoolEq(messageQueue.isMessageSkipped(0), false); + assertEq(messageQueue.pendingQueueIndex(), 1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); + + hevm.startPrank(address(0)); + hevm.expectEmit(true, true, false, true); + emit CommitBatch(2, keccak256(batchHeader2)); + rollup.commitBatchWithBlobProof(3, batchHeader1, chunks, bitmap, blobDataProof); + hevm.stopPrank(); + bytes32 batchHash2 = rollup.committedBatches(2); + assertEq(batchHash2, keccak256(batchHeader2)); + assertEq(messageQueue.pendingQueueIndex(), 265); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); + + // finalize batch2 + assertBoolEq(rollup.isBatchFinalized(2), false); + hevm.startPrank(address(0)); + rollup.finalizeBundleWithProof(batchHeader2, bytes32(uint256(2)), bytes32(uint256(3)), new bytes(0)); + hevm.stopPrank(); + assertBoolEq(rollup.isBatchFinalized(2), true); + assertEq(rollup.finalizedStateRoots(2), bytes32(uint256(2))); + assertEq(rollup.withdrawRoots(2), bytes32(uint256(3))); + assertEq(rollup.lastFinalizedBatchIndex(), 2); + } + + function testRevertBatch() external { + // upgrade to ScrollChainMockBlob + ScrollChainMockBlob impl = new ScrollChainMockBlob( + rollup.layer2ChainId(), + rollup.messageQueue(), + rollup.verifier() + ); + admin.upgrade(ITransparentUpgradeableProxy(address(rollup)), address(impl)); + + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + ScrollChainMockBlob(address(rollup)).setBlobVersionedHash(blobVersionedHash); + + // caller not owner, revert + hevm.startPrank(address(1)); + hevm.expectRevert("Ownable: caller is not the owner"); + rollup.revertBatch(new bytes(89), new bytes(89)); + hevm.stopPrank(); + + rollup.addSequencer(address(0)); + + bytes memory batchHeader0 = new bytes(89); + + // import genesis batch + assembly { + mstore(add(batchHeader0, add(0x20, 25)), 1) + } + rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); + bytes32 batchHash0 = rollup.committedBatches(0); + + bytes[] memory chunks = new bytes[](1); + bytes memory chunk0; + + // commit one batch + chunk0 = new bytes(1 + 60); + chunk0[0] = bytes1(uint8(1)); // one block in this chunk + chunks[0] = chunk0; + hevm.startPrank(address(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); + bytes32 batchHash1 = rollup.committedBatches(1); + hevm.stopPrank(); + + bytes memory batchHeader1 = new bytes(121); + assembly { + mstore8(add(batchHeader1, 0x20), 1) // version + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex + mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped + mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped + mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash + } + + // commit another batch + hevm.startPrank(address(0)); + rollup.commitBatch(1, batchHeader1, chunks, new bytes(0)); + hevm.stopPrank(); + + bytes memory batchHeader2 = new bytes(121); + assembly { + mstore8(add(batchHeader2, 0x20), 1) // version + mstore(add(batchHeader2, add(0x20, 1)), shl(192, 2)) // batchIndex + mstore(add(batchHeader2, add(0x20, 9)), 0) // l1MessagePopped + mstore(add(batchHeader2, add(0x20, 17)), 0) // totalL1MessagePopped + mstore(add(batchHeader2, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash + mstore(add(batchHeader2, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader2, add(0x20, 89)), batchHash1) // parentBatchHash + } + + // incorrect batch hash of first header, revert + batchHeader1[1] = bytes1(uint8(1)); // change random byte + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); + rollup.revertBatch(batchHeader1, batchHeader0); + batchHeader1[1] = bytes1(uint8(0)); // change back + + // incorrect batch hash of second header, revert + batchHeader1[1] = bytes1(uint8(1)); // change random byte + hevm.expectRevert(ScrollChain.ErrorIncorrectBatchHash.selector); + rollup.revertBatch(batchHeader0, batchHeader1); + batchHeader1[1] = bytes1(uint8(0)); // change back + + // count must be nonzero, revert + hevm.expectRevert(ScrollChain.ErrorRevertZeroBatches.selector); + rollup.revertBatch(batchHeader1, batchHeader0); + + // revert middle batch, revert + hevm.expectRevert(ScrollChain.ErrorRevertNotStartFromEnd.selector); + rollup.revertBatch(batchHeader1, batchHeader1); + + // can only revert unfinalized batch, revert + hevm.expectRevert(ScrollChain.ErrorRevertFinalizedBatch.selector); + rollup.revertBatch(batchHeader0, batchHeader2); + + // succeed to revert next two pending batches. + + hevm.expectEmit(true, true, false, true); + emit RevertBatch(2, rollup.committedBatches(2)); + hevm.expectEmit(true, true, false, true); + emit RevertBatch(1, rollup.committedBatches(1)); + + assertGt(uint256(rollup.committedBatches(1)), 0); + assertGt(uint256(rollup.committedBatches(2)), 0); + rollup.revertBatch(batchHeader1, batchHeader2); + assertEq(uint256(rollup.committedBatches(1)), 0); + assertEq(uint256(rollup.committedBatches(2)), 0); + } + + function testAddAndRemoveSequencer(address _sequencer) external { + // set by non-owner, should revert + hevm.startPrank(address(1)); + hevm.expectRevert("Ownable: caller is not the owner"); + rollup.addSequencer(_sequencer); + hevm.expectRevert("Ownable: caller is not the owner"); + rollup.removeSequencer(_sequencer); + hevm.stopPrank(); + + hevm.expectRevert(ScrollChain.ErrorAccountIsNotEOA.selector); + rollup.addSequencer(address(this)); + hevm.assume(_sequencer.code.length == 0); + + // change to random EOA operator + hevm.expectEmit(true, false, false, true); + emit UpdateSequencer(_sequencer, true); + + assertBoolEq(rollup.isSequencer(_sequencer), false); + rollup.addSequencer(_sequencer); + assertBoolEq(rollup.isSequencer(_sequencer), true); + + hevm.expectEmit(true, false, false, true); + emit UpdateSequencer(_sequencer, false); + rollup.removeSequencer(_sequencer); + assertBoolEq(rollup.isSequencer(_sequencer), false); + } + + function testAddAndRemoveProver(address _prover) external { + // set by non-owner, should revert + hevm.startPrank(address(1)); + hevm.expectRevert("Ownable: caller is not the owner"); + rollup.addProver(_prover); + hevm.expectRevert("Ownable: caller is not the owner"); + rollup.removeProver(_prover); + hevm.stopPrank(); + + hevm.expectRevert(ScrollChain.ErrorAccountIsNotEOA.selector); + rollup.addProver(address(this)); + hevm.assume(_prover.code.length == 0); + + // change to random EOA operator + hevm.expectEmit(true, false, false, true); emit UpdateProver(_prover, true); assertBoolEq(rollup.isProver(_prover), false); @@ -686,9 +1589,13 @@ contract ScrollChainTest is DSTestPlus { hevm.startPrank(address(0)); hevm.expectRevert("Pausable: paused"); - rollup.commitBatch(0, new bytes(0), new bytes[](0), new bytes(0)); + rollup.commitBatch(1, new bytes(0), new bytes[](0), new bytes(0)); + hevm.expectRevert("Pausable: paused"); + rollup.commitBatchWithBlobProof(3, new bytes(0), new bytes[](0), new bytes(0), new bytes(0)); + hevm.expectRevert("Pausable: paused"); + rollup.finalizeBatchWithProof4844(new bytes(0), bytes32(0), bytes32(0), bytes32(0), new bytes(0), new bytes(0)); hevm.expectRevert("Pausable: paused"); - rollup.finalizeBatchWithProof(new bytes(0), bytes32(0), bytes32(0), bytes32(0), new bytes(0)); + rollup.finalizeBundleWithProof(new bytes(0), bytes32(0), bytes32(0), new bytes(0)); hevm.stopPrank(); // unpause @@ -722,12 +1629,12 @@ contract ScrollChainTest is DSTestPlus { // batch header length too small, revert batchHeader = new bytes(88); - hevm.expectRevert(BatchHeaderV0Codec.ErrorBatchHeaderLengthTooSmall.selector); + hevm.expectRevert(BatchHeaderV0Codec.ErrorBatchHeaderV0LengthTooSmall.selector); rollup.importGenesisBatch(batchHeader, bytes32(uint256(1))); // wrong bitmap length, revert batchHeader = new bytes(90); - hevm.expectRevert(BatchHeaderV0Codec.ErrorIncorrectBitmapLength.selector); + hevm.expectRevert(BatchHeaderV0Codec.ErrorIncorrectBitmapLengthV0.selector); rollup.importGenesisBatch(batchHeader, bytes32(uint256(1))); // not all fields are zero, revert diff --git a/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol b/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol index 70692863..1bf3aa1d 100644 --- a/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol +++ b/src/test/alternative-gas-token/AlternativeGasTokenTestBase.t.sol @@ -23,6 +23,7 @@ import {L2ScrollMessenger, IL2ScrollMessenger} from "../../L2/L2ScrollMessenger. import {AddressAliasHelper} from "../../libraries/common/AddressAliasHelper.sol"; import {EmptyContract} from "../../misc/EmptyContract.sol"; +import {ScrollChainMockBlob} from "../../mocks/ScrollChainMockBlob.sol"; import {MockRollupVerifier} from "../mocks/MockRollupVerifier.sol"; abstract contract AlternativeGasTokenTestBase is Test { @@ -57,7 +58,7 @@ abstract contract AlternativeGasTokenTestBase is Test { // L1 contracts L1ScrollMessengerNonETH internal l1Messenger; L1MessageQueueWithGasPriceOracle internal l1MessageQueue; - ScrollChain internal rollup; + ScrollChainMockBlob internal rollup; L1GasTokenGateway internal l1GasTokenGateway; L1GatewayRouter internal l1Router; address internal l1FeeVault; @@ -78,7 +79,7 @@ abstract contract AlternativeGasTokenTestBase is Test { // deploy proxy and contracts in L1 l1FeeVault = address(uint160(address(this)) - 1); l1MessageQueue = L1MessageQueueWithGasPriceOracle(_deployProxy(address(0))); - rollup = ScrollChain(_deployProxy(address(0))); + rollup = ScrollChainMockBlob(_deployProxy(address(0))); l1Messenger = L1ScrollMessengerNonETH(payable(_deployProxy(address(0)))); l1GasTokenGateway = L1GasTokenGateway(_deployProxy(address(0))); l1Router = L1GatewayRouter(_deployProxy(address(0))); @@ -121,7 +122,7 @@ abstract contract AlternativeGasTokenTestBase is Test { // Upgrade the ScrollChain implementation and initialize admin.upgrade( ITransparentUpgradeableProxy(address(rollup)), - address(new ScrollChain(l2ChainId, address(l1MessageQueue), address(verifier))) + address(new ScrollChainMockBlob(l2ChainId, address(l1MessageQueue), address(verifier))) ); rollup.initialize(address(l1MessageQueue), address(verifier), 44); @@ -240,31 +241,39 @@ abstract contract AlternativeGasTokenTestBase is Test { rollup.importGenesisBatch(batchHeader0, bytes32(uint256(1))); bytes32 batchHash0 = rollup.committedBatches(0); + // from https://etherscan.io/blob/0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757?bid=740652 + bytes32 blobVersionedHash = 0x013590dc3544d56629ba81bb14d4d31248f825001653aa575eb8e3a719046757; + bytes + memory blobDataProof = hex"2c9d777660f14ad49803a6442935c0d24a0d83551de5995890bf70a17d24e68753ab0fe6807c7081f0885fe7da741554d658a03730b1fa006f8319f8b993bcb0a5a0c9e8a145c5ef6e415c245690effa2914ec9393f58a7251d30c0657da1453d9ad906eae8b97dd60c9a216f81b4df7af34d01e214e1ec5865f0133ecc16d7459e49dab66087340677751e82097fbdd20551d66076f425775d1758a9dfd186b"; + rollup.setBlobVersionedHash(blobVersionedHash); + // commit one batch bytes[] memory chunks = new bytes[](1); bytes memory chunk0 = new bytes(1 + 60); chunk0[0] = bytes1(uint8(1)); // one block in this chunk chunks[0] = chunk0; vm.startPrank(address(0)); - rollup.commitBatch(0, batchHeader0, chunks, new bytes(0)); + rollup.commitBatch(1, batchHeader0, chunks, new bytes(0)); vm.stopPrank(); - bytes memory batchHeader1 = new bytes(89); + bytes memory batchHeader1 = new bytes(121); assembly { - mstore(add(batchHeader1, 0x20), 0) // version + mstore8(add(batchHeader1, 0x20), 1) // version mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex mstore(add(batchHeader1, add(0x20, 9)), 0) // l1MessagePopped mstore(add(batchHeader1, add(0x20, 17)), 0) // totalL1MessagePopped mstore(add(batchHeader1, add(0x20, 25)), 0x246394445f4fe64ed5598554d55d1682d6fb3fe04bf58eb54ef81d1189fafb51) // dataHash - mstore(add(batchHeader1, add(0x20, 57)), batchHash0) // parentBatchHash + mstore(add(batchHeader1, add(0x20, 57)), blobVersionedHash) // blobVersionedHash + mstore(add(batchHeader1, add(0x20, 89)), batchHash0) // parentBatchHash } vm.startPrank(address(0)); - rollup.finalizeBatchWithProof( + rollup.finalizeBatchWithProof4844( batchHeader1, bytes32(uint256(1)), bytes32(uint256(2)), messageHash, + blobDataProof, new bytes(0) ); vm.stopPrank(); diff --git a/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol b/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol index 1da96451..1a3c5589 100644 --- a/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol +++ b/src/test/alternative-gas-token/GasTokenDecimalGateway.t.sol @@ -285,6 +285,8 @@ abstract contract GasTokenGatewayTest is AlternativeGasTokenTestBase { // skip message 0 vm.startPrank(address(rollup)); l1MessageQueue.popCrossDomainMessage(0, 1, 0x1); + l1MessageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(l1MessageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(l1MessageQueue.pendingQueueIndex(), 1); vm.stopPrank(); @@ -300,7 +302,7 @@ abstract contract GasTokenGatewayTest is AlternativeGasTokenTestBase { } function testRelayFromL1ToL2(uint256 l1Amount, address recipient) external { - vm.assume(recipient.code.length == 0); // only refund to EOA to avoid revert + vm.assume(recipient.code.length == 0); // only send to EOA to avoid revert vm.assume(uint256(uint160(recipient)) > 2**152); // ignore some precompile contracts vm.recordLogs(); @@ -317,7 +319,8 @@ abstract contract GasTokenGatewayTest is AlternativeGasTokenTestBase { } function testRelayFromL2ToL1(uint256 l2Amount, address recipient) external { - vm.assume(recipient != address(0)); + vm.assume(recipient.code.length == 0); // only send to EOA to avoid revert + vm.assume(uint256(uint160(recipient)) > 2**152); // ignore some precompile contracts vm.recordLogs(); l2Amount = bound(l2Amount, 1, address(this).balance); diff --git a/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol b/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol index 19cd0285..3b0f8459 100644 --- a/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol +++ b/src/test/alternative-gas-token/L1ScrollMessengerNonETH.t.sol @@ -211,6 +211,7 @@ contract L1ScrollMessengerNonETHTest is AlternativeGasTokenTestBase { ) external { vm.assume(target.code.length == 0); // only refund to EOA to avoid revert vm.assume(uint256(uint160(target)) > 2**152); // ignore some precompile contracts + vm.assume(uint256(uint160(sender)) > 2**152); // ignore some precompile contracts prepareFinalizedBatch(keccak256(encodeXDomainCalldata(sender, target, 0, nonce, message))); IL1ScrollMessenger.L2MessageProof memory proof; @@ -411,6 +412,8 @@ contract L1ScrollMessengerNonETHTest is AlternativeGasTokenTestBase { // skip all 2 messages vm.startPrank(address(rollup)); l1MessageQueue.popCrossDomainMessage(0, 2, 0x3); + l1MessageQueue.finalizePoppedCrossDomainMessage(2); + assertEq(l1MessageQueue.nextUnfinalizedQueueIndex(), 2); assertEq(l1MessageQueue.pendingQueueIndex(), 2); vm.stopPrank(); for (uint256 i = 0; i < 2; ++i) { @@ -436,6 +439,8 @@ contract L1ScrollMessengerNonETHTest is AlternativeGasTokenTestBase { // only first 3 are skipped vm.startPrank(address(rollup)); l1MessageQueue.popCrossDomainMessage(2, 4, 0x7); + l1MessageQueue.finalizePoppedCrossDomainMessage(6); + assertEq(l1MessageQueue.nextUnfinalizedQueueIndex(), 6); assertEq(l1MessageQueue.pendingQueueIndex(), 6); vm.stopPrank(); for (uint256 i = 2; i < 6; i++) { @@ -457,6 +462,8 @@ contract L1ScrollMessengerNonETHTest is AlternativeGasTokenTestBase { // skip all 5 messages vm.startPrank(address(rollup)); l1MessageQueue.popCrossDomainMessage(6, 5, 0x1f); + l1MessageQueue.finalizePoppedCrossDomainMessage(11); + assertEq(l1MessageQueue.nextUnfinalizedQueueIndex(), 11); assertEq(l1MessageQueue.pendingQueueIndex(), 11); vm.stopPrank(); for (uint256 i = 6; i < 11; ++i) { diff --git a/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol b/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol index 00c47743..6d9fcda8 100644 --- a/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol +++ b/src/test/alternative-gas-token/L1WrappedTokenGateway.t.sol @@ -95,7 +95,7 @@ contract L1WrappedTokenGatewayTest is AlternativeGasTokenTestBase { exceedValue = bound(exceedValue, 0, 1 ether); l1MessageQueue.setL2BaseFee(l2BaseFee); - uint256 fee = l2BaseFee * 200000; + uint256 fee = l2BaseFee * 450000; uint256 ethBalance = address(this).balance; uint256 wethBalance = weth.balanceOf(address(l1ERC20Gateway)); diff --git a/src/test/lido/L1LidoGateway.t.sol b/src/test/lido/L1LidoGateway.t.sol index 533ba0f1..6e2ff277 100644 --- a/src/test/lido/L1LidoGateway.t.sol +++ b/src/test/lido/L1LidoGateway.t.sol @@ -394,6 +394,8 @@ contract L1LidoGatewayTest is L1GatewayTestBase { // skip message 0 hevm.startPrank(address(rollup)); messageQueue.popCrossDomainMessage(0, 1, 0x1); + messageQueue.finalizePoppedCrossDomainMessage(1); + assertEq(messageQueue.nextUnfinalizedQueueIndex(), 1); assertEq(messageQueue.pendingQueueIndex(), 1); hevm.stopPrank(); diff --git a/src/test/mocks/MockRollupVerifier.sol b/src/test/mocks/MockRollupVerifier.sol index 783b7ce8..3946b890 100644 --- a/src/test/mocks/MockRollupVerifier.sol +++ b/src/test/mocks/MockRollupVerifier.sol @@ -19,4 +19,12 @@ contract MockRollupVerifier is IRollupVerifier { bytes calldata, bytes32 ) external view {} + + /// @inheritdoc IRollupVerifier + function verifyBundleProof( + uint256, + uint256, + bytes calldata, + bytes calldata + ) external view {} } diff --git a/src/test/mocks/MockZkEvmVerifier.sol b/src/test/mocks/MockZkEvmVerifier.sol index 33cbd2aa..65e6fc8e 100644 --- a/src/test/mocks/MockZkEvmVerifier.sol +++ b/src/test/mocks/MockZkEvmVerifier.sol @@ -2,13 +2,18 @@ pragma solidity =0.8.24; -import {IZkEvmVerifier} from "../../libraries/verifier/IZkEvmVerifier.sol"; +import {IZkEvmVerifierV1, IZkEvmVerifierV2} from "../../libraries/verifier/IZkEvmVerifier.sol"; -contract MockZkEvmVerifier is IZkEvmVerifier { +contract MockZkEvmVerifier is IZkEvmVerifierV1, IZkEvmVerifierV2 { event Called(address); - /// @inheritdoc IZkEvmVerifier + /// @inheritdoc IZkEvmVerifierV1 function verify(bytes calldata, bytes32) external view { revert(string(abi.encode(address(this)))); } + + /// @inheritdoc IZkEvmVerifierV2 + function verify(bytes calldata, bytes calldata) external view { + revert(string(abi.encode(address(this)))); + } } diff --git a/yarn.lock b/yarn.lock index bed2aa41..8709fc38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -787,65 +787,53 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/edr-darwin-arm64@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.1.tgz#386cbb7dd8ba70659d76d6ce5e8b06242fac6c8c" - integrity sha512-qsdGS1Kfp6bVH4fk4hUzbsEm0fH7hGurraKk+IWby7Ecv+u7BuNaLVqeoYauYRFLYnGg8XZmcKOJ9BW35Y96Jg== - -"@nomicfoundation/edr-darwin-x64@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.1.tgz#809ebd68127fb7b4219c5ddc8ef65b38bc88312b" - integrity sha512-vtS2yuXIgjte42KEg/Aw/xmLRneVrIaDFhFMk578zg3m1UjNP+a29Lirw5fRXaqaL8aPyhRFmUy+1/V4MGaH+g== - -"@nomicfoundation/edr-linux-arm64-gnu@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.1.tgz#897bf524e88d6a07a2b39c5a9c5d94eaeee6ec20" - integrity sha512-GrbQcrVjTFLm/x8HdUzmJ1F8Juau9UEZM/YNr4sAxxTGvBHJlq73VaDZfArxj9Anq/u6aImPbs1ksu28D6XC3A== +"@nomicfoundation/edr-darwin-arm64@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.1.tgz#210e6b5eaff9278814e8f19800182d1071554855" + integrity sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA== -"@nomicfoundation/edr-linux-arm64-musl@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.1.tgz#726d57edee1adcd4844aaf31ec80063f1c44616b" - integrity sha512-wOqugcbugmbZkh58PcIC5naT0ilwkZ0/qH86AniENxsviOaPSrL4aMYhtfypQ3MNxlfrlgLZFCC+D5eJTsNsgQ== +"@nomicfoundation/edr-darwin-x64@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.1.tgz#81e660de77d1d73317c9a5140349d1197cddef9a" + integrity sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g== -"@nomicfoundation/edr-linux-x64-gnu@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.1.tgz#d45ca451a30d429ed4ea97982879bf65842385f8" - integrity sha512-V+kyUVqbt52dQRgaZK+EWuPWJ5h/PsCYZmiK18A+DQynZvird7jrTsDppcTvlv1Dvny8UAAP0q/ue7G67OoLJQ== +"@nomicfoundation/edr-linux-arm64-gnu@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.1.tgz#6e1ce12080a35505c7f3eaf772f4e171db8b7f9a" + integrity sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA== -"@nomicfoundation/edr-linux-x64-musl@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.1.tgz#ee1d01135654124c0f22ae0c3e7d62388a41e595" - integrity sha512-vwrzLW40jQBDZVYmoJUBMwl36i7muB9AfT4F2fMRsb1JoOMgoeOBp8R+IAxbA6mjIJGwAClkRz5W5hCb3zMtMQ== +"@nomicfoundation/edr-linux-arm64-musl@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.1.tgz#a467a6c8631053d10a8641f67618b9bdf057c636" + integrity sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw== -"@nomicfoundation/edr-win32-arm64-msvc@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.1.tgz#e89c6e2c7a4458a6fd1de3ef3f57f915b771579e" - integrity sha512-7G29vUGrkwfbJqxo1V+QTxD976gVHx3Z0P5kwb1bErLmlP89cRNX3UN3/dzXpbKH9mp8ZcAjIcIbRUd4C+vH/A== +"@nomicfoundation/edr-linux-x64-gnu@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.1.tgz#63753d05767b4bc0d4f9f9be8399928c790c931e" + integrity sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w== -"@nomicfoundation/edr-win32-ia32-msvc@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.1.tgz#8f05be496c18eff37e3a95628ed8265a03824df0" - integrity sha512-Q39eAkk/j1ZlvHcxQRTAzdY9qlckDNfiuJDgLYTlxdubpmX6KZucuUin/1A5NVhhCToTxw7aFwSglUROY3ejJw== +"@nomicfoundation/edr-linux-x64-musl@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.1.tgz#44d128b9a09e3f61b08617213a58cd84dd15c418" + integrity sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg== -"@nomicfoundation/edr-win32-x64-msvc@0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.1.tgz#942c2b1490194d70d67c38b702a56e5603db19c7" - integrity sha512-8WzEzWUshw28xowVBhEyu4EQpx0TqNmDa70C3L1MWl5waym4U/VwbijFrI0Sb6Y1kdoNCdBTMvfr8OJNF2qJ/A== +"@nomicfoundation/edr-win32-x64-msvc@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.1.tgz#1667b725337ca6f27ec58c63337b6a62a0d7ed09" + integrity sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA== -"@nomicfoundation/edr@^0.3.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.1.tgz#2a7d4de8d70f63f872f9e86a8487f946cc3d2dcc" - integrity sha512-uPg1/CvIJpsCe7Ipe80bYnC/Q2Bt/O55KB2ssLx7Z0os4jwDvWBZas8tLMopT+hpOQnv8cZkHJap1iNDTwAfQg== - optionalDependencies: - "@nomicfoundation/edr-darwin-arm64" "0.3.1" - "@nomicfoundation/edr-darwin-x64" "0.3.1" - "@nomicfoundation/edr-linux-arm64-gnu" "0.3.1" - "@nomicfoundation/edr-linux-arm64-musl" "0.3.1" - "@nomicfoundation/edr-linux-x64-gnu" "0.3.1" - "@nomicfoundation/edr-linux-x64-musl" "0.3.1" - "@nomicfoundation/edr-win32-arm64-msvc" "0.3.1" - "@nomicfoundation/edr-win32-ia32-msvc" "0.3.1" - "@nomicfoundation/edr-win32-x64-msvc" "0.3.1" +"@nomicfoundation/edr@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.4.1.tgz#7d698454d228ffc5399f1c58799104b53e1b60ae" + integrity sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.4.1" + "@nomicfoundation/edr-darwin-x64" "0.4.1" + "@nomicfoundation/edr-linux-arm64-gnu" "0.4.1" + "@nomicfoundation/edr-linux-arm64-musl" "0.4.1" + "@nomicfoundation/edr-linux-x64-gnu" "0.4.1" + "@nomicfoundation/edr-linux-x64-musl" "0.4.1" + "@nomicfoundation/edr-win32-x64-msvc" "0.4.1" "@nomicfoundation/ethereumjs-common@4.0.4": version "4.0.4" @@ -3336,6 +3324,11 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + commander@^9.3.0: version "9.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-9.3.0.tgz#f619114a5a2d2054e0d9ff1b31d5ccf89255e26b" @@ -5825,14 +5818,14 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.24" sha1 "^1.1.1" -hardhat@^2.22.0: - version "2.22.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.0.tgz#ccb03fbacc2a3c5902a70e0e4df4acd92ee533f0" - integrity sha512-t1J+ThxNYANL6ub6yM5XC84RY38vhfG7ODBtVRNQFQozdALo3qZUjxDzyGQU0U0eswe6orK49hq9UpdB7nPXNQ== +hardhat@^2.22.6: + version "2.22.6" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.6.tgz#d73caece246cd8219a1815554dabc31d400fa035" + integrity sha512-abFEnd9QACwEtSvZZGSmzvw7N3zhQN1cDKz5SLHAupfG24qTHofCjqvD5kT5Wwsq5XOL0ON1Mq5rr4v0XX5ciw== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/edr" "^0.3.0" + "@nomicfoundation/edr" "^0.4.1" "@nomicfoundation/ethereumjs-common" "4.0.4" "@nomicfoundation/ethereumjs-tx" "5.0.4" "@nomicfoundation/ethereumjs-util" "9.0.4" @@ -5866,7 +5859,7 @@ hardhat@^2.22.0: raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" @@ -9535,18 +9528,16 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== dependencies: command-exists "^1.2.8" - commander "3.0.2" + commander "^8.1.0" follow-redirects "^1.12.1" - fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" - require-from-string "^2.0.0" semver "^5.5.0" tmp "0.0.33" From 4ad655b59986374d36d125cec50d2cb1e6c9970e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Fri, 30 Aug 2024 13:27:38 +0200 Subject: [PATCH 23/48] clean up --- docs/manual-deployment.md | 8 +- scripts/deterministic/DeployScroll.s.sol | 173 +++++++++-------------- 2 files changed, 69 insertions(+), 112 deletions(-) diff --git a/docs/manual-deployment.md b/docs/manual-deployment.md index e33164bf..86363e0f 100644 --- a/docs/manual-deployment.md +++ b/docs/manual-deployment.md @@ -14,7 +14,7 @@ This repository requires `node` version>=20.12.2, `yarn` and `foundry` to be pre ### Config -1. Create directory `volume` on the root directory of the repo (all config file will be put or generated under this directory) +1. Create directory `volume` on the root directory of the repo (all config files will be put or generated under this directory) ```bash mkdir volume @@ -26,8 +26,8 @@ mkdir volume cp ./docker/config-example.toml ./volume/config.toml ``` -If you've previously launched Scroll chain cocomponents using Scroll-SDK, you may already have a config.toml file. If so directly copy it to `./volume/config.toml`. -**Important Note: If you are launching a scroll chain through scroll-sdk, make sure this config.toml file stay same as the one used in scroll-sdk.** +If you've previously launched Scroll chain components using Scroll-SDK, you may already have a `config.toml` file. If so directly copy it to `./volume/config.toml`. +**Important Note: If you are launching a scroll chain through scroll-sdk, make sure this config.toml file is the same as the one used in scroll-sdk.** Details about the some important variables you may want to change: @@ -73,7 +73,7 @@ export L1_RPC_ENDPOINT=http://l1-devnet.scrollsdk export L2_RPC_ENDPOINT=http://l2-rpc.scrollsdk ``` -4. Generate predicted contract addresses (This step required mainly because we are checking if every contracts deployed as we expected) +1. Generate predicted contract addresses (This step is required mainly because we check if each contract is deployed as we expected) ```bash forge script scripts/deterministic/DeployScroll.s.sol:DeployScroll --sig "run(string,string)" "none" "write-config" diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 9ba03e6d..07bd0cc9 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -326,6 +326,12 @@ contract DeployScroll is DeterminsticDeployment { } } + function transferOwnership(address addr, address newOwner) private { + if (Ownable(addr).owner() != newOwner) { + Ownable(addr).transferOwnership(newOwner); + } + } + function deployAllContracts() private { deployL1Contracts1stPass(); deployL2Contracts1stPass(); @@ -726,6 +732,8 @@ contract DeployScroll is DeterminsticDeployment { 10**28 // _amount ); + // deploy gas token contract on L1, + // note: if an override address is configured, then we will use that instead L1_GAS_TOKEN_ADDR = deploy("L1_GAS_TOKEN", type(GasTokenExample).creationCode, args); } @@ -1202,6 +1210,7 @@ contract DeployScroll is DeterminsticDeployment { if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isSequencer(L1_COMMIT_SENDER_ADDR)) { ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addSequencer(L1_COMMIT_SENDER_ADDR); } + if (!ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).isProver(L1_FINALIZE_SENDER_ADDR)) { ScrollChain(L1_SCROLL_CHAIN_PROXY_ADDR).addProver(L1_FINALIZE_SENDER_ADDR); } @@ -1216,6 +1225,7 @@ contract DeployScroll is DeterminsticDeployment { 16 // _nonZeroGas ); } + if (L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).whitelist() != L1_WHITELIST_ADDR) { L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR); } @@ -1268,11 +1278,13 @@ contract DeployScroll is DeterminsticDeployment { function initializeL1GatewayRouter() private { address L2_ETH_GATEWAY_COUNTERPART; + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { L2_ETH_GATEWAY_COUNTERPART = L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; } else { L2_ETH_GATEWAY_COUNTERPART = L1_ETH_GATEWAY_PROXY_ADDR; } + if (getInitializeCount(L1_GATEWAY_ROUTER_PROXY_ADDR) == 0) { L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).initialize( notnull(L2_ETH_GATEWAY_COUNTERPART), @@ -1341,20 +1353,20 @@ contract DeployScroll is DeterminsticDeployment { } // set WETH gateway in router - { - address[] memory _tokens = new address[](1); - _tokens[0] = notnull(L1_WETH_ADDR); - address[] memory _gateways = new address[](1); - _gateways[0] = notnull(L1_WETH_GATEWAY_PROXY_ADDR); - if (L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { - L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); - } + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L1_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L1_WETH_GATEWAY_PROXY_ADDR); + + if (L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L1GatewayRouter(L1_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); } } function initializeL1Whitelist() private { address[] memory accounts = new address[](1); accounts[0] = L1_GAS_ORACLE_SENDER_ADDR; + if (!Whitelist(L1_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { Whitelist(L1_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); } @@ -1394,53 +1406,25 @@ contract DeployScroll is DeterminsticDeployment { } function transferL1ContractOwnership() private { - if (Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_MESSAGE_QUEUE_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_GAS_PRICE_ORACLE_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_PROXY_ADMIN_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_SCROLL_CHAIN_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L1_WHITELIST_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); - } - if (ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); + transferOwnership(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_ERC1155_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_ERC721_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_GATEWAY_ROUTER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_MESSAGE_QUEUE_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_SCROLL_MESSENGER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_GAS_PRICE_ORACLE_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR, OWNER_ADDR); + transferOwnership(L1_PROXY_ADMIN_ADDR, OWNER_ADDR); + transferOwnership(L1_SCROLL_CHAIN_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_WHITELIST_ADDR, OWNER_ADDR); + + if (!ALTERNATIVE_GAS_TOKEN_ENABLED) { + transferOwnership(L1_ETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L1_WETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + } else { + transferOwnership(L1_GAS_TOKEN_GATEWAY_PROXY_ADDR, OWNER_ADDR); } } @@ -1548,75 +1532,48 @@ contract DeployScroll is DeterminsticDeployment { } // set WETH gateway in router - { - address[] memory _tokens = new address[](1); - _tokens[0] = notnull(L2_WETH_ADDR); - address[] memory _gateways = new address[](1); - _gateways[0] = notnull(L2_WETH_GATEWAY_PROXY_ADDR); - if (L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { - L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); - } + address[] memory _tokens = new address[](1); + _tokens[0] = notnull(L2_WETH_ADDR); + address[] memory _gateways = new address[](1); + _gateways[0] = notnull(L2_WETH_GATEWAY_PROXY_ADDR); + + if (L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).ERC20Gateway(_tokens[0]) != _gateways[0]) { + L2GatewayRouter(L2_GATEWAY_ROUTER_PROXY_ADDR).setERC20Gateway(_tokens, _gateways); } } function initializeScrollStandardERC20Factory() private { - if ( - ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).owner() != + transferOwnership( + notnull(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR), notnull(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) - ) { - ScrollStandardERC20Factory(L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR).transferOwnership( - L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR - ); - } + ); } function initializeL2Whitelist() private { address[] memory accounts = new address[](1); accounts[0] = L2_GAS_ORACLE_SENDER_ADDR; + if (!Whitelist(L2_WHITELIST_ADDR).isSenderAllowed(accounts[0])) { Whitelist(L2_WHITELIST_ADDR).updateWhitelistStatus(accounts, true); } } function transferL2ContractOwnership() private { - if (Ownable(L1_GAS_PRICE_ORACLE_ADDR).owner() != OWNER_ADDR) { - Ownable(L1_GAS_PRICE_ORACLE_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_ERC1155_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_ERC721_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_ETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_ETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_GATEWAY_ROUTER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_MESSAGE_QUEUE_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_MESSAGE_QUEUE_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_SCROLL_MESSENGER_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_TX_FEE_VAULT_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_TX_FEE_VAULT_ADDR).transferOwnership(OWNER_ADDR); - } - if (!ALTERNATIVE_GAS_TOKEN_ENABLED && Ownable(L2_WETH_GATEWAY_PROXY_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_WETH_GATEWAY_PROXY_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_PROXY_ADMIN_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_PROXY_ADMIN_ADDR).transferOwnership(OWNER_ADDR); - } - if (Ownable(L2_WHITELIST_ADDR).owner() != OWNER_ADDR) { - Ownable(L2_WHITELIST_ADDR).transferOwnership(OWNER_ADDR); + transferOwnership(L1_GAS_PRICE_ORACLE_ADDR, OWNER_ADDR); + transferOwnership(L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ERC1155_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ERC721_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_ETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_GATEWAY_ROUTER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_MESSAGE_QUEUE_ADDR, OWNER_ADDR); + transferOwnership(L2_SCROLL_MESSENGER_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); + transferOwnership(L2_TX_FEE_VAULT_ADDR, OWNER_ADDR); + transferOwnership(L2_PROXY_ADMIN_ADDR, OWNER_ADDR); + transferOwnership(L2_WHITELIST_ADDR, OWNER_ADDR); + + if (!ALTERNATIVE_GAS_TOKEN_ENABLED) { + transferOwnership(L2_WETH_GATEWAY_PROXY_ADDR, OWNER_ADDR); } } } From 05e82c6a1f76080d74d553a26a786f803d8967a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Fri, 30 Aug 2024 14:38:20 +0200 Subject: [PATCH 24/48] feat: enable darwinV2 (#29) --- docker/templates/coordinator-config.json | 16 ++++++++++++---- docker/templates/genesis.json | 1 + 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/docker/templates/coordinator-config.json b/docker/templates/coordinator-config.json index 35013cad..75760e67 100644 --- a/docker/templates/coordinator-config.json +++ b/docker/templates/coordinator-config.json @@ -6,11 +6,19 @@ "batch_collection_time_sec": 600, "bundle_collection_time_sec": 600, "verifier": { - "fork_name": "darwin", "mock_mode": false, - "params_path": "/verifier/params", - "assets_path_lo": "/verifier/assets/lo", - "assets_path_hi": "/verifier/assets/hi" + "low_version_circuit": { + "params_path": "/verifier/params", + "assets_path": "/verifier/assets/lo", + "fork_name": "darwin", + "min_prover_version": "v4.4.43" + }, + "high_version_circuit": { + "params_path": "/verifier/params", + "assets_path": "/verifier/assets/hi", + "fork_name": "darwinV2", + "min_prover_version": "v4.4.56" + } }, "max_verifier_workers": 4, "min_prover_version": "v4.3.41" diff --git a/docker/templates/genesis.json b/docker/templates/genesis.json index 9e5647d9..9cb2ee88 100644 --- a/docker/templates/genesis.json +++ b/docker/templates/genesis.json @@ -17,6 +17,7 @@ "bernoulliBlock": 0, "curieBlock": 0, "darwinTime": 0, + "darwinV2Time": 0, "clique": { "period": 3, "epoch": 30000 From 187d29a61bd62600d9cc98cc4e843c198e527e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Fri, 30 Aug 2024 15:11:01 +0200 Subject: [PATCH 25/48] feat: use v2 zkevm verifier during initial deployment (#28) --- docker/templates/config-contracts.toml | 2 +- scripts/deterministic/Constants.sol | 3 +++ scripts/deterministic/DeployScroll.s.sol | 18 ++++++++++-------- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/docker/templates/config-contracts.toml b/docker/templates/config-contracts.toml index 998003c7..ddc19d7b 100644 --- a/docker/templates/config-contracts.toml +++ b/docker/templates/config-contracts.toml @@ -8,7 +8,7 @@ L1_SCROLL_CHAIN_PROXY_ADDR = "" L1_SCROLL_MESSENGER_PROXY_ADDR = "" L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" -L1_ZKEVM_VERIFIER_V1_ADDR = "" +L1_ZKEVM_VERIFIER_V2_ADDR = "" L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" L1_MESSAGE_QUEUE_PROXY_ADDR = "" diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 4ec0bebf..f83a32c3 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -35,3 +35,6 @@ string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.jso string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; string constant FRONTEND_ENV_PATH = "./volume/frontend-config"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; + +// plonk verifier configs +bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 07bd0cc9..2381c112 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -21,7 +21,7 @@ import {L1WETHGateway} from "../../src/L1/gateways/L1WETHGateway.sol"; import {L2GasPriceOracle} from "../../src/L1/rollup/L2GasPriceOracle.sol"; import {MultipleVersionRollupVerifier} from "../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol"; -import {ZkEvmVerifierV1} from "../../src/libraries/verifier/ZkEvmVerifierV1.sol"; +import {ZkEvmVerifierV2} from "../../src/libraries/verifier/ZkEvmVerifierV2.sol"; import {GasTokenExample} from "../../src/alternative-gas-token/GasTokenExample.sol"; import {L1ScrollMessengerNonETH} from "../../src/alternative-gas-token/L1ScrollMessengerNonETH.sol"; import {L1GasTokenGateway} from "../../src/alternative-gas-token/L1GasTokenGateway.sol"; @@ -132,7 +132,7 @@ contract DeployScroll is DeterminsticDeployment { address internal L1_WETH_GATEWAY_IMPLEMENTATION_ADDR; address internal L1_WETH_GATEWAY_PROXY_ADDR; address internal L1_WHITELIST_ADDR; - address internal L1_ZKEVM_VERIFIER_V1_ADDR; + address internal L1_ZKEVM_VERIFIER_V2_ADDR; address internal L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR; address internal L2_GAS_PRICE_ORACLE_PROXY_ADDR; address internal L1_GAS_TOKEN_ADDR; @@ -349,7 +349,7 @@ contract DeployScroll is DeterminsticDeployment { deployL1ScrollChainProxy(); deployL1ScrollMessengerProxy(); deployL1EnforcedTxGateway(); - deployL1ZkEvmVerifierV1(); + deployL1ZkEvmVerifier(); deployL1MultipleVersionRollupVerifier(); deployL1MessageQueue(); deployL1ScrollChain(); @@ -550,16 +550,18 @@ contract DeployScroll is DeterminsticDeployment { ); } - function deployL1ZkEvmVerifierV1() private { - bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR)); - L1_ZKEVM_VERIFIER_V1_ADDR = deploy("L1_ZKEVM_VERIFIER_V1", type(ZkEvmVerifierV1).creationCode, args); + function deployL1ZkEvmVerifier() private { + bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), V4_VERIFIER_DIGEST); + L1_ZKEVM_VERIFIER_V2_ADDR = deploy("L1_ZKEVM_VERIFIER_V2", type(ZkEvmVerifierV2).creationCode, args); } function deployL1MultipleVersionRollupVerifier() private { uint256[] memory _versions = new uint256[](1); address[] memory _verifiers = new address[](1); - _versions[0] = 1; - _verifiers[0] = notnull(L1_ZKEVM_VERIFIER_V1_ADDR); + + // register V4 verifier: DarwinV2 upgrade, plonk verifier v0.13.1 + _versions[0] = 4; + _verifiers[0] = notnull(L1_ZKEVM_VERIFIER_V2_ADDR); bytes memory args = abi.encode(DEPLOYER_ADDR, _versions, _verifiers); From 9adfdf55dd40e17b03b9f8f336b29a3165d9c4b5 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Mon, 2 Sep 2024 21:43:54 +0800 Subject: [PATCH 26/48] refactor: clean up config.toml file (#32) --- docker/config-example.toml | 83 +++++++++++++-------- docker/templates/rollup-config.json | 1 - scripts/deterministic/Configuration.sol | 36 +++++---- scripts/deterministic/DeployScroll.s.sol | 2 +- scripts/deterministic/GenerateConfigs.s.sol | 9 +-- scripts/deterministic/GenerateGenesis.s.sol | 2 +- 6 files changed, 80 insertions(+), 53 deletions(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index 02e70ef1..c702f47a 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -1,26 +1,16 @@ [general] -L1_RPC_ENDPOINT = "http://l1geth:8545" -L2_RPC_ENDPOINT = "http://l2geth:8545" +L1_RPC_ENDPOINT = "http://l1-devnet:8545" +L1_RPC_ENDPOINT_WEBSOCKET = "ws://l1-devnet:8546" +L2_RPC_ENDPOINT = "http://l2-sequencer:8545" +CHAIN_NAME_L1="Ethereum" +CHAIN_NAME_L2="Scroll SDK" CHAIN_ID_L1 = 111111 -CHAIN_ID_L2 = 222222 - -MAX_TX_IN_CHUNK = 100 -MAX_BLOCK_IN_CHUNK = 100 -MAX_CHUNK_IN_BATCH = 15 -MAX_BATCH_IN_BUNDLE = 30 -MAX_L1_MESSAGE_GAS_LIMIT = 10000000 +CHAIN_ID_L2 = 221122 L1_CONTRACT_DEPLOYMENT_BLOCK = 0 -ALTERNATIVE_GAS_TOKEN_ENABLED = true -# EXAMPLE_GAS_TOKEN_DECIMAL = 6 - -TEST_ENV_MOCK_FINALIZE_ENABLED = true -TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 3600 - - [accounts] # note: for now we simply use Anvil's dev accounts @@ -41,22 +31,54 @@ L1_FINALIZE_SENDER_ADDR = "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC" L1_GAS_ORACLE_SENDER_ADDR = "0x90F79bf6EB2c4f870365E785982E1f101E93b906" L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" -L2GETH_SIGNER_0_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" - [db] -SCROLL_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/scroll?sslmode=disable" -CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/chain_monitor?sslmode=disable" -BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/bridge_history?sslmode=disable" -ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:scroll2022@db:5432/rollup_explorer?sslmode=disable" +BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/blockscout" +BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +GAS_ORACLE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +COORDINATOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +L1_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/l1-explorer" +ROLLUP_NODE_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" +ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" + +[gas-token] + +ALTERNATIVE_GAS_TOKEN_ENABLED = false +# EXAMPLE_GAS_TOKEN_DECIMAL = 6 +# L1_GAS_TOKEN = "0x68a041e7c20Afa4784b5d9C63246c89545Ac0E66" + +[sequencer] + +L2GETH_SIGNER_ADDRESS = "0x756EA06BDEe36de11F22DCca45a31d8a178eF3c6" +L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto":{"cipher":"aes-128-ctr","ciphertext":"8bfb4e48c6b172f1f5794d2874476ca62f8184507c0916dbd45fe77a0056114c","cipherparams":{"iv":"509eb70e7379a776e0779634b6668277"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":262144,"p":1,"r":8,"salt":"ef0f0334e5db7c12d76993e1e9627593fd0d7cd44444b689e792c86bc8a5d75f"},"mac":"d766cac11d0bd563316f5655ebf07550b6fce98ba0ca3c13acdc1b65f5f185ca"},"id":"4459ad67-f2ce-48b2-8940-c0582106a4c6","version":3}' +L2GETH_PASSWORD = "scroll2022" +L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" +L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' +[rollup] + +MAX_TX_IN_CHUNK = 100 +MAX_BLOCK_IN_CHUNK = 100 +MAX_BATCH_IN_BUNDLE = 30 +MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 +TEST_ENV_MOCK_FINALIZE_ENABLED = true +TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 + +[frontend] + +EXTERNAL_RPC_URI_L1 ="http://l1-devnet.scrollsdk" +EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" +BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" +ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" +EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" +EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" [genesis] L2_MAX_ETH_SUPPLY = "226156424291633194186662080095093570025917938800079226639565593765455331328" L2_DEPLOYER_INITIAL_BALANCE = 1000000000000000000 - [contracts] DEPLOYMENT_SALT = "" @@ -68,7 +90,6 @@ L1_PLONK_VERIFIER_ADDR = "0x0000000000000000000000000000000000000001" [contracts.overrides] # L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" -# L1_GAS_TOKEN = "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9" L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" @@ -81,11 +102,11 @@ L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" -[frontend] +[ingress] -EXTERNAL_RPC_URI_L1 ="http://l1-devnet.scrollsdk" -EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" -BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" -ROLLUPSCAN_API_URI = "https://rollup-explorer-backend.scrollsdk/api" -EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" -EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" \ No newline at end of file +FRONTEND_HOST = "frontends.scrollsdk" +BRIDGE_HISTORY_API_HOST = "bridge-history-api.scrollsdk" +ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" +COORDINATOR_API_HOST = "coordinator-api.scrollsdk" +RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" +BLOCKSCOUT_HOST = "blockscout.scrollsdk" diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index c4ce56c9..3598029b 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -78,7 +78,6 @@ }, "batch_proposer_config": { "propose_interval_milliseconds": 1000, - "max_chunk_num_per_batch": null, "max_l1_commit_gas_per_batch": 5000000, "max_l1_commit_calldata_size_per_batch": 110000, "batch_timeout_sec": 2700, diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index 028aa99e..ccf0a9d5 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -26,12 +26,13 @@ abstract contract Configuration is Script { string internal L1_RPC_ENDPOINT; string internal L2_RPC_ENDPOINT; + string internal CHAIN_NAME_L1; + string internal CHAIN_NAME_L2; uint64 internal CHAIN_ID_L1; uint64 internal CHAIN_ID_L2; uint256 internal MAX_TX_IN_CHUNK; uint256 internal MAX_BLOCK_IN_CHUNK; - uint256 internal MAX_CHUNK_IN_BATCH; uint256 internal MAX_BATCH_IN_BUNDLE; uint256 internal MAX_L1_MESSAGE_GAS_LIMIT; @@ -57,13 +58,14 @@ abstract contract Configuration is Script { address internal OWNER_ADDR; - address internal L2GETH_SIGNER_0_ADDRESS; + address internal L2GETH_SIGNER_ADDRESS; // db - string internal SCROLL_DB_CONNECTION_STRING; + string internal ROLLUP_NODE_DB_CONNECTION_STRING; string internal CHAIN_MONITOR_DB_CONNECTION_STRING; string internal BRIDGE_HISTORY_DB_CONNECTION_STRING; string internal ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING; + string internal COORDINATOR_DB_CONNECTION_STRING; // genesis uint256 internal L2_MAX_ETH_SUPPLY; @@ -103,21 +105,22 @@ abstract contract Configuration is Script { L1_RPC_ENDPOINT = cfg.readString(".general.L1_RPC_ENDPOINT"); L2_RPC_ENDPOINT = cfg.readString(".general.L2_RPC_ENDPOINT"); + CHAIN_NAME_L1 = cfg.readString(".general.CHAIN_NAME_L1"); + CHAIN_NAME_L2 = cfg.readString(".general.CHAIN_NAME_L2"); CHAIN_ID_L1 = uint64(cfg.readUint(".general.CHAIN_ID_L1")); CHAIN_ID_L2 = uint64(cfg.readUint(".general.CHAIN_ID_L2")); - MAX_TX_IN_CHUNK = cfg.readUint(".general.MAX_TX_IN_CHUNK"); - MAX_BLOCK_IN_CHUNK = cfg.readUint(".general.MAX_BLOCK_IN_CHUNK"); - MAX_CHUNK_IN_BATCH = cfg.readUint(".general.MAX_CHUNK_IN_BATCH"); - MAX_BATCH_IN_BUNDLE = cfg.readUint(".general.MAX_BATCH_IN_BUNDLE"); - MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".general.MAX_L1_MESSAGE_GAS_LIMIT"); + MAX_TX_IN_CHUNK = cfg.readUint(".rollup.MAX_TX_IN_CHUNK"); + MAX_BLOCK_IN_CHUNK = cfg.readUint(".rollup.MAX_BLOCK_IN_CHUNK"); + MAX_BATCH_IN_BUNDLE = cfg.readUint(".rollup.MAX_BATCH_IN_BUNDLE"); + MAX_L1_MESSAGE_GAS_LIMIT = cfg.readUint(".rollup.MAX_L1_MESSAGE_GAS_LIMIT"); L1_CONTRACT_DEPLOYMENT_BLOCK = cfg.readUint(".general.L1_CONTRACT_DEPLOYMENT_BLOCK"); - ALTERNATIVE_GAS_TOKEN_ENABLED = cfg.readBool(".general.ALTERNATIVE_GAS_TOKEN_ENABLED"); + ALTERNATIVE_GAS_TOKEN_ENABLED = cfg.readBool(".gas-token.ALTERNATIVE_GAS_TOKEN_ENABLED"); - TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".general.TEST_ENV_MOCK_FINALIZE_ENABLED"); - TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".general.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); + TEST_ENV_MOCK_FINALIZE_ENABLED = cfg.readBool(".rollup.TEST_ENV_MOCK_FINALIZE_ENABLED"); + TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = cfg.readUint(".rollup.TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC"); DEPLOYER_PRIVATE_KEY = cfg.readUint(".accounts.DEPLOYER_PRIVATE_KEY"); L1_COMMIT_SENDER_PRIVATE_KEY = cfg.readUint(".accounts.L1_COMMIT_SENDER_PRIVATE_KEY"); @@ -133,9 +136,9 @@ abstract contract Configuration is Script { OWNER_ADDR = cfg.readAddress(".accounts.OWNER_ADDR"); - L2GETH_SIGNER_0_ADDRESS = cfg.readAddress(".accounts.L2GETH_SIGNER_0_ADDRESS"); + L2GETH_SIGNER_ADDRESS = cfg.readAddress(".sequencer.L2GETH_SIGNER_ADDRESS"); - SCROLL_DB_CONNECTION_STRING = cfg.readString(".db.SCROLL_DB_CONNECTION_STRING"); + ROLLUP_NODE_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_NODE_DB_CONNECTION_STRING"); CHAIN_MONITOR_DB_CONNECTION_STRING = cfg.readString(".db.CHAIN_MONITOR_DB_CONNECTION_STRING"); BRIDGE_HISTORY_DB_CONNECTION_STRING = cfg.readString(".db.BRIDGE_HISTORY_DB_CONNECTION_STRING"); ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); @@ -174,7 +177,12 @@ abstract contract Configuration is Script { function tryGetOverride(string memory name) internal returns (address) { address addr; - string memory key = string(abi.encodePacked(".contracts.overrides.", name)); + string memory key; + if (keccak256(abi.encodePacked(name)) == keccak256(abi.encodePacked("L1_GAS_TOKEN"))) { + key = string(abi.encodePacked(".gas-token.", name)); + } else { + key = string(abi.encodePacked(".contracts.overrides.", name)); + } if (!vm.keyExistsToml(cfg, key)) { return address(0); diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 2381c112..eb87b55d 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -721,7 +721,7 @@ contract DeployScroll is DeterminsticDeployment { function deployGasToken() private gasToken(true) { uint8 decimal = 18; - string memory key = ".general.EXAMPLE_GAS_TOKEN_DECIMAL"; + string memory key = ".gas-token.EXAMPLE_GAS_TOKEN_DECIMAL"; if (vm.keyExistsToml(cfg, key)) { decimal = uint8(cfg.readUint(key)); } diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 8e4f3327..133ae0d9 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -55,10 +55,9 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); - vm.writeJson(vm.toString(MAX_CHUNK_IN_BATCH), ROLLUP_CONFIG_PATH, ".l2_config.batch_proposer_config.max_chunk_num_per_batch"); vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), ROLLUP_CONFIG_PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); - vm.writeJson(SCROLL_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); + vm.writeJson(ROLLUP_NODE_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); } } @@ -88,7 +87,7 @@ contract GenerateCoordinatorConfig is DeployScroll { vm.writeFile(COORDINATOR_CONFIG_PATH, template); vm.writeJson(vm.toString(CHAIN_ID_L2), COORDINATOR_CONFIG_PATH, ".l2.chain_id"); - vm.writeJson(SCROLL_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); + vm.writeJson(COORDINATOR_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); vm.writeJson(COORDINATOR_JWT_SECRET_KEY, COORDINATOR_CONFIG_PATH, ".auth.secret"); } } @@ -277,8 +276,8 @@ contract GenerateFrontendConfig is DeployScroll { function generateFrontendConfig() private { // use writeFile to start a new file vm.writeFile(FRONTEND_ENV_PATH, "REACT_APP_ETH_SYMBOL = \"ETH\"\n"); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_BASE_CHAIN = \"Ethereum\""); - vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_ROLLUP = \"Scroll Stack\""); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_BASE_CHAIN = \"", CHAIN_NAME_L1, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_ROLLUP = \"", CHAIN_NAME_L2, "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L1 = \"", vm.toString(CHAIN_ID_L1), "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_CHAIN_ID_L2 = \"", vm.toString(CHAIN_ID_L2), "\"")); vm.writeLine(FRONTEND_ENV_PATH, "REACT_APP_CONNECT_WALLET_PROJECT_ID = \"14efbaafcf5232a47d93a68229b71028\""); diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index 4ea461a9..d1be3be1 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -207,7 +207,7 @@ contract GenerateGenesis is DeployScroll { string memory extraData = string( abi.encodePacked( "0x0000000000000000000000000000000000000000000000000000000000000000", - vm.replace(vm.toString(L2GETH_SIGNER_0_ADDRESS), "0x", ""), + vm.replace(vm.toString(L2GETH_SIGNER_ADDRESS), "0x", ""), "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ) ); From 3a2ab2765977f406a4e8f2f0768cc3598922936b Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 4 Sep 2024 20:01:24 +0800 Subject: [PATCH 27/48] feat: remove dsn strings from configs (#34) --- docker/templates/bridge-history-config.json | 2 +- docker/templates/chain-monitor-config.json | 2 +- docker/templates/coordinator-config.json | 2 +- docker/templates/rollup-config.json | 2 +- scripts/deterministic/Configuration.sol | 7 ------- scripts/deterministic/GenerateConfigs.s.sol | 7 ------- 6 files changed, 4 insertions(+), 18 deletions(-) diff --git a/docker/templates/bridge-history-config.json b/docker/templates/bridge-history-config.json index f625a310..bbf8780b 100644 --- a/docker/templates/bridge-history-config.json +++ b/docker/templates/bridge-history-config.json @@ -42,7 +42,7 @@ "PufferGatewayAddr": "0x0000000000000000000000000000000000000000" }, "db": { - "dsn": null, + "dsn": "", "driverName": "postgres", "maxOpenNum": 200, "maxIdleNum": 20 diff --git a/docker/templates/chain-monitor-config.json b/docker/templates/chain-monitor-config.json index 1bc7fba8..e1b57c0e 100644 --- a/docker/templates/chain-monitor-config.json +++ b/docker/templates/chain-monitor-config.json @@ -51,7 +51,7 @@ }, "db_config": { "driver_name": "postgres", - "dsn": null, + "dsn": "", "maxOpenNum": 100, "maxIdleNum": 20 } diff --git a/docker/templates/coordinator-config.json b/docker/templates/coordinator-config.json index 75760e67..12d51857 100644 --- a/docker/templates/coordinator-config.json +++ b/docker/templates/coordinator-config.json @@ -25,7 +25,7 @@ }, "db": { "driver_name": "postgres", - "dsn": null, + "dsn": "", "maxOpenNum": 200, "maxIdleNum": 20 }, diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 3598029b..1a708972 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -91,7 +91,7 @@ }, "db_config": { "driver_name": "postgres", - "dsn": null, + "dsn": "", "maxOpenNum": 50, "maxIdleNum": 20 } diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index ccf0a9d5..ca3711c9 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -61,11 +61,7 @@ abstract contract Configuration is Script { address internal L2GETH_SIGNER_ADDRESS; // db - string internal ROLLUP_NODE_DB_CONNECTION_STRING; - string internal CHAIN_MONITOR_DB_CONNECTION_STRING; - string internal BRIDGE_HISTORY_DB_CONNECTION_STRING; string internal ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING; - string internal COORDINATOR_DB_CONNECTION_STRING; // genesis uint256 internal L2_MAX_ETH_SUPPLY; @@ -138,9 +134,6 @@ abstract contract Configuration is Script { L2GETH_SIGNER_ADDRESS = cfg.readAddress(".sequencer.L2GETH_SIGNER_ADDRESS"); - ROLLUP_NODE_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_NODE_DB_CONNECTION_STRING"); - CHAIN_MONITOR_DB_CONNECTION_STRING = cfg.readString(".db.CHAIN_MONITOR_DB_CONNECTION_STRING"); - BRIDGE_HISTORY_DB_CONNECTION_STRING = cfg.readString(".db.BRIDGE_HISTORY_DB_CONNECTION_STRING"); ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING = cfg.readString(".db.ROLLUP_EXPLORER_DB_CONNECTION_STRING"); L2_MAX_ETH_SUPPLY = cfg.readUint(".genesis.L2_MAX_ETH_SUPPLY"); diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 133ae0d9..247622af 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -56,8 +56,6 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), ROLLUP_CONFIG_PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); - - vm.writeJson(ROLLUP_NODE_DB_CONNECTION_STRING, ROLLUP_CONFIG_PATH, ".db_config.dsn"); } } @@ -87,7 +85,6 @@ contract GenerateCoordinatorConfig is DeployScroll { vm.writeFile(COORDINATOR_CONFIG_PATH, template); vm.writeJson(vm.toString(CHAIN_ID_L2), COORDINATOR_CONFIG_PATH, ".l2.chain_id"); - vm.writeJson(COORDINATOR_DB_CONNECTION_STRING, COORDINATOR_CONFIG_PATH, ".db.dsn"); vm.writeJson(COORDINATOR_JWT_SECRET_KEY, COORDINATOR_CONFIG_PATH, ".auth.secret"); } } @@ -144,9 +141,6 @@ contract GenerateChainMonitorConfig is DeployScroll { vm.writeJson(vm.toString(L2_ERC1155_GATEWAY_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.l2_gateways.erc1155_gateway"); vm.writeJson(vm.toString(L2_SCROLL_MESSENGER_PROXY_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.scroll_messenger"); vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), CHAIN_MONITOR_CONFIG_PATH, ".l2_config.l2_contracts.message_queue"); - - // misc - vm.writeJson(CHAIN_MONITOR_DB_CONNECTION_STRING, CHAIN_MONITOR_CONFIG_PATH, ".db_config.dsn"); } } @@ -206,7 +200,6 @@ contract GenerateBridgeHistoryConfig is DeployScroll { vm.writeJson(L2_RPC_ENDPOINT, BRIDGE_HISTORY_CONFIG_PATH, ".L2.endpoint"); // others - vm.writeJson(BRIDGE_HISTORY_DB_CONNECTION_STRING, BRIDGE_HISTORY_CONFIG_PATH, ".db.dsn"); vm.writeJson(vm.toString(L1_CONTRACT_DEPLOYMENT_BLOCK), BRIDGE_HISTORY_CONFIG_PATH, ".L1.startHeight"); } } From 3f9e8e478b9c7bd332eae10103a2de92cabe8606 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 4 Sep 2024 20:42:54 +0800 Subject: [PATCH 28/48] fix: script check balance (#33) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Péter Garamvölgyi --- scripts/deterministic/DeployScroll.s.sol | 34 ++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index eb87b55d..7353ca80 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -197,6 +197,14 @@ contract DeployScroll is DeterminsticDeployment { _; } + /// @dev Do not execute block if we run the script on the specified layer. + modifier skip(Layer layer) { + if (broadcastLayer == layer) { + return; + } + _; + } + /// @dev Only execute block if it's requied by alternative gas token mode. modifier gasToken(bool gasTokenRequire) { if (ALTERNATIVE_GAS_TOKEN_ENABLED != gasTokenRequire) { @@ -264,7 +272,11 @@ contract DeployScroll is DeterminsticDeployment { // check funds for initial deposit (L1, ETH as gas token) if (broadcastLayer == Layer.L1 && !ALTERNATIVE_GAS_TOKEN_ENABLED) { - uint256 l1MessengerBalance = address(L1_SCROLL_MESSENGER_PROXY_ADDR).balance; + // note: L1_SCROLL_MESSENGER_PROXY_ADDR is not known at this point, + // so we read it directly from the generated configuration file. + address l1MessengerProxyAddr = notnull(contractsCfg.readAddress(".L1_SCROLL_MESSENGER_PROXY_ADDR")); + + uint256 l1MessengerBalance = l1MessengerProxyAddr.balance; uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE; uint256 amountToSend = 0; @@ -291,12 +303,15 @@ contract DeployScroll is DeterminsticDeployment { // check funds for initial deposit (L1, alternative gas token) // skip it if L1_GAS_TOKEN is not configured in the config file address gasTokenAddr = tryGetOverride("L1_GAS_TOKEN"); + if (broadcastLayer == Layer.L1 && ALTERNATIVE_GAS_TOKEN_ENABLED && gasTokenAddr != address(0)) { - uint256 l1GasTokenGatewayBalance = IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf( - L1_GAS_TOKEN_GATEWAY_PROXY_ADDR - ); + // note: L1_GAS_TOKEN_GATEWAY_PROXY_ADDR is not known at this point, + // so we read it directly from the generated configuration file. + address l1GasTokenGatewayAddr = notnull(contractsCfg.readAddress(".L1_GAS_TOKEN_GATEWAY_PROXY_ADDR")); - uint256 scale = 10**(18 - IERC20Metadata(L1_GAS_TOKEN_ADDR).decimals()); + uint256 l1GasTokenGatewayBalance = IERC20Metadata(gasTokenAddr).balanceOf(l1GasTokenGatewayAddr); + + uint256 scale = 10**(18 - IERC20Metadata(gasTokenAddr).decimals()); uint256 amountToLock = L2_DEPLOYER_INITIAL_BALANCE / scale; if (L2_DEPLOYER_INITIAL_BALANCE % scale != 0) { amountToLock += 1; @@ -309,14 +324,14 @@ contract DeployScroll is DeterminsticDeployment { uint256 minBalance = amountToSend; - if (IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf(DEPLOYER_ADDR) < minBalance) { + if (IERC20Metadata(gasTokenAddr).balanceOf(DEPLOYER_ADDR) < minBalance) { revert( string( abi.encodePacked( "[ERROR] insufficient funds on deployer account for initial deposit (", vm.toString(DEPLOYER_ADDR), ") minimum ", - IERC20Metadata(L1_GAS_TOKEN_ADDR).symbol(), + IERC20Metadata(gasTokenAddr).symbol(), " balance (in min token unit): ", vm.toString(minBalance) ) @@ -1033,7 +1048,10 @@ contract DeployScroll is DeterminsticDeployment { upgrade(L1_PROXY_ADMIN_ADDR, L1_ERC1155_GATEWAY_PROXY_ADDR, L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); } - function deployL1GasTokenGateway() private gasToken(true) { + // Only run this block during simulation (for predicting the contract address) + // and during deployment on L1. Running it on L2 would fail, as this contract + // calls `gasToken.decimals()` in its constructor. + function deployL1GasTokenGateway() private gasToken(true) skip(Layer.L2) { bytes memory args = abi.encode( notnull(L1_GAS_TOKEN_ADDR), notnull(L2_ETH_GATEWAY_PROXY_ADDR), From 3793c18ec8b02ec1d13a759e2b3f21d7b69d08ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Thu, 5 Sep 2024 07:57:28 +0200 Subject: [PATCH 29/48] Update genesis.json --- docker/templates/genesis.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docker/templates/genesis.json b/docker/templates/genesis.json index 9cb2ee88..ff8769b4 100644 --- a/docker/templates/genesis.json +++ b/docker/templates/genesis.json @@ -20,7 +20,8 @@ "darwinV2Time": 0, "clique": { "period": 3, - "epoch": 30000 + "epoch": 30000, + "relaxed_period": true }, "scroll": { "useZktrie": true, @@ -47,4 +48,4 @@ "gasUsed": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "baseFeePerGas": null -} \ No newline at end of file +} From 611913cb5a92f1b9f1f20916808372a1dee1a7ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A9ter=20Garamv=C3=B6lgyi?= Date: Fri, 6 Sep 2024 16:45:46 +0200 Subject: [PATCH 30/48] feat: add test to check deterministic addresses (#35) Co-authored-by: Morty <70688412+yiweichi@users.noreply.github.com> --- .github/workflows/contracts.yml | 2 +- scripts/deterministic/Configuration.sol | 12 +- scripts/deterministic/DeployScroll.s.sol | 6 +- .../deterministic/DeterministicDeployment.sol | 39 +++-- scripts/deterministic/GenerateConfigs.s.sol | 15 +- scripts/deterministic/GenerateGenesis.s.sol | 3 +- src/test/deterministic/DeployScroll.t.sol | 134 ++++++++++++++++++ 7 files changed, 171 insertions(+), 40 deletions(-) create mode 100644 src/test/deterministic/DeployScroll.t.sol diff --git a/.github/workflows/contracts.yml b/.github/workflows/contracts.yml index 0ef00374..2e6b02f9 100644 --- a/.github/workflows/contracts.yml +++ b/.github/workflows/contracts.yml @@ -76,7 +76,7 @@ jobs: run: forge test --evm-version cancun -vvv - name: Run foundry coverage - run : forge coverage --evm-version cancun --report lcov + run : forge coverage --evm-version cancun --skip "DeployScroll.t.sol" --report lcov - name : Prune coverage run : lcov --rc branch_coverage=1 --remove ./lcov.info -o ./lcov.info.pruned 'src/mocks/*' 'src/test/*' 'scripts/*' 'node_modules/*' 'lib/*' diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index ca3711c9..b61c0d90 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -85,11 +85,11 @@ abstract contract Configuration is Script { string internal EXTERNAL_EXPLORER_URI_L1; string internal EXTERNAL_EXPLORER_URI_L2; - /*************** - * Constructor * - ***************/ + /********************** + * Internal interface * + **********************/ - constructor() { + function readConfig() internal { if (!vm.exists(CONFIG_CONTRACTS_PATH)) { string memory template = vm.readFile(CONFIG_CONTRACTS_TEMPLATE_PATH); vm.writeFile(CONFIG_CONTRACTS_PATH, template); @@ -157,10 +157,6 @@ abstract contract Configuration is Script { runSanityCheck(); } - /********************** - * Internal interface * - **********************/ - /// @dev Ensure that `addr` is not the zero address. /// This helps catch bugs arising from incorrect deployment order. function notnull(address addr) internal pure returns (address) { diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 7353ca80..26c53db2 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -80,7 +80,7 @@ contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { } } -contract DeployScroll is DeterminsticDeployment { +contract DeployScroll is DeterministicDeployment { using stdToml for string; /********* @@ -219,7 +219,9 @@ contract DeployScroll is DeterminsticDeployment { function run(string memory layer, string memory scriptMode) public { broadcastLayer = parseLayer(layer); - setScriptMode(scriptMode); + ScriptMode mode = parseScriptMode(scriptMode); + + DeterministicDeployment.initialize(mode); checkDeployerBalance(); deployAllContracts(); diff --git a/scripts/deterministic/DeterministicDeployment.sol b/scripts/deterministic/DeterministicDeployment.sol index bd309cf5..98390508 100644 --- a/scripts/deterministic/DeterministicDeployment.sol +++ b/scripts/deterministic/DeterministicDeployment.sol @@ -11,8 +11,8 @@ import {ERC1967Upgrade} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgra import {CONFIG_CONTRACTS_PATH, DEFAULT_DEPLOYMENT_SALT, DETERMINISTIC_DEPLOYMENT_PROXY_ADDR} from "./Constants.sol"; import {Configuration} from "./Configuration.sol"; -/// @notice DeterminsticDeployment provides utilities for deterministic contract deployments. -abstract contract DeterminsticDeployment is Configuration { +/// @notice DeterministicDeployment provides utilities for deterministic contract deployments. +abstract contract DeterministicDeployment is Configuration { using stdToml for string; /********* @@ -23,7 +23,8 @@ abstract contract DeterminsticDeployment is Configuration { None, LogAddresses, WriteConfig, - VerifyConfig + VerifyConfig, + EmptyConfig } /******************* @@ -34,14 +35,18 @@ abstract contract DeterminsticDeployment is Configuration { string private saltPrefix; bool private skipDeploy; - /*************** - * Constructor * - ***************/ + /********************** + * Internal interface * + **********************/ - constructor() { - mode = ScriptMode.None; + function initialize(ScriptMode _mode) internal { + mode = _mode; skipDeploy = false; + if (mode != ScriptMode.EmptyConfig) { + readConfig(); + } + // salt prefix used for deterministic deployments if (bytes(DEPLOYMENT_SALT).length != 0) { saltPrefix = DEPLOYMENT_SALT; @@ -63,23 +68,15 @@ abstract contract DeterminsticDeployment is Configuration { } } - /********************** - * Internal interface * - **********************/ - - function setScriptMode(ScriptMode scriptMode) internal { - mode = scriptMode; - } - - function setScriptMode(string memory scriptMode) internal { + function parseScriptMode(string memory scriptMode) internal pure returns (ScriptMode) { if (keccak256(bytes(scriptMode)) == keccak256(bytes("log-addresses"))) { - mode = ScriptMode.LogAddresses; + return ScriptMode.LogAddresses; } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("write-config"))) { - mode = ScriptMode.WriteConfig; + return ScriptMode.WriteConfig; } else if (keccak256(bytes(scriptMode)) == keccak256(bytes("verify-config"))) { - mode = ScriptMode.VerifyConfig; + return ScriptMode.VerifyConfig; } else { - mode = ScriptMode.None; + return ScriptMode.None; } } diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 247622af..88c3e925 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -3,6 +3,7 @@ pragma solidity =0.8.24; import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; +import {DeterministicDeployment} from "./DeterministicDeployment.sol"; contract GenerateRollupConfig is DeployScroll { /*************** @@ -10,7 +11,7 @@ contract GenerateRollupConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateRollupConfig(); @@ -65,7 +66,7 @@ contract GenerateCoordinatorConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateCoordinatorConfig(); @@ -95,7 +96,7 @@ contract GenerateChainMonitorConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateChainMonitorConfig(); @@ -150,7 +151,7 @@ contract GenerateBridgeHistoryConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateBridgeHistoryConfig(); @@ -210,7 +211,7 @@ contract GenerateBalanceCheckerConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateBalanceCheckerConfig(); @@ -255,7 +256,7 @@ contract GenerateFrontendConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateFrontendConfig(); @@ -335,7 +336,7 @@ contract GenerateRollupExplorerBackendConfig is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateRollupExplorerBackendConfig(); diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index d1be3be1..d0c3e9cd 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -9,6 +9,7 @@ import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; import {DETERMINISTIC_DEPLOYMENT_PROXY_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT, GENESIS_ALLOC_JSON_PATH, GENESIS_JSON_PATH, GENESIS_JSON_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; +import {DeterministicDeployment} from "./DeterministicDeployment.sol"; contract GenerateGenesis is DeployScroll { /*************** @@ -16,7 +17,7 @@ contract GenerateGenesis is DeployScroll { ***************/ function run() public { - setScriptMode(ScriptMode.VerifyConfig); + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); predictAllContracts(); generateGenesisAlloc(); diff --git a/src/test/deterministic/DeployScroll.t.sol b/src/test/deterministic/DeployScroll.t.sol new file mode 100644 index 00000000..df5fb964 --- /dev/null +++ b/src/test/deterministic/DeployScroll.t.sol @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {TestBase} from "forge-std/Base.sol"; +import {StdAssertions} from "forge-std/StdAssertions.sol"; + +import {DeployScroll} from "../../../scripts/deterministic/DeployScroll.s.sol"; +import {DeterministicDeployment} from "../../../scripts/deterministic/DeterministicDeployment.sol"; + +// DeployScrollTest tests the deterministic addresses generated by the DeployScroll script. +// This test allows us to detect changes to the deterministic deployment addresses. +contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { + function setUp() public { + // use a specific deployment salt + DEPLOYMENT_SALT = "test-123"; + + // skip reading config from file, work with default (empty) values + DeterministicDeployment.initialize(ScriptMode.EmptyConfig); + + // need to set this to a non-zero address + L1_PLONK_VERIFIER_ADDR = address(1); + } + + function testDefaultAddresses() public { + predictAllContracts(); + checkCommonAddresses(); + + assertEq(0xc42A1Bf23C85B87f0630a4aBD179900c96BC2929, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x904699c3146cE384a5B47Ebf7Ddf8c592E203F2C, L1_ETH_GATEWAY_PROXY_ADDR); + assertEq(0x5e27Eea664f5aB1849025195DF2b7e619f904358, L1_WETH_GATEWAY_PROXY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_GATEWAY_PROXY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_WRAPPED_TOKEN_GATEWAY_ADDR); + assertEq(0x6D7Aff5a2D9bF44cE086199FEF11BD865E089f9d, L2_WETH_GATEWAY_PROXY_ADDR); + assertEq(0xd7aDC5e99A29f9f76E3F638Fd6a1C5e9692C2d69, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + assertEq(0x19f984928A8c1c08e7411c29D3ed07694C8905Cb, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xFdDfA03a778fE77DDf0E1E479DEdCD1Aea37E808, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x3DAD8B5526C420Ae43bf1a7125643ea217A220A1, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xded0C0D084A9eb3bA7E86dC1C0826A13055F9d7d, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function testMockFinalizeAddresses() public { + TEST_ENV_MOCK_FINALIZE_ENABLED = true; + + predictAllContracts(); + checkCommonAddresses(); + + assertEq(0xf3f7244F57171A29ed963F8BA1ec48C361BAac67, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x904699c3146cE384a5B47Ebf7Ddf8c592E203F2C, L1_ETH_GATEWAY_PROXY_ADDR); + assertEq(0x5e27Eea664f5aB1849025195DF2b7e619f904358, L1_WETH_GATEWAY_PROXY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_GATEWAY_PROXY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_WRAPPED_TOKEN_GATEWAY_ADDR); + assertEq(0x6D7Aff5a2D9bF44cE086199FEF11BD865E089f9d, L2_WETH_GATEWAY_PROXY_ADDR); + assertEq(0xd7aDC5e99A29f9f76E3F638Fd6a1C5e9692C2d69, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + assertEq(0x19f984928A8c1c08e7411c29D3ed07694C8905Cb, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xFdDfA03a778fE77DDf0E1E479DEdCD1Aea37E808, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x3DAD8B5526C420Ae43bf1a7125643ea217A220A1, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xded0C0D084A9eb3bA7E86dC1C0826A13055F9d7d, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function testAltGasTokenAddresses() public { + ALTERNATIVE_GAS_TOKEN_ENABLED = true; + + predictAllContracts(); + checkCommonAddresses(); + + assertEq(0xc42A1Bf23C85B87f0630a4aBD179900c96BC2929, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_ETH_GATEWAY_PROXY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_WETH_GATEWAY_PROXY_ADDR); + assertEq(0xd7919F1390711D610961cb27D2BE0BD2Ec1E5704, L1_GAS_TOKEN_ADDR); + assertEq(0xfFfbB2b3Df00048D4fE12f342D425C98ca709450, L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x4F5264c7a2A14B4D68C40369255A8f07D91D8a68, L1_GAS_TOKEN_GATEWAY_PROXY_ADDR); + assertEq(0x78664dbFB260D8053f49F1241ffCe06B0C3a533e, L1_WRAPPED_TOKEN_GATEWAY_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L2_WETH_GATEWAY_PROXY_ADDR); + assertEq(0xEf4d0C615D480d20475d50A5127e74C9B704E563, L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xFA99FF03e6Dd89e12aaF70DA363D02B5Ab5c2d8F, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x0000000000000000000000000000000000000000, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + } + + function checkCommonAddresses() internal view { + assertEq(0x157A45eF5dFAb2C26b8905077c08A9F2018f48FD, L1_WETH_ADDR); + assertEq(0x4Bd916ecac9c5DBd6f15208c8632802Fd2c49e82, L1_PROXY_ADMIN_ADDR); + assertEq(0x28b7e53497D08F70476001cc41C719e68425D161, L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR); + assertEq(0x602EEf44E8898cC7Cd2e1f54B01E77B4Ca855b8C, L1_WHITELIST_ADDR); + assertEq(0xC8894eF4aA8f141138Be9CF7161aD0A5afFC4a58, L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR); + assertEq(0x13629E678a8Cb5e532270104EcB5648B77ca91fc, L2_GAS_PRICE_ORACLE_PROXY_ADDR); + assertEq(0x7C68fab1e8c32A321069866b6F1D4403F05C5f44, L1_SCROLL_CHAIN_PROXY_ADDR); + assertEq(0xC97658507021A2EB494298CAA815B83BC3DE935b, L1_SCROLL_MESSENGER_PROXY_ADDR); + assertEq(0x02476A470215Bd2F268179492431230C5Dc607C8, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0xcCBBecF7B9D6e1CD2dF1aEFab510c0697d04AC1f, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR); + assertEq(0xC74599653677A4795d79CBd6D4a5AE2D4615384D, L1_ZKEVM_VERIFIER_V2_ADDR); + assertEq(0x4aAD8eF23d69f5b6Ca8bD58A0789950084116baF, L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR); + assertEq(0x650522433606B6f232cA0C8d0D5245b6571c180a, L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR); + assertEq(0x09a4C2780ECBfF76a58957b93ea66D9727eF6A4C, L1_MESSAGE_QUEUE_PROXY_ADDR); + assertEq(0xd18137D9b43061477C3DA4453E2F3D1B03453efc, L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR); + assertEq(0xdE659359688d66932d951A75C31c106D3105a55E, L1_GATEWAY_ROUTER_PROXY_ADDR); + assertEq(0xeF4e9d1C5CFd6A007D3353E1A7Beed94b645709E, L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR); + assertEq(0xEf32c7F1326e781b0f04C54883Eedb0d6a9A2646, L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR); + assertEq(0x0c65C12Ac7490627A84D8A55a08FE0da7C6Ec850, L1_ERC721_GATEWAY_PROXY_ADDR); + assertEq(0x610b392EBBdA6cf34140ffFD8522D0A01cF4d8A6, L1_ERC1155_GATEWAY_PROXY_ADDR); + assertEq(0xDEa0476e9F32C3218ADF8823eba61995D5f5558B, L2_MESSAGE_QUEUE_ADDR); + assertEq(0x70E868415c7532E436d67b7aE417Bd1551142A9d, L1_GAS_PRICE_ORACLE_ADDR); + assertEq(0xaFbB29CC183006748fBF1d6a50426699801B3f6e, L2_WHITELIST_ADDR); + assertEq(0x26fE70D2D9aA9f3DF3031A8a36bd7585b56f3e1c, L2_WETH_ADDR); + assertEq(0x5918A73f1c4825537abA44c7ae1e51b29e584c55, L2_TX_FEE_VAULT_ADDR); + assertEq(0x639F9169025652D95b5c30080ee65177ff539e2d, L2_PROXY_ADMIN_ADDR); + assertEq(0x1454F7362F8b982177b74CAc02F0428ef6044d27, L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR); + assertEq(0xEE6FE96bA71AdCB8AE724032F7a9DB8A3e7f87E7, L2_SCROLL_MESSENGER_PROXY_ADDR); + assertEq(0xD855e6939648a2625DDfBE97070Ec7C48FC5F68c, L2_ETH_GATEWAY_PROXY_ADDR); + assertEq(0xA0E064607751ef6BfC0d1257438aD021962cD641, L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR); + assertEq(0x96ae0854179483429E89F7507642Aa83B28ebB9e, L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR); + assertEq(0xc1DC112B26e925Ce0f797Ea6e3438871dc7Be72D, L2_ERC721_GATEWAY_PROXY_ADDR); + assertEq(0x2B04b351d5BD976A739DE30190bE5fEEf3145C27, L2_ERC1155_GATEWAY_PROXY_ADDR); + assertEq(0x923e805f714b2cE849DB9D7E76C9C3ddCa907102, L2_SCROLL_STANDARD_ERC20_ADDR); + assertEq(0x00C080bc75e59b1e56331a5D15FC1aB50766B4D2, L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR); + assertEq(0x8b284df9bDfC51029323788111ABCf26a2EDcA2C, L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x7d1802E55Bb5563aFAf7Dd196E85Bd5af297EFd9, L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x8EC6F24852F44f4d329aC981cAD28c06C99aFCF3, L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x6a7d33D8eD31dDf30eB9cb0f6DBFF7e18A129959, L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x89fE9D485E04097E8eAf2bb3Ed9d61F506c71d1B, L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR); + assertEq(0xb2367f9a1F5F190788676743176F2b572F285c91, L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR); + assertEq(0x63d77812d2b762F329DB713c0030AC85A388B7f2, L2_GATEWAY_ROUTER_PROXY_ADDR); + assertEq(0xDbe21F0Cf7c8F4F912cD29f9932311C49975a0b7, L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x59afd1A478Cc0336EE8e97d10b6f59E64089eB4D, L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x82206B0f4c561e7E4780E824833217D1b371D4a9, L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x505cf5aEC35CED635Bf24eE5F15B7634D15A2a67, L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR); + } +} From 574c7833a32a4ca780a27ce73efc76ca2e819619 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Tue, 10 Sep 2024 19:59:08 +0800 Subject: [PATCH 31/48] feat: remove private keys from rollup config (#36) --- docker/templates/rollup-config.json | 8 ++++---- scripts/deterministic/GenerateConfigs.s.sol | 6 ------ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 1a708972..23168d52 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -24,7 +24,7 @@ "l1_base_fee_default": 15000000000, "l1_blob_base_fee_default": 1 }, - "gas_oracle_sender_private_key": null + "gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313" } }, "l2_config": { @@ -60,9 +60,9 @@ "enable_test_env_bypass_features": null, "finalize_batch_without_proof_timeout_sec": null, "finalize_bundle_without_proof_timeout_sec": null, - "gas_oracle_sender_private_key": null, - "commit_sender_private_key": null, - "finalize_sender_private_key": null, + "gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313", + "commit_sender_private_key": "1414141414141414141414141414141414141414141414141414141414141414", + "finalize_sender_private_key": "1515151515151515151515151515151515151515151515151515151515151515", "l1_commit_gas_limit_multiplier": 1.2 }, "chunk_proposer_config": { diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 88c3e925..eb4dd8c0 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -43,12 +43,6 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.rollup_contract_address"); vm.writeJson(vm.toString(L2_GAS_PRICE_ORACLE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_price_oracle_contract_address"); - // private keys - vm.writeJson(vm.toString(bytes32(L1_GAS_ORACLE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_sender_private_key"); - vm.writeJson(vm.toString(bytes32(L1_COMMIT_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.commit_sender_private_key"); - vm.writeJson(vm.toString(bytes32(L1_FINALIZE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_sender_private_key"); - vm.writeJson(vm.toString(bytes32(L2_GAS_ORACLE_SENDER_PRIVATE_KEY)), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_sender_private_key"); - // other vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_ENABLED), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.enable_test_env_bypass_features"); vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.finalize_batch_without_proof_timeout_sec"); From 0c993a7096f95995d50a43f0419251f56012b702 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 18 Sep 2024 19:25:56 +0800 Subject: [PATCH 32/48] feat: add admin system (#27) --- docker/Dockerfile.gen-configs | 1 + docker/config-example.toml | 5 ++ docker/scripts/gen-configs.sh | 4 ++ .../admin-system-backend-config.json | 59 +++++++++++++++++++ scripts/deterministic/Configuration.sol | 4 ++ scripts/deterministic/Constants.sol | 4 +- scripts/deterministic/GenerateConfigs.s.sol | 32 +++++++++- 7 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 docker/templates/admin-system-backend-config.json diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs index c18534ed..519ff256 100644 --- a/docker/Dockerfile.gen-configs +++ b/docker/Dockerfile.gen-configs @@ -49,6 +49,7 @@ COPY ./docker/templates/coordinator-config.json /contracts/docker/templates/coor COPY ./docker/templates/genesis.json /contracts/docker/templates/genesis.json COPY ./docker/templates/rollup-config.json /contracts/docker/templates/rollup-config.json COPY ./docker/templates/rollup-explorer-backend-config.json /contracts/docker/templates/rollup-explorer-backend-config.json +COPY ./docker/templates/admin-system-backend-config.json /contracts/docker/templates/admin-system-backend-config.json COPY ./docker/scripts/gen-configs.sh /contracts/docker/scripts/gen-configs.sh diff --git a/docker/config-example.toml b/docker/config-example.toml index c702f47a..bb580b3c 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -33,6 +33,7 @@ L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" [db] +ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgresql://postgres:qwerty12345@postgresql:5432/scroll_admin_system?sslmode=disable" BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/blockscout" BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" @@ -73,6 +74,8 @@ BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" EXTERNAL_EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" EXTERNAL_EXPLORER_URI_L2 = "http://blockscout.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_URI = "http://admin-system-dashboard.scrollsdk" +GRAFANA_URI = "http://grafana.scrollsdk" [genesis] @@ -110,3 +113,5 @@ ROLLUP_EXPLORER_API_HOST = "rollup-explorer-backend.scrollsdk" COORDINATOR_API_HOST = "coordinator-api.scrollsdk" RPC_GATEWAY_HOST = "l2-rpc.scrollsdk" BLOCKSCOUT_HOST = "blockscout.scrollsdk" +ADMIN_SYSTEM_DASHBOARD_HOST= "admin-system-dashboard.scrollsdk" +GRAFANA_HOST = "http://grafana.scrollsdk" diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index 26ab8fa5..00891691 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -52,3 +52,7 @@ forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateFrontendConfig echo "" echo "generating rollup-explorer-backend-config.json" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupExplorerBackendConfig || exit 1 + +echo "" +echo "generating admin-system-backend-config.json" +forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateAdminSystemBackendConfig || exit 1 diff --git a/docker/templates/admin-system-backend-config.json b/docker/templates/admin-system-backend-config.json new file mode 100644 index 00000000..2687e0e0 --- /dev/null +++ b/docker/templates/admin-system-backend-config.json @@ -0,0 +1,59 @@ +{ + "db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "read_only_db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "db_mappings": { + "default": "read_only", + "batch_chunk": "read_only", + "prover_block_list": "read_write" + }, + "auth_db_config": { + "driver_name": "postgres", + "dsn": "", + "max_open_connections": 200, + "max_idel_connections": 20 + }, + "authentication": { + "mode": "skip", + "jwt": { + "secret": "scroll admin system secret key", + "token_expire_seconds": 3600 + }, + "ldap": { + "endpoint": "ldap://xxx.xxx.com:389", + "bind_dn": "", + "bind_password": "", + "search_base_dn_list": [""], + "search_filter": "(mail=%s)" + }, + "otp": { + "issuer": "ScrollAdmin(Dev)", + "enabled": true, + "admin_only": true + } + }, + "authorization": { + "casbin": { + "model_path": "conf/model.conf", + "policy_path": "conf/policy.csv" + } + }, + "prometheus": { + "endpoint": "https://xxx.xxx.com/prometheus", + "user": "", + "password": "" + }, + "admin": { + "prover_becomes_offline_since_last_get_task_seconds": 3600, + "prover_becomes_idle_since_last_task_assigned_seconds": 1800 + } +} \ No newline at end of file diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index b61c0d90..eed6e28b 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -84,6 +84,8 @@ abstract contract Configuration is Script { string internal ROLLUPSCAN_API_URI; string internal EXTERNAL_EXPLORER_URI_L1; string internal EXTERNAL_EXPLORER_URI_L2; + string internal ADMIN_SYSTEM_DASHBOARD_URI; + string internal GRAFANA_URI; /********************** * Internal interface * @@ -153,6 +155,8 @@ abstract contract Configuration is Script { ROLLUPSCAN_API_URI = cfg.readString(".frontend.ROLLUPSCAN_API_URI"); EXTERNAL_EXPLORER_URI_L1 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L1"); EXTERNAL_EXPLORER_URI_L2 = cfg.readString(".frontend.EXTERNAL_EXPLORER_URI_L2"); + ADMIN_SYSTEM_DASHBOARD_URI = cfg.readString(".frontend.ADMIN_SYSTEM_DASHBOARD_URI"); + GRAFANA_URI = cfg.readString(".frontend.GRAFANA_URI"); runSanityCheck(); } diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index f83a32c3..4264f061 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -20,6 +20,7 @@ string constant CHAIN_MONITOR_CONFIG_TEMPLATE_PATH = "./docker/templates/chain-m string constant BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH = "./docker/templates/bridge-history-config.json"; string constant BALANCE_CHECKER_CONFIG_TEMPLATE_PATH = "./docker/templates/balance-checker-config.json"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH = "./docker/templates/rollup-explorer-backend-config.json"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH = "./docker/templates/admin-system-backend-config.json"; // input files string constant CONFIG_PATH = "./volume/config.toml"; @@ -35,6 +36,7 @@ string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.jso string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; string constant FRONTEND_ENV_PATH = "./volume/frontend-config"; string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./volume/admin-system-backend-config.json"; // plonk verifier configs -bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; +bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; \ No newline at end of file diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index eb4dd8c0..ee9b4526 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; -import {BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH, BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; @@ -278,6 +278,8 @@ contract GenerateFrontendConfig is DeployScroll { vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_ROLLUPSCAN_API_URI = \"", ROLLUPSCAN_API_URI, "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_EXPLORER_URI_L1 = \"", EXTERNAL_EXPLORER_URI_L1, "\"")); vm.writeLine(FRONTEND_ENV_PATH, string.concat("REACT_APP_EXTERNAL_EXPLORER_URI_L2 = \"", EXTERNAL_EXPLORER_URI_L2, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("ADMIN_SYSTEM_DASHBOARD_URI = \"", ADMIN_SYSTEM_DASHBOARD_URI, "\"")); + vm.writeLine(FRONTEND_ENV_PATH, string.concat("GRAFANA_URI = \"", GRAFANA_URI, "\"")); // L1 contracts vm.writeLine(FRONTEND_ENV_PATH, ""); @@ -353,3 +355,31 @@ contract GenerateRollupExplorerBackendConfig is DeployScroll { vm.writeJson(ROLLUP_EXPLORER_BACKEND_DB_CONNECTION_STRING, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ".db_url"); } } + +contract GenerateAdminSystemBackendConfig is DeployScroll { + /*************** + * Entry point * + ***************/ + + function run() public { + DeterministicDeployment.initialize(ScriptMode.VerifyConfig); + predictAllContracts(); + + generateAdminSystemBackendConfig(); + } + + /********************* + * Private functions * + *********************/ + + // prettier-ignore + function generateAdminSystemBackendConfig() private { + // initialize template file + if (vm.exists(ADMIN_SYSTEM_BACKEND_CONFIG_PATH)) { + vm.removeFile(ADMIN_SYSTEM_BACKEND_CONFIG_PATH); + } + + string memory template = vm.readFile(ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH); + vm.writeFile(ADMIN_SYSTEM_BACKEND_CONFIG_PATH, template); + } +} From e5dfde68ea393a84bdb638a9b445763c475bcc5c Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Fri, 20 Sep 2024 20:07:50 +0800 Subject: [PATCH 33/48] fix: remove L2GasPriceOracle from deployment (#38) --- docker/templates/config-contracts.toml | 2 - scripts/deterministic/DeployScroll.s.sol | 55 +++++---------------- scripts/deterministic/GenerateConfigs.s.sol | 2 +- src/test/deterministic/DeployScroll.t.sol | 2 - 4 files changed, 14 insertions(+), 47 deletions(-) diff --git a/docker/templates/config-contracts.toml b/docker/templates/config-contracts.toml index ddc19d7b..437772b6 100644 --- a/docker/templates/config-contracts.toml +++ b/docker/templates/config-contracts.toml @@ -2,8 +2,6 @@ L1_WETH_ADDR = "" L1_PROXY_ADMIN_ADDR = "" L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR = "" L1_WHITELIST_ADDR = "" -L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR = "" -L2_GAS_PRICE_ORACLE_PROXY_ADDR = "" L1_SCROLL_CHAIN_PROXY_ADDR = "" L1_SCROLL_MESSENGER_PROXY_ADDR = "" L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 26c53db2..f4b7afdb 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -133,8 +133,6 @@ contract DeployScroll is DeterministicDeployment { address internal L1_WETH_GATEWAY_PROXY_ADDR; address internal L1_WHITELIST_ADDR; address internal L1_ZKEVM_VERIFIER_V2_ADDR; - address internal L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR; - address internal L2_GAS_PRICE_ORACLE_PROXY_ADDR; address internal L1_GAS_TOKEN_ADDR; address internal L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR; address internal L1_GAS_TOKEN_GATEWAY_PROXY_ADDR; @@ -362,7 +360,6 @@ contract DeployScroll is DeterministicDeployment { deployL1ProxyAdmin(); deployL1PlaceHolder(); deployL1Whitelist(); - deployL2GasPriceOracle(); deployL1ScrollChainProxy(); deployL1ScrollMessengerProxy(); deployL1EnforcedTxGateway(); @@ -433,7 +430,6 @@ contract DeployScroll is DeterministicDeployment { // @notice initializeL1Contracts initializes contracts deployed on L1. function initializeL1Contracts() private broadcast(Layer.L1) only(Layer.L1) { initializeScrollChain(); - initializeL2GasPriceOracle(); initializeL1MessageQueue(); initializeL1ScrollMessenger(); initializeEnforcedTxGateway(); @@ -501,25 +497,6 @@ contract DeployScroll is DeterministicDeployment { L1_WHITELIST_ADDR = deploy("L1_WHITELIST", type(Whitelist).creationCode, args); } - function deployL2GasPriceOracle() private { - L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR = deploy( - "L2_GAS_PRICE_ORACLE_IMPLEMENTATION", - type(L2GasPriceOracle).creationCode - ); - - bytes memory args = abi.encode( - notnull(L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR), - notnull(L1_PROXY_ADMIN_ADDR), - new bytes(0) - ); - - L2_GAS_PRICE_ORACLE_PROXY_ADDR = deploy( - "L2_GAS_PRICE_ORACLE_PROXY", - type(TransparentUpgradeableProxy).creationCode, - args - ); - } - function deployL1ScrollChainProxy() private { bytes memory args = abi.encode( notnull(L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR), @@ -1238,34 +1215,29 @@ contract DeployScroll is DeterministicDeployment { } } - function initializeL2GasPriceOracle() private { - if (getInitializeCount(L2_GAS_PRICE_ORACLE_PROXY_ADDR) == 0) { - L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).initialize( - 21000, // _txGas - 53000, // _txGasContractCreation - 4, // _zeroGas - 16 // _nonZeroGas - ); - } - - if (L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).whitelist() != L1_WHITELIST_ADDR) { - L2GasPriceOracle(L2_GAS_PRICE_ORACLE_PROXY_ADDR).updateWhitelist(L1_WHITELIST_ADDR); - } - } - function initializeL1MessageQueue() private { if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) == 0) { L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initialize( notnull(L1_SCROLL_MESSENGER_PROXY_ADDR), notnull(L1_SCROLL_CHAIN_PROXY_ADDR), notnull(L1_ENFORCED_TX_GATEWAY_PROXY_ADDR), - notnull(L2_GAS_PRICE_ORACLE_PROXY_ADDR), + // note: this should be the address of L2GasPriceOracle, + // but since we are using L1MessageQueueWithGasPriceOracle, so we set an all zero address here + address(0), MAX_L1_MESSAGE_GAS_LIMIT ); } - if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) < 2) { - L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); + // note: since we are using L1MessageQueueWithGasPriceOracle, + // and we don't have a L2GasPriceOracle deploy, so we skip the initializeV2. + // instead, we updateWhitelistChecker + // if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) < 2) { + // L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).initializeV2(); + // } + if (L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).whitelistChecker() != L1_WHITELIST_ADDR) { + L1MessageQueueWithGasPriceOracle(L1_MESSAGE_QUEUE_PROXY_ADDR).updateWhitelistChecker( + notnull(L1_WHITELIST_ADDR) + ); } if (getInitializeCount(L1_MESSAGE_QUEUE_PROXY_ADDR) < 3) { @@ -1436,7 +1408,6 @@ contract DeployScroll is DeterministicDeployment { transferOwnership(L1_MESSAGE_QUEUE_PROXY_ADDR, OWNER_ADDR); transferOwnership(L1_SCROLL_MESSENGER_PROXY_ADDR, OWNER_ADDR); transferOwnership(L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR, OWNER_ADDR); - transferOwnership(L2_GAS_PRICE_ORACLE_PROXY_ADDR, OWNER_ADDR); transferOwnership(L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR, OWNER_ADDR); transferOwnership(L1_PROXY_ADMIN_ADDR, OWNER_ADDR); transferOwnership(L1_SCROLL_CHAIN_PROXY_ADDR, OWNER_ADDR); diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index ee9b4526..8ca3104f 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -41,7 +41,7 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(L1_GAS_PRICE_ORACLE_ADDR), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_price_oracle_contract_address"); vm.writeJson(vm.toString(L2_MESSAGE_QUEUE_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.l2_message_queue_address"); vm.writeJson(vm.toString(L1_SCROLL_CHAIN_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.rollup_contract_address"); - vm.writeJson(vm.toString(L2_GAS_PRICE_ORACLE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_price_oracle_contract_address"); + vm.writeJson(vm.toString(L1_MESSAGE_QUEUE_PROXY_ADDR), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_price_oracle_contract_address"); // other vm.writeJson(vm.toString(TEST_ENV_MOCK_FINALIZE_ENABLED), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.enable_test_env_bypass_features"); diff --git a/src/test/deterministic/DeployScroll.t.sol b/src/test/deterministic/DeployScroll.t.sol index df5fb964..676d2f23 100644 --- a/src/test/deterministic/DeployScroll.t.sol +++ b/src/test/deterministic/DeployScroll.t.sol @@ -88,8 +88,6 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0x4Bd916ecac9c5DBd6f15208c8632802Fd2c49e82, L1_PROXY_ADMIN_ADDR); assertEq(0x28b7e53497D08F70476001cc41C719e68425D161, L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR); assertEq(0x602EEf44E8898cC7Cd2e1f54B01E77B4Ca855b8C, L1_WHITELIST_ADDR); - assertEq(0xC8894eF4aA8f141138Be9CF7161aD0A5afFC4a58, L2_GAS_PRICE_ORACLE_IMPLEMENTATION_ADDR); - assertEq(0x13629E678a8Cb5e532270104EcB5648B77ca91fc, L2_GAS_PRICE_ORACLE_PROXY_ADDR); assertEq(0x7C68fab1e8c32A321069866b6F1D4403F05C5f44, L1_SCROLL_CHAIN_PROXY_ADDR); assertEq(0xC97658507021A2EB494298CAA815B83BC3DE935b, L1_SCROLL_MESSENGER_PROXY_ADDR); assertEq(0x02476A470215Bd2F268179492431230C5Dc607C8, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR); From 5b84246bd68ec83fd2769c1d48250b76a4fff190 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Fri, 20 Sep 2024 20:17:10 +0800 Subject: [PATCH 34/48] feat: refactor config files to suit helm chart (#39) --- docker/scripts/gen-configs.sh | 43 +++++++++++++++++++++++------ scripts/deterministic/Constants.sol | 20 +++++++------- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index 00891691..fe08418d 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -17,42 +17,67 @@ gen_config_contracts_toml() { fi } +# format_config_file will add "scrollConfig: |" to the first line and indent the rest +format_config_file() { + local file="$1" + local config_scroll_key="configScroll: |" + temp_file=$(mktemp) + + { + echo $config_scroll_key + while IFS= read -r line; do + echo " $line" + done < "$file" + } > "$temp_file" + + mv "$temp_file" "$file" +} + echo "" echo "generating config-contracts.toml" gen_config_contracts_toml echo "" -echo "generating genesis.json" +echo "generating genesis.yaml" forge script scripts/deterministic/GenerateGenesis.s.sol:GenerateGenesis || exit 1 +format_config_file "./volume/genesis.yaml" echo "" -echo "generating rollup-config.json" +echo "generating rollup-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupConfig || exit 1 +format_config_file "./volume/rollup-config.yaml" echo "" -echo "generating coordinator-config.json" +echo "generating coordinator-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateCoordinatorConfig || exit 1 +format_config_file "./volume/coordinator-config.yaml" echo "" -echo "generating chain-monitor-config.json" +echo "generating chain-monitor-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateChainMonitorConfig || exit 1 +format_config_file "./volume/chain-monitor-config.yaml" echo "" -echo "generating bridge-history-config.json" +echo "generating bridge-history-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBridgeHistoryConfig || exit 1 +format_config_file "./volume/bridge-history-config.yaml" echo "" -echo "generating balance-checker-config.json" +echo "generating balance-checker-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateBalanceCheckerConfig || exit 1 +format_config_file "./volume/balance-checker-config.yaml" echo "" -echo "generating frontend-config" +echo "generating frontend-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateFrontendConfig || exit 1 +format_config_file "./volume/frontend-config.yaml" echo "" -echo "generating rollup-explorer-backend-config.json" +echo "generating rollup-explorer-backend-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateRollupExplorerBackendConfig || exit 1 +format_config_file "./volume/rollup-explorer-backend-config.yaml" echo "" -echo "generating admin-system-backend-config.json" +echo "generating admin-system-backend-config.yaml" forge script scripts/deterministic/GenerateConfigs.s.sol:GenerateAdminSystemBackendConfig || exit 1 +format_config_file "./volume/admin-system-backend-config.yaml" \ No newline at end of file diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 4264f061..27c71ef0 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -28,15 +28,15 @@ string constant CONFIG_PATH = "./volume/config.toml"; // output files string constant CONFIG_CONTRACTS_PATH = "./volume/config-contracts.toml"; string constant GENESIS_ALLOC_JSON_PATH = "./volume/__genesis-alloc.json"; -string constant GENESIS_JSON_PATH = "./volume/genesis.json"; -string constant ROLLUP_CONFIG_PATH = "./volume/rollup-config.json"; -string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.json"; -string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.json"; -string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.json"; -string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.json"; -string constant FRONTEND_ENV_PATH = "./volume/frontend-config"; -string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.json"; -string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./volume/admin-system-backend-config.json"; +string constant GENESIS_JSON_PATH = "./volume/genesis.yaml"; +string constant ROLLUP_CONFIG_PATH = "./volume/rollup-config.yaml"; +string constant COORDINATOR_CONFIG_PATH = "./volume/coordinator-config.yaml"; +string constant CHAIN_MONITOR_CONFIG_PATH = "./volume/chain-monitor-config.yaml"; +string constant BRIDGE_HISTORY_CONFIG_PATH = "./volume/bridge-history-config.yaml"; +string constant BALANCE_CHECKER_CONFIG_PATH = "./volume/balance-checker-config.yaml"; +string constant FRONTEND_ENV_PATH = "./volume/frontend-config.yaml"; +string constant ROLLUP_EXPLORER_BACKEND_CONFIG_PATH = "./volume/rollup-explorer-backend-config.yaml"; +string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./volume/admin-system-backend-config.yaml"; // plonk verifier configs -bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; \ No newline at end of file +bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; From 0414a230a0ffff2e4ff661f8d1aa90566e8b7ab1 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Tue, 24 Sep 2024 17:33:39 +0800 Subject: [PATCH 35/48] fix: config file format (#41) --- docker/scripts/gen-configs.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/scripts/gen-configs.sh b/docker/scripts/gen-configs.sh index fe08418d..fd0e495a 100755 --- a/docker/scripts/gen-configs.sh +++ b/docker/scripts/gen-configs.sh @@ -20,14 +20,14 @@ gen_config_contracts_toml() { # format_config_file will add "scrollConfig: |" to the first line and indent the rest format_config_file() { local file="$1" - local config_scroll_key="configScroll: |" + local config_scroll_key="scrollConfig: |" temp_file=$(mktemp) - + { - echo $config_scroll_key - while IFS= read -r line; do - echo " $line" - done < "$file" + echo $config_scroll_key + while IFS= read -r line; do + echo " $line" + done < <(grep "" "$file") } > "$temp_file" mv "$temp_file" "$file" From 45cdd6895ba09bad54f921930b84c7e077949a5e Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 25 Sep 2024 00:50:56 +0800 Subject: [PATCH 36/48] fix: update rollup config confirmation value (#42) --- docker/templates/rollup-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 23168d52..2579ca15 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -28,7 +28,7 @@ } }, "l2_config": { - "confirmations": "0x0", + "confirmations": "0x10", "endpoint": null, "l2_message_queue_address": null, "relayer_config": { From 6ea11af92b3eb337f88d42c9eae11abef83e2f77 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:11:48 +0800 Subject: [PATCH 37/48] fix: l2 fee vault withdraw when using alt-gas-token (#44) --- package-lock.json | 22878 ++++++++++++++++ scripts/deterministic/DeployScroll.s.sol | 20 +- scripts/deterministic/GenerateGenesis.s.sol | 37 +- src/L2/predeploys/L2TxFeeVault.sol | 23 +- .../L2TxFeeVaultWithGasToken.sol | 55 + src/test/deterministic/DeployScroll.t.sol | 4 +- 6 files changed, 22996 insertions(+), 21 deletions(-) create mode 100644 package-lock.json create mode 100644 src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..0fda8ad5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,22878 @@ +{ + "name": "scroll-contracts", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "scroll-contracts", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@openzeppelin/contracts": "^v4.9.3", + "@openzeppelin/contracts-upgradeable": "^v4.9.3", + "scrollsdk": "^87.0.0" + }, + "devDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.6", + "@nomicfoundation/hardhat-ethers": "^3.0.5", + "@nomicfoundation/hardhat-verify": "^2.0.5", + "@typechain/ethers-v6": "^0.5.1", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "^4.2.21", + "@types/edit-json-file": "^1.7.0", + "@types/mocha": "^9.0.0", + "@types/node": "^20.11.27", + "@typescript-eslint/eslint-plugin": "^7.2.0", + "@typescript-eslint/parser": "^7.2.0", + "chai": "^4.2.0", + "circom": "^0.5.46", + "circomlib": "^0.5.0", + "dotenv": "^10.0.0", + "edit-json-file": "^1.7.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^8.3.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.23.4", + "eslint-plugin-n": "^16.6.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-promise": "^6.1.1", + "ethereum-waffle": "^3.0.0", + "ethers": "^6.11.1", + "hardhat": "^2.22.6", + "hardhat-gas-reporter": "^1.0.4", + "husky": "^8.0.1", + "lint-staged": "^13.0.3", + "lodash": "^4.17.21", + "prettier": "^2.3.2", + "prettier-plugin-solidity": "^1.0.0-beta.13", + "solhint": "^3.3.6", + "solidity-coverage": "^0.8.11", + "squirrelly": "8.0.8", + "toml": "^3.0.0", + "ts-node": "^10.1.0", + "typechain": "^8.3.2", + "typescript": "^5.4.2" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ensdomains/ens": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", + "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "bluebird": "^3.5.2", + "eth-ens-namehash": "^2.0.8", + "solc": "^0.4.20", + "testrpc": "0.0.1", + "web3-utils": "^1.0.0-beta.31" + } + }, + "node_modules/@ensdomains/ens/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ensdomains/ens/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ensdomains/ens/node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "dev": true, + "license": "MPL-2.0", + "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/@ensdomains/ens/node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ensdomains/ens/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/@ensdomains/ens/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true, + "license": "ISC" + }, + "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ensdomains/ens/node_modules/require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true, + "license": "ISC" + }, + "node_modules/@ensdomains/ens/node_modules/solc": { + "version": "0.4.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", + "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" + }, + "bin": { + "solcjs": "solcjs" + } + }, + "node_modules/@ensdomains/ens/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/web3-utils": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.3.tgz", + "integrity": "sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg==", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^4.11.9", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "license": "ISC" + }, + "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ensdomains/ens/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@ensdomains/ens/node_modules/yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + }, + "node_modules/@ensdomains/ens/node_modules/yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0", + "lodash.assign": "^4.0.6" + } + }, + "node_modules/@ensdomains/resolver": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", + "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", + "dev": true + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@ethereum-waffle/chai": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", + "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@ethereum-waffle/chai/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "node_modules/@ethereum-waffle/compiler": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", + "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@resolver-engine/imports": "^0.3.3", + "@resolver-engine/imports-fs": "^0.3.3", + "@typechain/ethers-v5": "^2.0.0", + "@types/mkdirp": "^0.5.2", + "@types/node-fetch": "^2.5.5", + "ethers": "^5.0.1", + "mkdirp": "^0.5.1", + "node-fetch": "^2.6.1", + "solc": "^0.6.3", + "ts-generator": "^0.1.1", + "typechain": "^3.0.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", + "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ethers": "^5.0.2" + }, + "peerDependencies": { + "ethers": "^5.0.0", + "typechain": "^3.0.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/command-line-args": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", + "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^2.0.0", + "find-replace": "^1.0.3", + "typical": "^2.6.1" + }, + "bin": { + "command-line-args": "bin/cli.js" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@ethereum-waffle/compiler/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/find-replace": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", + "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.4", + "test-value": "^2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/find-replace/node_modules/array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/solc": { + "version": "0.6.12", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", + "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-exists": "^1.2.8", + "commander": "3.0.2", + "fs-extra": "^0.30.0", + "js-sha3": "0.8.0", + "memorystream": "^0.3.1", + "require-from-string": "^2.0.0", + "semver": "^5.5.0", + "tmp": "0.0.33" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", + "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", + "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", + "dev": true, + "license": "MIT", + "dependencies": { + "command-line-args": "^4.0.7", + "debug": "^4.1.1", + "fs-extra": "^7.0.0", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "ts-essentials": "^6.0.3", + "ts-generator": "^0.1.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + } + }, + "node_modules/@ethereum-waffle/compiler/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", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@ethereum-waffle/ens": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", + "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ensdomains/ens": "^0.4.4", + "@ensdomains/resolver": "^0.2.4", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@ethereum-waffle/ens/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "node_modules/@ethereum-waffle/mock-contract": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", + "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.5.0", + "ethers": "^5.5.2" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@ethereum-waffle/mock-contract/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "node_modules/@ethereum-waffle/provider": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", + "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereum-waffle/ens": "^3.4.4", + "ethers": "^5.5.2", + "ganache-core": "^2.13.2", + "patch-package": "^6.2.2", + "postinstall-postinstall": "^2.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/@ethereum-waffle/provider/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "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", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "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", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.1.tgz", + "integrity": "sha512-0cqssYh6FXjlwKWBmLm3+zH2BNARoS5u/hxbz+LpQmcDB3w0W553h2btWui1/uZp2GBM/SI3KniTuMcYyHpA5w==", + "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.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/hash": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.0" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz", + "integrity": "sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw==", + "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/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.0", + "@ethersproject/web": "^5.6.0" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz", + "integrity": "sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ==", + "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/abstract-provider": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.0.tgz", + "integrity": "sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ==", + "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/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.0" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.0.tgz", + "integrity": "sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw==", + "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.6.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.0.tgz", + "integrity": "sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ==", + "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.6.0", + "@ethersproject/properties": "^5.6.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.0.tgz", + "integrity": "sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA==", + "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.6.0", + "@ethersproject/logger": "^5.6.0", + "bn.js": "^4.11.9" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", + "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/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.0.tgz", + "integrity": "sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA==", + "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/bignumber": "^5.6.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.0.tgz", + "integrity": "sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw==", + "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/abi": "^5.6.0", + "@ethersproject/abstract-provider": "^5.6.0", + "@ethersproject/abstract-signer": "^5.6.0", + "@ethersproject/address": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/transactions": "^5.6.0" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.0.tgz", + "integrity": "sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA==", + "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/abstract-signer": "^5.6.0", + "@ethersproject/address": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.0" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.0.tgz", + "integrity": "sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw==", + "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/abstract-signer": "^5.6.0", + "@ethersproject/basex": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/sha2": "^5.6.0", + "@ethersproject/signing-key": "^5.6.0", + "@ethersproject/strings": "^5.6.0", + "@ethersproject/transactions": "^5.6.0", + "@ethersproject/wordlists": "^5.6.0" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz", + "integrity": "sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ==", + "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/abstract-signer": "^5.6.0", + "@ethersproject/address": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/hdnode": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/pbkdf2": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.0", + "@ethersproject/strings": "^5.6.0", + "@ethersproject/transactions": "^5.6.0", + "aes-js": "3.0.0", + "scrypt-js": "3.0.1" + } + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.0.tgz", + "integrity": "sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w==", + "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.6.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", + "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", + "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" + }, + "node_modules/@ethersproject/networks": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.2.tgz", + "integrity": "sha512-9uEzaJY7j5wpYGTojGp8U89mSsgQLc40PCMJLMCnFXTs7nhBveZ0t7dbqWUNrepWTszDbFkYD6WlL8DKx5huHA==", + "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/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz", + "integrity": "sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ==", + "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.6.0", + "@ethersproject/sha2": "^5.6.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", + "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", + "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/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.4.tgz", + "integrity": "sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw==", + "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/abstract-provider": "^5.6.0", + "@ethersproject/abstract-signer": "^5.6.0", + "@ethersproject/address": "^5.6.0", + "@ethersproject/basex": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/hash": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/networks": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.0", + "@ethersproject/rlp": "^5.6.0", + "@ethersproject/sha2": "^5.6.0", + "@ethersproject/strings": "^5.6.0", + "@ethersproject/transactions": "^5.6.0", + "@ethersproject/web": "^5.6.0", + "bech32": "1.1.4", + "ws": "7.4.6" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "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_modules/@ethersproject/random": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.0.tgz", + "integrity": "sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw==", + "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.6.0", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.0.tgz", + "integrity": "sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g==", + "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.6.0", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.0.tgz", + "integrity": "sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==", + "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.6.0", + "@ethersproject/logger": "^5.6.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.0.tgz", + "integrity": "sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==", + "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.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.0.tgz", + "integrity": "sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww==", + "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/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/sha2": "^5.6.0", + "@ethersproject/strings": "^5.6.0" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.0.tgz", + "integrity": "sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg==", + "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.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.0.tgz", + "integrity": "sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg==", + "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.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/rlp": "^5.6.0", + "@ethersproject/signing-key": "^5.6.0" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.0.tgz", + "integrity": "sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw==", + "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/bignumber": "^5.6.0", + "@ethersproject/constants": "^5.6.0", + "@ethersproject/logger": "^5.6.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.0.tgz", + "integrity": "sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg==", + "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/abstract-provider": "^5.6.0", + "@ethersproject/abstract-signer": "^5.6.0", + "@ethersproject/address": "^5.6.0", + "@ethersproject/bignumber": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/hash": "^5.6.0", + "@ethersproject/hdnode": "^5.6.0", + "@ethersproject/json-wallets": "^5.6.0", + "@ethersproject/keccak256": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/random": "^5.6.0", + "@ethersproject/signing-key": "^5.6.0", + "@ethersproject/transactions": "^5.6.0", + "@ethersproject/wordlists": "^5.6.0" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.0.tgz", + "integrity": "sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg==", + "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/base64": "^5.6.0", + "@ethersproject/bytes": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.0" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.0.tgz", + "integrity": "sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q==", + "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.6.0", + "@ethersproject/hash": "^5.6.0", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/properties": "^5.6.0", + "@ethersproject/strings": "^5.6.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/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@iden3/bigarray": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz", + "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==", + "dev": true, + "license": "GPL-3.0" + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz", + "integrity": "sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "^0.6.8", + "ethereumjs-util": "^6.2.1", + "ethjs-util": "^0.1.6", + "tweetnacl": "^1.0.3", + "tweetnacl-util": "^0.15.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", + "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", + "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", + "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", + "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", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.4.1.tgz", + "integrity": "sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.4.1", + "@nomicfoundation/edr-darwin-x64": "0.4.1", + "@nomicfoundation/edr-linux-arm64-gnu": "0.4.1", + "@nomicfoundation/edr-linux-arm64-musl": "0.4.1", + "@nomicfoundation/edr-linux-x64-gnu": "0.4.1", + "@nomicfoundation/edr-linux-x64-musl": "0.4.1", + "@nomicfoundation/edr-win32-x64-msvc": "0.4.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.1.tgz", + "integrity": "sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.1.tgz", + "integrity": "sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.1.tgz", + "integrity": "sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.1.tgz", + "integrity": "sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.1.tgz", + "integrity": "sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.1.tgz", + "integrity": "sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.1.tgz", + "integrity": "sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true, + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz", + "integrity": "sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ==", + "dev": true, + "license": "MIT", + "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.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers/node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", + "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz", + "integrity": "sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@ethersproject/address": "^5.0.2", + "cbor": "^8.1.0", + "chalk": "^2.4.2", + "debug": "^4.1.1", + "lodash.clonedeep": "^4.5.0", + "semver": "^6.3.0", + "table": "^6.8.0", + "undici": "^5.14.0" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + }, + "optionalDependencies": { + "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", + "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", + "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", + "license": "MIT" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", + "license": "MIT" + }, + "node_modules/@resolver-engine/core": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", + "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", + "dev": true, + "license": "LGPL-3.0-or-later", + "dependencies": { + "debug": "^3.1.0", + "is-url": "^1.2.4", + "request": "^2.85.0" + } + }, + "node_modules/@resolver-engine/core/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/fs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", + "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", + "dev": true, + "license": "LGPL-3.0-or-later", + "dependencies": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0" + } + }, + "node_modules/@resolver-engine/fs/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/imports": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", + "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", + "dev": true, + "license": "LGPL-3.0-or-later", + "dependencies": { + "@resolver-engine/core": "^0.3.3", + "debug": "^3.1.0", + "hosted-git-info": "^2.6.0", + "path-browserify": "^1.0.0", + "url": "^0.11.0" + } + }, + "node_modules/@resolver-engine/imports-fs": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", + "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", + "dev": true, + "license": "LGPL-3.0-or-later", + "dependencies": { + "@resolver-engine/fs": "^0.3.3", + "@resolver-engine/imports": "^0.3.3", + "debug": "^3.1.0" + } + }, + "node_modules/@resolver-engine/imports-fs/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@resolver-engine/imports/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@scure/base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", + "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT" + }, + "node_modules/@scure/bip32": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.0.1.tgz", + "integrity": "sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.0.0", + "@noble/secp256k1": "~1.5.2", + "@scure/base": "~1.0.0" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@scure/bip39": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.0.0.tgz", + "integrity": "sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.0.0", + "@scure/base": "~1.0.0" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", + "dev": true, + "license": "MIT" + }, + "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/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/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/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/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/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/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.1.tgz", + "integrity": "sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true, + "license": "MIT" + }, + "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", + "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", + "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", + "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/@typechain/hardhat/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@typechain/hardhat/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/bn.js/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", + "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "dev": true, + "license": "MIT" + }, + "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", + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/chai-as-promised/node_modules/@types/chai": { + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.12.tgz", + "integrity": "sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==", + "dev": true, + "license": "MIT" + }, + "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", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/concat-stream/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/edit-json-file": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@types/edit-json-file/-/edit-json-file-1.7.0.tgz", + "integrity": "sha512-yZrbGD4Qp92s6xU80MWBdz9vJE8k8EbO+gLWYb4W1UL9WYVUMOtUr5zvKlKgbcc2veYmFLO9dPnYA9Mxul0lOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/set-value": "*" + } + }, + "node_modules/@types/edit-json-file/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "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", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mkdirp": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", + "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mkdirp/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", + "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/node-fetch/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", + "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pbkdf2/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", + "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/resolve/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/set-value": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/set-value/-/set-value-4.0.1.tgz", + "integrity": "sha512-mP/CLy6pdrhsDVrz1+Yp5Ly6Tcel2IAEejhyI5NxY6WnBUdWN+AAfGa0HHsdgCdsPWWcd/4D5J2X2TrRYcYRag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", + "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/type-utils": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^7.0.0", + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", + "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", + "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", + "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/utils": "7.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", + "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", + "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/utils": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", + "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", + "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "7.2.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true, + "license": "ISC" + }, + "node_modules/abstract-leveldown": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", + "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "license": "MIT", + "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": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", + "dev": true, + "license": "MIT" + }, + "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": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.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": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "optional": 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.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "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-escapes/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" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/antlr4": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.7.1.tgz", + "integrity": "sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ==", + "dev": true, + "license": "BSD" + }, + "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" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "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" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-back": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", + "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", + "dev": true, + "license": "MIT", + "dependencies": { + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "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": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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", + "engines": { + "node": "*" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-parents": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", + "integrity": "sha1-UI/Q8F0MSHddnszaLhdEIyYejdM=", + "dev": true, + "license": "MIT" + }, + "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", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.4.0" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "license": "MIT" + }, + "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", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/b4a": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.1.tgz", + "integrity": "sha512-AsKjNhz72yxteo/0EtQEiwkMUgk/tGmycXlbG4g3Ard2/ULtNLUykGOkeK0egmN27h0xMAhb76jYccW+XTBExA==", + "dev": true, + "license": "ISC" + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + } + }, + "node_modules/babel-core/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-core/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/babel-core/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-core/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + } + }, + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/babel-register/node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-core": "^6.0.14", + "object-assign": "^4.0.0" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "license": "MIT", + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/backoff": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", + "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", + "dev": true, + "license": "MIT", + "dependencies": { + "precond": "0.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "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" + }, + "node_modules/big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bignumber.js": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", + "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip39": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", + "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", + "dev": true, + "license": "ISC", + "dependencies": { + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" + } + }, + "node_modules/blake-hash": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blake-hash/-/blake-hash-1.1.1.tgz", + "integrity": "sha512-V93H+FEJuXXZi1eEsMtbcBFP9oL5Ept7SLw3cbXYlPC3nocm9Fr4m18ZhbhdJrZVS9J/Z0oNE4L3oDZvmorHNA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.2.1", + "inherits": "^2.0.3", + "nan": "^2.2.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/blake2b": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", + "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", + "dev": true, + "license": "ISC", + "dependencies": { + "blake2b-wasm": "^2.4.0", + "nanoassert": "^2.0.0" + } + }, + "node_modules/blake2b-wasm": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", + "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.0.1", + "nanoassert": "^2.0.0" + } + }, + "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" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/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", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "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/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/boxen/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/boxen/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/boxen/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/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "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", + "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/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/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": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", + "dev": true, + "license": "MIT", + "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", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true, + "license": "MIT" + }, + "node_modules/bufferutil": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", + "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/builtins/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/builtins/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "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/bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=", + "dev": true, + "license": "MIT", + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=", + "dev": true, + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cachedown/-/cachedown-1.0.0.tgz", + "integrity": "sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "^2.4.1", + "lru-cache": "^3.2.0" + } + }, + "node_modules/cachedown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/cachedown/node_modules/lru-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", + "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001332", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "license": "Apache-2.0" + }, + "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", + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" + } + }, + "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", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/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", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/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", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/chalk/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", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/checkpoint-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", + "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", + "dev": true, + "license": "ISC", + "dependencies": { + "functional-red-black-tree": "^1.0.1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "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/cids": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", + "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "class-is": "^1.1.0", + "multibase": "~0.6.0", + "multicodec": "^1.0.0", + "multihashes": "~0.4.15" + }, + "engines": { + "node": ">=4.0.0", + "npm": ">=3.0.0" + } + }, + "node_modules/cids/node_modules/multibase": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", + "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/cids/node_modules/multicodec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", + "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.6.0", + "varint": "^5.0.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circom": { + "version": "0.5.46", + "resolved": "https://registry.npmjs.org/circom/-/circom-0.5.46.tgz", + "integrity": "sha512-clvfqJudyBlHAubTu4dKY04dVgst8OxGS7SAxdbXKbGO2c6XGOzP2TSygNUmYHanLDvUgJpOqQYe/AkLt9x/1g==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "chai": "^4.2.0", + "circom_runtime": "0.1.12", + "fastfile": "0.0.18", + "ffiasm": "0.1.1", + "ffjavascript": "0.2.22", + "ffwasm": "0.0.7", + "fnv-plus": "^1.3.1", + "r1csfile": "0.0.16", + "tmp-promise": "^2.0.2", + "wasmbuilder": "0.0.10" + }, + "bin": { + "circom": "cli.js" + } + }, + "node_modules/circom_runtime": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.12.tgz", + "integrity": "sha512-R+QT9HS9w71cmGmWIn+PSyD3aHyR5JZBiVvxOjCfn12wwnpuFwBjdMG7he+v8h/oQD1mDRAu2KrBeL4mAt5s4A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ffjavascript": "0.2.34", + "fnv-plus": "^1.3.1" + }, + "bin": { + "calcwit": "calcwit.js" + } + }, + "node_modules/circom_runtime/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/circom_runtime/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/circom_runtime/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/circom_runtime/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", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/circom_runtime/node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/circom_runtime/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/circom_runtime/node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/circom_runtime/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/circom_runtime/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/circom_runtime/node_modules/ffjavascript": { + "version": "0.2.34", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.34.tgz", + "integrity": "sha512-fq/qfJluC4spiOD1lp5jfckZVnS0o0kI5eKXVLw7UKwIwbNr+NBMBveBVcidSfMizF87T6wb7NBtLSdckQiAnQ==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "mocha": "^8.2.1", + "wasmcurves": "0.0.14", + "worker-threads": "^1.0.0" + } + }, + "node_modules/circom_runtime/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "license": "ISC", + "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/circom_runtime/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/circom_runtime/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/circom_runtime/node_modules/js-yaml": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", + "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/circom_runtime/node_modules/log-symbols": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/circom_runtime/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/circom_runtime/node_modules/mocha": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", + "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.1", + "debug": "4.3.1", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "4.0.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.3", + "nanoid": "3.1.20", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.1.0", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 10.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/circom_runtime/node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/circom_runtime/node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/circom_runtime/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": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/circom_runtime/node_modules/workerpool": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", + "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/circom_runtime/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/circom_runtime/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/circom_runtime/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/circom_runtime/node_modules/yargs/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==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/circomlib": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/circomlib/-/circomlib-0.5.5.tgz", + "integrity": "sha512-5FUw6AnEw+65suAgEQCucVepxOm96wnIo89vBldeX1DjeSV8zpP88Tje3BLBTLz0C1U6SkRnwqULrtiA5IVtZQ==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "blake-hash": "^1.1.0", + "blake2b": "^2.1.3", + "circom": "0.5.33", + "ffjavascript": "0.2.38", + "web3-utils": "^1.3.0" + } + }, + "node_modules/circomlib/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/circomlib/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/circomlib/node_modules/circom": { + "version": "0.5.33", + "resolved": "https://registry.npmjs.org/circom/-/circom-0.5.33.tgz", + "integrity": "sha512-UdL8fr6GckhQ4VoWjIvuYwCHneJe8z/AyJpDxgKLyuaX51ijd4gBP6jlwHDbQJsha2aU2GR9qgDsxd0jfari1Q==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "chai": "^4.2.0", + "circom_runtime": "0.1.8", + "fastfile": "0.0.18", + "ffiasm": "0.1.1", + "ffjavascript": "0.2.22", + "ffwasm": "0.0.7", + "fnv-plus": "^1.3.1", + "r1csfile": "0.0.16", + "tmp-promise": "^2.0.2", + "wasmbuilder": "0.0.10" + }, + "bin": { + "circom": "cli.js" + } + }, + "node_modules/circomlib/node_modules/circom_runtime": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.8.tgz", + "integrity": "sha512-5ZmzCyidkNPb1zZsJGRXTuWcJ6kW6+gRBtHgf2tFqTh5dUyWVVPH0Zg7AsU2ijPr1AmYZUlme0yORUZK5HrjOA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ffjavascript": "0.2.10", + "fnv-plus": "^1.3.1" + }, + "bin": { + "calcwit": "calcwit.js" + } + }, + "node_modules/circomlib/node_modules/circom_runtime/node_modules/ffjavascript": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.10.tgz", + "integrity": "sha512-GQI6gHYYG5/iD4Kt3VzezzK7fARJzP0zkc82V/+JAdjfeKBXhDSo5rpKFuK3cDcrdW0Fu2emuYNMEAuFqhEQvQ==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "wasmcurves": "0.0.5", + "worker-threads": "^1.0.0" + } + }, + "node_modules/circomlib/node_modules/circom_runtime/node_modules/wasmcurves": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.5.tgz", + "integrity": "sha512-BmI4GXLjLawGg2YkvHa8zRsnWec+d1uwoxE+Iov8cqOpDL7GA5XO2pk2yuDbXHMzwIug2exnKot3baRZ86R0pA==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.42", + "blakejs": "^1.1.0" + } + }, + "node_modules/circomlib/node_modules/circom/node_modules/ffjavascript": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.22.tgz", + "integrity": "sha512-EsVqap2Txm17bKW0z/jXCX3M7rQ++nQUAJY8alWDpyhjRj90xjl6GLeVSKZQ8rOFDQ/SFFXcEB8w9X8Boxid+w==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "wasmcurves": "0.0.12", + "worker-threads": "^1.0.0" + } + }, + "node_modules/circomlib/node_modules/circom/node_modules/wasmcurves": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.12.tgz", + "integrity": "sha512-1Jl9mkatyHSNj80ILjf85SZUNuZQBCkTjJlhzqHnZQXUmIimCIWkugaVaYNjozLs1Gun4h/keZe1MBeBN0sRpg==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.42", + "blakejs": "^1.1.0" + } + }, + "node_modules/circomlib/node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "dev": true, + "license": "MPL-2.0", + "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/circomlib/node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT" + }, + "node_modules/circomlib/node_modules/ffjavascript": { + "version": "0.2.38", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.38.tgz", + "integrity": "sha512-b4dobcci6QxxUvNYFCHw2ONhXwtgSHCzqxbH6c7ipWMOzyoG+MPRMZgAqnUREYX8UC6zqA7AiRmiIB76nxt2TQ==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "wasmcurves": "0.0.14", + "web-worker": "^1.0.0" + } + }, + "node_modules/circomlib/node_modules/web3-utils": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.3.tgz", + "integrity": "sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg==", + "dev": true, + "license": "LGPL-3.0", + "dependencies": { + "bn.js": "^4.11.9", + "ethereum-bloom-filters": "^1.0.6", + "ethereumjs-util": "^7.1.0", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/class-is": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", + "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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", + "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", + "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", + "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": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-truncate": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", + "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/ansi-styles": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", + "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/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" + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/cli-truncate/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", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/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", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui/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", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.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/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "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", + "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", + "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", + "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-args/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", + "engines": { + "node": ">=6" + } + }, + "node_modules/command-line-args/node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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", + "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/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", + "engines": { + "node": ">=8" + } + }, + "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", + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz", + "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "license": "MIT" + }, + "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", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-hash": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", + "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "cids": "^0.7.1", + "multicodec": "^0.5.5", + "multihashes": "^0.4.15" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/convert-source-map/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" + }, + "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/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/cookiejar": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", + "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-js-pure": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.0.tgz", + "integrity": "sha512-ylOC9nVy0ak1N+fPIZj00umoZHgUVqmucklP5RT5N+vJof38klKn8Ze6KGyvchdClvEBr6LcQqJpI216LUMqYA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "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", + "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", + "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" + }, + "node_modules/cross-fetch": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", + "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.7", + "whatwg-fetch": "^2.0.4" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg=", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "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" + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/deferred-leveldown": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", + "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~5.0.0", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true, + "license": "MIT" + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "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, + "dependencies": { + "heap": ">= 0.2.0" + } + }, + "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", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", + "dev": true + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.4" + }, + "bin": { + "ignored": "bin/ignored" + } + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "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" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/edit-json-file": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/edit-json-file/-/edit-json-file-1.7.0.tgz", + "integrity": "sha512-eIkLJ9i4ija7b2TbaLHy3scyjWFLzwM2Wa6kHbV4ppVLcCqn7FzqnO1vmCG3dLrkd+teWE3mvACfv166mO0VZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-value": "^1.0.12", + "iterate-object": "^1.3.4", + "r-json": "^1.2.10", + "set-value": "^4.1.0", + "w-json": "^1.3.10" + } + }, + "node_modules/edit-json-file/node_modules/set-value": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", + "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/jonschlinkert", + "https://paypal.me/jonathanschlinkert", + "https://jonschlinkert.dev/sponsor" + ], + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "is-primitive": "^3.0.1" + }, + "engines": { + "node": ">=11.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.111", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.111.tgz", + "integrity": "sha512-/s3+fwhKf1YK4k7btOImOzCQLpUjS6MaPf0ODTNuT4eTM1Bg4itBpLkydhOzJmpmH6Z9eXFyuuK5czsmzRzwtw==", + "dev": true, + "license": "ISC" + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "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/emoji-regex": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.1.0.tgz", + "integrity": "sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding-down": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", + "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "^5.0.0", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.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/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-abstract/node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.60", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.60.tgz", + "integrity": "sha512-jpKNXIt60htYG59/9FGf2PYT3pwMpnEbNKysU+k/4FGwyGtMotOvcZOuW+EmXXYASRqYSXQfGL5cVIthOTgbkg==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true, + "license": "MIT", + "optional": true + }, + "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "license": "BSD-2-Clause", + "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/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-config-standard": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", + "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", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es-x": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", + "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.1.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=8" + } + }, + "node_modules/eslint-plugin-es/node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-n": { + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "builtins": "^5.0.1", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", + "minimatch": "^3.1.2", + "resolve": "^1.22.2", + "semver": "^7.5.3" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-n/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-n/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-n/node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-n/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", + "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-promise": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", + "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/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/eslint/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/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/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/eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/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", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/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": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.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", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eth-block-tracker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz", + "integrity": "sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug==", + "dev": true, + "license": "MIT", + "dependencies": { + "eth-query": "^2.1.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.3", + "ethjs-util": "^0.1.3", + "json-rpc-engine": "^3.6.0", + "pify": "^2.3.0", + "tape": "^4.6.3" + } + }, + "node_modules/eth-ens-namehash": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", + "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", + "dev": true, + "license": "ISC", + "dependencies": { + "idna-uts46-hx": "^2.3.1", + "js-sha3": "^0.5.7" + } + }, + "node_modules/eth-ens-namehash/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.25", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", + "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.0.0-beta.146", + "@solidity-parser/parser": "^0.14.0", + "cli-table3": "^0.5.0", + "colors": "1.4.0", + "ethereum-cryptography": "^1.0.3", + "ethers": "^4.0.40", + "fs-readdir-recursive": "^1.1.0", + "lodash": "^4.17.14", + "markdown-table": "^1.1.3", + "mocha": "^7.1.1", + "req-cwd": "^2.0.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "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.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/debug/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/eth-gas-reporter/node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/eth-gas-reporter/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==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz", + "integrity": "sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.0.0", + "@noble/secp256k1": "1.5.5", + "@scure/bip32": "1.0.1", + "@scure/bip39": "1.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "4.0.49", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", + "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "aes-js": "3.0.0", + "bn.js": "^4.11.9", + "elliptic": "6.5.4", + "hash.js": "1.1.3", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.4", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "license": "ISC", + "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": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "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", + "engines": { + "node": ">=4" + } + }, + "node_modules/eth-gas-reporter/node_modules/js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eth-gas-reporter/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eth-gas-reporter/node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/eth-gas-reporter/node_modules/mocha": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", + "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "chokidar": "3.3.0", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "3.0.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.5", + "ms": "2.1.1", + "node-environment-flags": "1.0.6", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/eth-gas-reporter/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eth-gas-reporter/node_modules/scrypt-js": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", + "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-gas-reporter/node_modules/uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", + "dev": true + }, + "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eth-json-rpc-infura": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz", + "integrity": "sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-fetch": "^2.1.1", + "eth-json-rpc-middleware": "^1.5.0", + "json-rpc-engine": "^3.4.0", + "json-rpc-error": "^2.0.0" + } + }, + "node_modules/eth-json-rpc-middleware": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", + "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "async": "^2.5.0", + "eth-query": "^2.1.2", + "eth-tx-summary": "^3.1.2", + "ethereumjs-block": "^1.6.0", + "ethereumjs-tx": "^1.3.3", + "ethereumjs-util": "^5.1.2", + "ethereumjs-vm": "^2.1.0", + "fetch-ponyfill": "^4.0.0", + "json-rpc-engine": "^3.6.0", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "tape": "^4.6.3" + } + }, + "node_modules/eth-json-rpc-middleware/node_modules/ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/eth-lib": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", + "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/eth-query": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", + "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", + "dev": true, + "license": "ISC", + "dependencies": { + "json-rpc-random-id": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "node_modules/eth-sig-util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.0.tgz", + "integrity": "sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "buffer": "^5.2.1", + "elliptic": "^6.4.0", + "ethereumjs-abi": "0.6.5", + "ethereumjs-util": "^5.1.1", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0" + } + }, + "node_modules/eth-sig-util/node_modules/ethereumjs-abi": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", + "integrity": "sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE=", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.10.0", + "ethereumjs-util": "^4.3.0" + } + }, + "node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", + "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.8.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.0.0" + } + }, + "node_modules/eth-sig-util/node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/eth-tx-summary": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz", + "integrity": "sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==", + "dev": true, + "license": "ISC", + "dependencies": { + "async": "^2.1.2", + "clone": "^2.0.0", + "concat-stream": "^1.5.1", + "end-of-stream": "^1.1.0", + "eth-query": "^2.0.2", + "ethereumjs-block": "^1.4.1", + "ethereumjs-tx": "^1.1.1", + "ethereumjs-util": "^5.0.1", + "ethereumjs-vm": "^2.6.0", + "through2": "^2.0.3" + } + }, + "node_modules/eth-tx-summary/node_modules/ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", + "dev": true, + "license": "MIT" + }, + "node_modules/eth-tx-summary/node_modules/ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethashjs": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ethashjs/-/ethashjs-0.0.8.tgz", + "integrity": "sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.1.2", + "buffer-xor": "^2.0.1", + "ethereumjs-util": "^7.0.2", + "miller-rabin": "^4.0.0" + } + }, + "node_modules/ethashjs/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethashjs/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethashjs/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethashjs/node_modules/buffer-xor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", + "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethashjs/node_modules/ethereumjs-util": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", + "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", + "dev": true, + "license": "MPL-2.0", + "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/ethereum-bloom-filters": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", + "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-sha3": "^0.8.0" + } + }, + "node_modules/ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=", + "dev": true, + "license": "MIT" + }, + "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", + "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/ethereum-waffle": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", + "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethereum-waffle/chai": "^3.4.4", + "@ethereum-waffle/compiler": "^3.4.4", + "@ethereum-waffle/mock-contract": "^3.4.4", + "@ethereum-waffle/provider": "^3.4.4", + "ethers": "^5.0.1" + }, + "bin": { + "waffle": "bin/waffle" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/ethereum-waffle/node_modules/ethers": { + "version": "5.6.4", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", + "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", + "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/abi": "5.6.1", + "@ethersproject/abstract-provider": "5.6.0", + "@ethersproject/abstract-signer": "5.6.0", + "@ethersproject/address": "5.6.0", + "@ethersproject/base64": "5.6.0", + "@ethersproject/basex": "5.6.0", + "@ethersproject/bignumber": "5.6.0", + "@ethersproject/bytes": "5.6.1", + "@ethersproject/constants": "5.6.0", + "@ethersproject/contracts": "5.6.0", + "@ethersproject/hash": "5.6.0", + "@ethersproject/hdnode": "5.6.0", + "@ethersproject/json-wallets": "5.6.0", + "@ethersproject/keccak256": "5.6.0", + "@ethersproject/logger": "5.6.0", + "@ethersproject/networks": "5.6.2", + "@ethersproject/pbkdf2": "5.6.0", + "@ethersproject/properties": "5.6.0", + "@ethersproject/providers": "5.6.4", + "@ethersproject/random": "5.6.0", + "@ethersproject/rlp": "5.6.0", + "@ethersproject/sha2": "5.6.0", + "@ethersproject/signing-key": "5.6.0", + "@ethersproject/solidity": "5.6.0", + "@ethersproject/strings": "5.6.0", + "@ethersproject/transactions": "5.6.0", + "@ethersproject/units": "5.6.0", + "@ethersproject/wallet": "5.6.0", + "@ethersproject/web": "5.6.0", + "@ethersproject/wordlists": "5.6.0" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-account": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz", + "integrity": "sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-util": "^6.0.0", + "rlp": "^2.2.1", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-block": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", + "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.1", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/ethereumjs-block/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-block/node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-blockchain": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz", + "integrity": "sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.6.1", + "ethashjs": "~0.0.7", + "ethereumjs-block": "~2.2.2", + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.1.0", + "flow-stoplight": "^1.0.0", + "level-mem": "^3.0.1", + "lru-cache": "^5.1.1", + "rlp": "^2.2.2", + "semaphore": "^1.1.0" + } + }, + "node_modules/ethereumjs-blockchain/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethereumjs-tx": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", + "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereum-common": "^0.0.18", + "ethereumjs-util": "^5.0.0" + } + }, + "node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", + "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "ethereumjs-account": "^2.0.3", + "ethereumjs-block": "~2.2.0", + "ethereumjs-common": "^1.1.0", + "ethereumjs-util": "^6.0.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-util": "^5.0.0", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-account/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-wallet": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz", + "integrity": "sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "aes-js": "^3.1.1", + "bs58check": "^2.1.2", + "ethereum-cryptography": "^0.1.3", + "ethereumjs-util": "^6.0.0", + "randombytes": "^2.0.6", + "safe-buffer": "^5.1.2", + "scryptsy": "^1.2.1", + "utf8": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "node_modules/ethereumjs-wallet/node_modules/aes-js": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", + "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/ethereumjs-wallet/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "optional": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethers": { + "version": "6.11.1", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", + "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "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", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "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", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/ethers/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" + }, + "node_modules/ethers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "dev": true, + "license": "MIT", + "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": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true, + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "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", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/execa/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/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", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/execa/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": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/express": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", + "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.19.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.7", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/express/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", + "dev": true, + "license": "ISC", + "dependencies": { + "checkpoint-store": "^1.1.0" + } + }, + "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" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "license": "MIT", + "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.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "license": "MIT" + }, + "node_modules/fastfile": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/fastfile/-/fastfile-0.0.18.tgz", + "integrity": "sha512-q03PTKc+wptis4WmuFOwPNQx2p5myFUrl/dMgRlW9mymc1Egyc14JPHgiGnWK+sJ0+dBl2Vwtfh5GfSQltYOpw==", + "dev": true, + "license": "GPL-3.0" + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fetch-ponyfill": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", + "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "~1.7.1" + } + }, + "node_modules/fetch-ponyfill/node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/ffiasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ffiasm/-/ffiasm-0.1.1.tgz", + "integrity": "sha512-irMMHiR9JJ7BVBrAhtliUawxVdPYSdyl81taUYJ4C1mJ0iw2ueThE/qtr0J8B83tsIY8HJvh0lg5F+6ClK4xpA==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "ejs": "^3.0.1", + "yargs": "^15.3.1" + }, + "bin": { + "buildzqfield": "src/buildzqfield.js" + } + }, + "node_modules/ffiasm/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/ffiasm/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ffiasm/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ffjavascript": { + "version": "0.2.22", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.22.tgz", + "integrity": "sha512-EsVqap2Txm17bKW0z/jXCX3M7rQ++nQUAJY8alWDpyhjRj90xjl6GLeVSKZQ8rOFDQ/SFFXcEB8w9X8Boxid+w==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "wasmcurves": "0.0.12", + "worker-threads": "^1.0.0" + } + }, + "node_modules/ffjavascript/node_modules/wasmcurves": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.12.tgz", + "integrity": "sha512-1Jl9mkatyHSNj80ILjf85SZUNuZQBCkTjJlhzqHnZQXUmIimCIWkugaVaYNjozLs1Gun4h/keZe1MBeBN0sRpg==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.42", + "blakejs": "^1.1.0" + } + }, + "node_modules/ffwasm": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ffwasm/-/ffwasm-0.0.7.tgz", + "integrity": "sha512-17cTLzv7HHAKqZbX8MvHxjSrR0yDdn1sh4TVsTbAvO9e6klhFicnyoVXc/sCuViV/M8g65sCmVrAmoPCZp1YkQ==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48", + "wasmbuilder": "0.0.10" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT", + "optional": true + }, + "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", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-replace/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", + "engines": { + "node": ">=6" + } + }, + "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/find-up/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/find-value": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/find-value/-/find-value-1.0.12.tgz", + "integrity": "sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "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/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true, + "license": "ISC" + }, + "node_modules/flow-stoplight": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flow-stoplight/-/flow-stoplight-1.0.0.tgz", + "integrity": "sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s=", + "dev": true, + "license": "ISC" + }, + "node_modules/fnv-plus": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", + "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==", + "dev": true, + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "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.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.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/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "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", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "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" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": 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.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", + "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ganache-core": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", + "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", + "bundleDependencies": [ + "keccak" + ], + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "3.0.0", + "async": "2.6.2", + "bip39": "2.5.0", + "cachedown": "1.0.0", + "clone": "2.1.2", + "debug": "3.2.6", + "encoding-down": "5.0.4", + "eth-sig-util": "3.0.0", + "ethereumjs-abi": "0.6.8", + "ethereumjs-account": "3.0.0", + "ethereumjs-block": "2.2.2", + "ethereumjs-common": "1.5.0", + "ethereumjs-tx": "2.1.2", + "ethereumjs-util": "6.2.1", + "ethereumjs-vm": "4.2.0", + "heap": "0.2.6", + "keccak": "3.0.1", + "level-sublevel": "6.6.4", + "levelup": "3.1.1", + "lodash": "4.17.20", + "lru-cache": "5.1.1", + "merkle-patricia-tree": "3.0.0", + "patch-package": "6.2.2", + "seedrandom": "3.0.1", + "source-map-support": "0.5.12", + "tmp": "0.1.0", + "web3-provider-engine": "14.2.1", + "websocket": "1.0.32" + }, + "engines": { + "node": ">=8.9.0" + }, + "optionalDependencies": { + "ethereumjs-wallet": "0.6.5", + "web3": "1.2.11" + } + }, + "node_modules/ganache-core/node_modules/abstract-leveldown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", + "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ganache-core/node_modules/async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.11" + } + }, + "node_modules/ganache-core/node_modules/async/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/braces/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/ganache-core/node_modules/deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-common": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz", + "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-tx/node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz", + "integrity": "sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.1.2", + "async-eventemitter": "^0.2.2", + "core-js-pure": "^3.0.1", + "ethereumjs-account": "^3.0.0", + "ethereumjs-block": "^2.2.2", + "ethereumjs-blockchain": "^4.0.3", + "ethereumjs-common": "^1.5.0", + "ethereumjs-tx": "^2.1.2", + "ethereumjs-util": "^6.2.0", + "fake-merkle-patricia-tree": "^1.0.1", + "functional-red-black-tree": "^1.0.1", + "merkle-patricia-tree": "^2.3.2", + "rustbn.js": "~0.2.0", + "safe-buffer": "^5.1.1", + "util.promisify": "^1.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "license": "MIT", + "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/ganache-core/node_modules/ethereumjs-vm/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/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", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/ganache-core/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/fill-range/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/ganache-core/node_modules/heap": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", + "dev": true + }, + "node_modules/ganache-core/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/keccak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", + "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", + "dev": true, + "hasInstallScript": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ganache-core/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/level-errors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", + "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/level-ws": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-1.0.0.tgz", + "integrity": "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.2.8", + "xtend": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/level-ws/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "license": "MIT", + "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/ganache-core/node_modules/level-ws/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" + }, + "node_modules/ganache-core/node_modules/level-ws/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", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/ganache-core/node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz", + "integrity": "sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.6.1", + "ethereumjs-util": "^5.2.0", + "level-mem": "^3.0.1", + "level-ws": "^1.0.0", + "readable-stream": "^3.0.6", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", + "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "^0.1.3", + "rlp": "^2.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/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==", + "dev": true, + "inBundle": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/node-gyp-build": { + "version": "4.2.3", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/ganache-core/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true, + "license": "MIT" + }, + "node_modules/ganache-core/node_modules/patch-package": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", + "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/ganache-core/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ganache-core/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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ganache-core/node_modules/source-map-support": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", + "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/ganache-core/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": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/ganache-core/node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ganache-core/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "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": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", + "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "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", + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "license": "ISC", + "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/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.x" + } + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hardhat": { + "version": "2.22.6", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.6.tgz", + "integrity": "sha512-abFEnd9QACwEtSvZZGSmzvw7N3zhQN1cDKz5SLHAupfG24qTHofCjqvD5kT5Wwsq5XOL0ON1Mq5rr4v0XX5ciw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.4.1", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@nomicfoundation/solidity-analyzer": "^0.1.0", + "@sentry/node": "^5.18.1", + "@types/bn.js": "^5.1.0", + "@types/lru-cache": "^5.1.0", + "adm-zip": "^0.4.16", + "aggregate-error": "^3.0.0", + "ansi-escapes": "^4.3.0", + "boxen": "^5.1.2", + "chalk": "^2.4.2", + "chokidar": "^3.4.0", + "ci-info": "^2.0.0", + "debug": "^4.1.1", + "enquirer": "^2.3.0", + "env-paths": "^2.2.0", + "ethereum-cryptography": "^1.0.3", + "ethereumjs-abi": "^0.6.8", + "find-up": "^2.1.0", + "fp-ts": "1.19.3", + "fs-extra": "^7.0.1", + "glob": "7.2.0", + "immutable": "^4.0.0-rc.12", + "io-ts": "1.10.4", + "keccak": "^3.0.2", + "lodash": "^4.17.11", + "mnemonist": "^0.38.0", + "mocha": "^10.0.0", + "p-map": "^4.0.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", + "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": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz", + "integrity": "sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.24", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", + "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hardhat/node_modules/@types/bn.js": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", + "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/hardhat/node_modules/@types/node": { + "version": "17.0.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", + "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz", + "integrity": "sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.0.0", + "@noble/secp256k1": "1.5.5", + "@scure/bip32": "1.0.1", + "@scure/bip39": "1.0.0" + } + }, + "node_modules/hardhat/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/hardhat/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hardhat/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_modules/hardhat/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/hardhat/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": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/hardhat/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/hardhat/node_modules/ws": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", + "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", + "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_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/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": "MIT", + "dependencies": { + "safe-buffer": "~5.2.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hasown/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", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "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==", + "dev": true, + "license": "MIT", + "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_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", + "dev": true, + "license": "ISC", + "optional": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/husky": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", + "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/idna-uts46-hx": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", + "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "2.1.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/idna-uts46-hx/node_modules/punycode": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", + "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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" + }, + "node_modules/inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/inquirer/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", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/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", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/io-ts/node_modules/fp-ts": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz", + "integrity": "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", + "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.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": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "engines": { + "node": ">=8" + } + }, + "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", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", + "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "license": "MIT" + }, + "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" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "license": "MIT" + }, + "node_modules/isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/iterate-object": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz", + "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jake/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/jake/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/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/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-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-rpc-engine": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz", + "integrity": "sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==", + "dev": true, + "license": "ISC", + "dependencies": { + "async": "^2.0.1", + "babel-preset-env": "^1.7.0", + "babelify": "^7.3.0", + "json-rpc-error": "^2.0.0", + "promise-to-callback": "^1.0.0", + "safe-event-emitter": "^1.0.1" + } + }, + "node_modules/json-rpc-error": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", + "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/json-rpc-random-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", + "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=", + "dev": true, + "license": "ISC" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true, + "license": "MIT" + }, + "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": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "license": "Public Domain" + }, + "node_modules/jsonschema": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz", + "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/keccak/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/keccak/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": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz", + "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-mem": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz", + "integrity": "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-packager": "~4.0.0", + "memdown": "~3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-mem/node_modules/immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", + "dev": true, + "license": "MIT" + }, + "node_modules/level-mem/node_modules/memdown": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-3.0.0.tgz", + "integrity": "sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~5.0.0", + "functional-red-black-tree": "~1.0.1", + "immediate": "~3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-mem/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" + }, + "node_modules/level-packager": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz", + "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "encoding-down": "~5.0.0", + "levelup": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-post": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/level-post/-/level-post-1.0.7.tgz", + "integrity": "sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==", + "dev": true, + "license": "MIT", + "dependencies": { + "ltgt": "^2.1.2" + } + }, + "node_modules/level-sublevel": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.4.tgz", + "integrity": "sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytewise": "~1.1.0", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0", + "level-iterator-stream": "^2.0.3", + "ltgt": "~2.1.1", + "pull-defer": "^0.2.2", + "pull-level": "^2.0.3", + "pull-stream": "^3.6.8", + "typewiselite": "~1.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/level-sublevel/node_modules/level-iterator-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz", + "integrity": "sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.5", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/level-sublevel/node_modules/ltgt": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz", + "integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.15", + "xtend": "~2.1.1" + } + }, + "node_modules/level-ws/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true, + "license": "MIT" + }, + "node_modules/level-ws/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-ws/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz", + "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~4.0.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~3.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", + "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lint-staged": { + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", + "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^3.1.0", + "colorette": "^2.0.17", + "commander": "^9.3.0", + "debug": "^4.3.4", + "execa": "^6.1.0", + "lilconfig": "2.0.5", + "listr2": "^4.0.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-inspect": "^1.12.2", + "pidtree": "^0.6.0", + "string-argv": "^0.3.1", + "yaml": "^2.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", + "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/lint-staged/node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/listr2": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", + "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.5", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.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==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "license": "MIT" + }, + "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" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true, + "license": "MIT" + }, + "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": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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/log-symbols/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/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/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/looper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/looper/-/looper-2.0.0.tgz", + "integrity": "sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~2.7.1", + "functional-red-black-tree": "^1.0.1", + "immediate": "^3.2.3", + "inherits": "~2.0.1", + "ltgt": "~2.2.0", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/memdown/node_modules/abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/memdown/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" + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/merkle-patricia-tree": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", + "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^1.4.2", + "ethereumjs-util": "^5.0.0", + "level-ws": "0.0.0", + "levelup": "^1.2.1", + "memdown": "^1.0.0", + "readable-stream": "^2.0.0", + "rlp": "^2.0.0", + "semaphore": ">=1.0.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~4.0.0" + } + }, + "node_modules/merkle-patricia-tree/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true, + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~2.6.0" + } + }, + "node_modules/merkle-patricia-tree/node_modules/level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/merkle-patricia-tree/node_modules/level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "level-errors": "^1.0.3", + "readable-stream": "^1.0.33", + "xtend": "^4.0.0" + } + }, + "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream/node_modules/level-errors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", + "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "errno": "~0.1.1" + } + }, + "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/merkle-patricia-tree/node_modules/levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "deferred-leveldown": "~1.2.1", + "level-codec": "~7.0.0", + "level-errors": "~1.0.3", + "level-iterator-stream": "~1.3.0", + "prr": "~1.0.1", + "semver": "~5.4.1", + "xtend": "~4.0.0" + } + }, + "node_modules/merkle-patricia-tree/node_modules/semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "mkdirp": "*" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mkdirp-promise/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", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.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.0.1", + "ms": "2.1.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/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/mocha/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/mocha/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/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "license": "ISC", + "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" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs/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==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-fs": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", + "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "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/multibase": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", + "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "base-x": "^3.0.8", + "buffer": "^5.5.0" + } + }, + "node_modules/multicodec": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", + "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "varint": "^5.0.0" + } + }, + "node_modules/multihashes": { + "version": "0.4.21", + "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", + "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "multibase": "^0.7.0", + "varint": "^5.0.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true, + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/nanoassert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", + "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", + "dev": true, + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.1.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", + "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-environment-flags": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", + "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/nopt/node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", + "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=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": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.3.tgz", + "integrity": "sha512-qN5lHhArxl/789Bp3XCpssAYy7cvOdRzxzflmGEJaiipAT2b/USr1XvKjYyssPOwQ/3KjV1e8Ed9po9rie6E6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/oboe": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", + "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", + "dev": true, + "license": "BSD", + "optional": true, + "dependencies": { + "http-https": "^1.0.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "license": "MIT", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/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", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "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": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "dev": true + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", + "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true, + "license": "MIT", + "optional": 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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postinstall-postinstall": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", + "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/precond": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", + "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prettier-plugin-solidity": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz", + "integrity": "sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.14.0", + "emoji-regex": "^10.0.0", + "escape-string-regexp": "^4.0.0", + "semver": "^7.3.5", + "solidity-comments-extractor": "^0.0.7", + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "prettier": "^2.3.0" + } + }, + "node_modules/prettier-plugin-solidity/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/prettier-plugin-solidity/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "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" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/promise-to-callback": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", + "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fn": "^1.0.0", + "set-immediate-shim": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true, + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/pull-cat": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz", + "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=", + "dev": true, + "license": "MIT" + }, + "node_modules/pull-defer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.3.tgz", + "integrity": "sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/pull-level": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pull-level/-/pull-level-2.0.4.tgz", + "integrity": "sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-post": "^1.0.7", + "pull-cat": "^1.1.9", + "pull-live": "^1.0.1", + "pull-pushable": "^2.0.0", + "pull-stream": "^3.4.0", + "pull-window": "^2.1.4", + "stream-to-pull-stream": "^1.7.1" + } + }, + "node_modules/pull-live": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pull-live/-/pull-live-1.0.1.tgz", + "integrity": "sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=", + "dev": true, + "license": "MIT", + "dependencies": { + "pull-cat": "^1.1.9", + "pull-stream": "^3.4.0" + } + }, + "node_modules/pull-pushable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz", + "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=", + "dev": true, + "license": "MIT" + }, + "node_modules/pull-stream": { + "version": "3.6.14", + "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.14.tgz", + "integrity": "sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew==", + "dev": true, + "license": "MIT" + }, + "node_modules/pull-window": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/pull-window/-/pull-window-2.1.4.tgz", + "integrity": "sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=", + "dev": true, + "license": "MIT", + "dependencies": { + "looper": "^2.0.0" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "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==", + "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" + }, + "node_modules/r-json": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/r-json/-/r-json-1.2.10.tgz", + "integrity": "sha512-hu9vyLjSlHXT62NAS7DjI9WazDlvjN0lgp3n431dCVnirVcLkZIpzSwA3orhZEKzdDD2jqNYI+w0yG0aFf4kpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/r1csfile": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.16.tgz", + "integrity": "sha512-A2jRVWzGgmXeG2lVAc0H4suJmzt50it5UvBnycJgBCpMXM3tH/M6RguP7nvs6suY/yYnkN6jX6iTScSiDUF3FA==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "@iden3/bigarray": "0.0.2", + "fastfile": "0.0.18", + "ffjavascript": "0.2.22" + } + }, + "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", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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/raw-body/node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "license": "MIT", + "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/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-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", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "3.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/recursive-readdir/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "license": "BSD", + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "license": "BSD", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha1-1AgrTURZgDZkD7c93qAe1T20nrw=", + "dev": true, + "license": "MIT", + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA=", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "license": "ISC", + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve/node_modules/is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "license": "MIT", + "dependencies": { + "through": "~2.3.4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "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==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.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==", + "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", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rustbn.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", + "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", + "dev": true, + "license": "(MIT OR Apache-2.0)" + }, + "node_modules/rxjs": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "license": "0BSD" + }, + "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" + }, + "node_modules/safe-event-emitter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", + "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", + "dev": true, + "license": "ISC", + "dependencies": { + "events": "^3.0.0" + } + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "BSD-3-Clause", + "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" + } + }, + "node_modules/sc-istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true, + "license": "MIT" + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "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": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true, + "license": "MIT", + "engines": { + "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": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true, + "license": "MIT" + }, + "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": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrollsdk": { + "version": "87.0.0", + "resolved": "https://registry.npmjs.org/scrollsdk/-/scrollsdk-87.0.0.tgz", + "integrity": "sha512-Qg4WaQd2mrjEIe+6NhL02IyLxzlfB1FKhfLhnHSHTNxOMjRGBlavFkrjj43k64obiLdmwj0cKMORkxpjGo2xhw==", + "engines": { + "node": ">=16.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true, + "license": "MIT" + }, + "node_modules/scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pbkdf2": "^3.0.3" + } + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/seedrandom": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.1.tgz", + "integrity": "sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/send/node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "body-parser": "^1.16.0", + "cors": "^2.8.1", + "express": "^4.14.0", + "request": "^2.79.0", + "xhr": "^2.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "license": "ISC" + }, + "node_modules/set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true, + "license": "MIT" + }, + "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" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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", + "optional": true + }, + "node_modules/simple-get": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", + "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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_modules/slice-ansi/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "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": { + "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/solc/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/solhint": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.3.7.tgz", + "integrity": "sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@solidity-parser/parser": "^0.14.1", + "ajv": "^6.6.1", + "antlr4": "4.7.1", + "ast-parents": "0.0.1", + "chalk": "^2.4.2", + "commander": "2.18.0", + "cosmiconfig": "^5.0.7", + "eslint": "^5.6.0", + "fast-diff": "^1.1.2", + "glob": "^7.1.3", + "ignore": "^4.0.6", + "js-yaml": "^3.12.0", + "lodash": "^4.17.11", + "semver": "^6.3.0" + }, + "bin": { + "solhint": "solhint.js" + }, + "optionalDependencies": { + "prettier": "^1.14.3" + } + }, + "node_modules/solhint/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/solhint/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", + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/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", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/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", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solhint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true, + "license": "MIT" + }, + "node_modules/solhint/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "license": "MIT" + }, + "node_modules/solhint/node_modules/eslint": { + "version": "5.16.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", + "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^6.14.0 || ^8.10.0 || >=9.10.0" + } + }, + "node_modules/solhint/node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/solhint/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solhint/node_modules/eslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solhint/node_modules/espree": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/solhint/node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/solhint/node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/solhint/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/solhint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true, + "license": "ISC" + }, + "node_modules/solhint/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/solhint/node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/solhint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/solhint/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solhint/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solhint/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/solhint/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/solhint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solhint/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/solhint/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/solidity-comments-extractor": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz", + "integrity": "sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/solidity-coverage": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.11.tgz", + "integrity": "sha512-yy0Yk+olovBbXn0Me8BWULmmv7A69ZKkP5aTOJGOO8u61Tu2zS989erfjtFlUjDnfWtxRAVkd8BsQD704yLWHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "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.15", + "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" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "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.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/hash": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "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/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/networks": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/transactions": "^5.7.0", + "@ethersproject/web": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "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/abstract-provider": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "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/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/rlp": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "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.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "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.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "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/logger": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "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/bignumber": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "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/abstract-signer": "^5.7.0", + "@ethersproject/address": "^5.7.0", + "@ethersproject/base64": "^5.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "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.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "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" + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "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/logger": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "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/logger": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "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.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "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.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "bn.js": "^5.2.1", + "elliptic": "6.5.4", + "hash.js": "1.1.7" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "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.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "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.7.0", + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/keccak256": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/rlp": "^5.7.0", + "@ethersproject/signing-key": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "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/base64": "^5.7.0", + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "@ethersproject/properties": "^5.7.0", + "@ethersproject/strings": "^5.7.0" + } + }, + "node_modules/solidity-coverage/node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/solidity-coverage/node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/solidity-coverage/node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true, + "license": "MIT" + }, + "node_modules/solidity-coverage/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/solidity-coverage/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/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==", + "dev": true, + "license": "LGPL-3.0", + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solidity-coverage/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.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==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/squirrelly": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/squirrelly/-/squirrelly-8.0.8.tgz", + "integrity": "sha512-7dyZJ9Gw86MmH0dYLiESsjGOTj6KG8IWToTaqBuB6LwPI+hyNb6mbQaZwrfnAQ4cMDnSWMUvX/zAYDLTSWLk/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-to-pull-stream": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz", + "integrity": "sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "looper": "^3.0.0", + "pull-stream": "^3.2.3" + } + }, + "node_modules/stream-to-pull-stream/node_modules/looper": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", + "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=", + "dev": true, + "license": "MIT" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true, + "license": "MIT" + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "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" + }, + "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", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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/string-width/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", + "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/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/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "dev": true, + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-color/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swarm-js": { + "version": "0.1.40", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", + "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bluebird": "^3.5.0", + "buffer": "^5.0.5", + "eth-lib": "^0.1.26", + "fs-extra": "^4.0.2", + "got": "^7.1.0", + "mime-types": "^2.1.16", + "mkdirp-promise": "^5.0.1", + "mock-fs": "^4.1.0", + "setimmediate": "^1.0.5", + "tar": "^4.0.2", + "xhr-request": "^1.0.1" + } + }, + "node_modules/swarm-js/node_modules/eth-lib": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", + "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bn.js": "^4.11.6", + "elliptic": "^6.4.0", + "nano-json-stream-parser": "^0.1.2", + "servify": "^0.1.12", + "ws": "^3.0.0", + "xhr-request-promise": "^0.1.2" + } + }, + "node_modules/swarm-js/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/swarm-js/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^3.2.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-plain-obj": "^1.1.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "p-cancelable": "^0.3.0", + "p-timeout": "^1.1.1", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "url-parse-lax": "^1.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/swarm-js/node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prepend-http": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/swarm-js/node_modules/ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "node_modules/swarm-js/node_modules/ws/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", + "optional": true + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.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", + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "license": "BSD-3-Clause", + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/tape": { + "version": "4.15.1", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.15.1.tgz", + "integrity": "sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.2.0", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.4", + "minimist": "~1.2.6", + "object-inspect": "~1.12.0", + "resolve": "~1.22.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.5", + "through": "~2.3.8" + }, + "bin": { + "tape": "bin/tape" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "license": "ISC", + "optional": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/test-value": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", + "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^1.0.3", + "typical": "^2.6.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/testrpc": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", + "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true, + "license": "MIT" + }, + "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", + "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" + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tmp-promise": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-2.1.1.tgz", + "integrity": "sha512-Z048AOz/w9b6lCbJUpevIJpRpUztENl8zdv1bmAKVHimfqRFl92ROkmT9rp7TVBnrEw2gtMTol/2Cp2S2kJa4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "0.1.0" + } + }, + "node_modules/tmp-promise/node_modules/tmp": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", + "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/to-regex-range/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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.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/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true, + "license": "MIT" + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "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", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-command-line-args/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/ts-command-line-args/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", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-command-line-args/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/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-generator": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", + "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mkdirp": "^0.5.2", + "@types/prettier": "^2.1.1", + "@types/resolve": "^0.0.8", + "chalk": "^2.4.1", + "glob": "^7.1.2", + "mkdirp": "^0.5.1", + "prettier": "^2.1.2", + "resolve": "^1.8.1", + "ts-essentials": "^1.0.0" + }, + "bin": { + "ts-generator": "dist/cli/run.js" + } + }, + "node_modules/ts-generator/node_modules/ts-essentials": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", + "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "0.7.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.0", + "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/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "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/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=", + "dev": true, + "license": "MIT" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "license": "Unlicense" + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true, + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "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==", + "dev": true, + "license": "ISC", + "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/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/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", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", + "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=", + "dev": true, + "license": "MIT", + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=", + "dev": true, + "license": "MIT" + }, + "node_modules/typewiselite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typewiselite/-/typewiselite-1.0.0.tgz", + "integrity": "sha1-yIgvobsQksBgBal/NO9chQjjZk4=", + "dev": true, + "license": "MIT" + }, + "node_modules/typical": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", + "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.15.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", + "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/undici": { + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unorm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", + "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", + "dev": true, + "license": "MIT or GPL-2.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "license": "MIT" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true, + "license": "MIT" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", + "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "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" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "license": "MIT" + }, + "node_modules/util.promisify": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", + "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "for-each": "^0.3.3", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "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" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/varint": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", + "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "license": "MIT" + }, + "node_modules/verror/node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/w-json": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/w-json/-/w-json-1.3.10.tgz", + "integrity": "sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==", + "dev": true, + "license": "MIT" + }, + "node_modules/wasmbuilder": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.10.tgz", + "integrity": "sha512-zQSvZ7d74d9OvN+mCN6ucNne4QS5/cBBYTHldX0Oe+u9gStY21orapvuX1ajisA7RVIpuFhYg+ZgdySsPfeh0A==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.48" + } + }, + "node_modules/wasmcurves": { + "version": "0.0.14", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.14.tgz", + "integrity": "sha512-G1iMkxlRaQSdqQ1JrwHcU+awLmwyH6kFKfT8g9obd8MWe+u5oSdFXrODB0zmSI5aGGvJPG+4cAmqCGYv9R+7qg==", + "dev": true, + "license": "GPL-3.0", + "dependencies": { + "big-integer": "^1.6.42", + "blakejs": "^1.1.0" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/web3": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.11.tgz", + "integrity": "sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ==", + "dev": true, + "hasInstallScript": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-bzz": "1.2.11", + "web3-core": "1.2.11", + "web3-eth": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-shh": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.11.tgz", + "integrity": "sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@types/node": "^12.12.6", + "got": "9.6.0", + "swarm-js": "^0.1.40", + "underscore": "1.9.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-bzz/node_modules/@types/node": { + "version": "12.20.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", + "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/web3-core": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.11.tgz", + "integrity": "sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "@types/node": "^12.12.6", + "bignumber.js": "^9.0.0", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-requestmanager": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-helpers": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz", + "integrity": "sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "underscore": "1.9.1", + "web3-eth-iban": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-method": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.11.tgz", + "integrity": "sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@ethersproject/transactions": "^5.0.0-beta.135", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-promievent": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz", + "integrity": "sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "eventemitter3": "4.0.4" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-requestmanager": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz", + "integrity": "sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "web3-providers-http": "1.2.11", + "web3-providers-ipc": "1.2.11", + "web3-providers-ws": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core-subscriptions": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz", + "integrity": "sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-core/node_modules/@types/node": { + "version": "12.20.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", + "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/web3-eth": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.11.tgz", + "integrity": "sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-accounts": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-eth-ens": "1.2.11", + "web3-eth-iban": "1.2.11", + "web3-eth-personal": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz", + "integrity": "sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@ethersproject/abi": "5.0.0-beta.153", + "underscore": "1.9.1", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": { + "version": "5.0.0-beta.153", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz", + "integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@ethersproject/address": ">=5.0.0-beta.128", + "@ethersproject/bignumber": ">=5.0.0-beta.130", + "@ethersproject/bytes": ">=5.0.0-beta.129", + "@ethersproject/constants": ">=5.0.0-beta.128", + "@ethersproject/hash": ">=5.0.0-beta.128", + "@ethersproject/keccak256": ">=5.0.0-beta.127", + "@ethersproject/logger": ">=5.0.0-beta.129", + "@ethersproject/properties": ">=5.0.0-beta.131", + "@ethersproject/strings": ">=5.0.0-beta.130" + } + }, + "node_modules/web3-eth-accounts": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz", + "integrity": "sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.8", + "ethereumjs-common": "^1.3.2", + "ethereumjs-tx": "^2.1.1", + "scrypt-js": "^3.0.1", + "underscore": "1.9.1", + "uuid": "3.3.2", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "dev": true, + "license": "MPL-2.0", + "optional": true, + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "license": "MPL-2.0", + "optional": true, + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/web3-eth-accounts/node_modules/uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/web3-eth-contract": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz", + "integrity": "sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@types/bn.js": "^4.11.5", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-ens": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz", + "integrity": "sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "content-hash": "^2.5.2", + "eth-ens-namehash": "2.0.8", + "underscore": "1.9.1", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-promievent": "1.2.11", + "web3-eth-abi": "1.2.11", + "web3-eth-contract": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz", + "integrity": "sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "bn.js": "^4.11.9", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz", + "integrity": "sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "@types/node": "^12.12.6", + "web3-core": "1.2.11", + "web3-core-helpers": "1.2.11", + "web3-core-method": "1.2.11", + "web3-net": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-eth-personal/node_modules/@types/node": { + "version": "12.20.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", + "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/web3-net": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.11.tgz", + "integrity": "sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-utils": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-provider-engine": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz", + "integrity": "sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.5.0", + "backoff": "^2.5.0", + "clone": "^2.0.0", + "cross-fetch": "^2.1.0", + "eth-block-tracker": "^3.0.0", + "eth-json-rpc-infura": "^3.1.0", + "eth-sig-util": "^1.4.2", + "ethereumjs-block": "^1.2.2", + "ethereumjs-tx": "^1.2.0", + "ethereumjs-util": "^5.1.5", + "ethereumjs-vm": "^2.3.4", + "json-rpc-error": "^2.0.0", + "json-stable-stringify": "^1.0.1", + "promise-to-callback": "^1.0.0", + "readable-stream": "^2.2.9", + "request": "^2.85.0", + "semaphore": "^1.0.3", + "ws": "^5.1.1", + "xhr": "^2.2.0", + "xtend": "^4.0.1" + } + }, + "node_modules/web3-provider-engine/node_modules/eth-sig-util": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", + "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", + "dev": true, + "license": "ISC", + "dependencies": { + "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", + "ethereumjs-util": "^5.1.1" + } + }, + "node_modules/web3-provider-engine/node_modules/ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", + "dev": true, + "license": "MIT" + }, + "node_modules/web3-provider-engine/node_modules/ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "async": "^2.0.1", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "^1.2.2", + "ethereumjs-util": "^5.0.0", + "merkle-patricia-tree": "^2.1.2" + } + }, + "node_modules/web3-provider-engine/node_modules/ws": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/web3-providers-http": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.11.tgz", + "integrity": "sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-core-helpers": "1.2.11", + "xhr2-cookies": "1.1.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz", + "integrity": "sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "oboe": "2.1.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz", + "integrity": "sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "eventemitter3": "4.0.4", + "underscore": "1.9.1", + "web3-core-helpers": "1.2.11", + "websocket": "^1.0.31" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/web3-providers-ws/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/web3-providers-ws/node_modules/websocket": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", + "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/web3-shh": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.11.tgz", + "integrity": "sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-core": "1.2.11", + "web3-core-method": "1.2.11", + "web3-core-subscriptions": "1.2.11", + "web3-net": "1.2.11" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils": { + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", + "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", + "dev": true, + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "bn.js": "^4.11.9", + "eth-lib": "0.2.8", + "ethereum-bloom-filters": "^1.0.6", + "ethjs-unit": "0.1.6", + "number-to-bn": "1.7.0", + "randombytes": "^2.1.0", + "underscore": "1.9.1", + "utf8": "3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/websocket": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.32.tgz", + "integrity": "sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.50", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/websocket/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/websocket/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true, + "license": "ISC" + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wide-align/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", + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/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", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true, + "license": "MIT", + "bin": { + "window-size": "cli.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true, + "license": "MIT" + }, + "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", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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", + "engines": { + "node": ">=8" + } + }, + "node_modules/worker-threads": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/worker-threads/-/worker-threads-1.0.0.tgz", + "integrity": "sha512-vK6Hhvph8oLxocEJIlc3YfGAZhm210uGzjZsXSu+JYLAQ/s/w4Tqgl60JrdH58hW8NSGP4m3bp8a92qPXgX05w==", + "dev": true, + "license": "ISC" + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true, + "license": "Apache-2.0" + }, + "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", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true, + "license": "ISC" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "license": "MIT", + "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/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer-to-arraybuffer": "^0.0.5", + "object-assign": "^4.1.1", + "query-string": "^5.0.1", + "simple-get": "^2.7.0", + "timed-out": "^4.0.1", + "url-set-query": "^1.0.0", + "xhr": "^2.0.4" + } + }, + "node_modules/xhr-request-promise": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", + "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "xhr-request": "^1.1.0" + } + }, + "node_modules/xhr2-cookies": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", + "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "cookiejar": "^2.1.1" + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.32" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", + "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/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/yargs-unparser/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/yargs/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index f4b7afdb..e18e4e1d 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -38,6 +38,7 @@ import {L2WETHGateway} from "../../src/L2/gateways/L2WETHGateway.sol"; import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {L2TxFeeVaultWithGasToken} from "../../src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol"; import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; import {ScrollStandardERC20} from "../../src/libraries/token/ScrollStandardERC20.sol"; @@ -771,8 +772,18 @@ contract DeployScroll is DeterministicDeployment { } function deployTxFeeVault() private { - bytes memory args = abi.encode(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); - L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVault).creationCode, args); + if (!ALTERNATIVE_GAS_TOKEN_ENABLED) { + bytes memory args = abi.encode(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVault).creationCode, args); + } else { + bytes memory args = abi.encode( + L2_ETH_GATEWAY_PROXY_ADDR, + DEPLOYER_ADDR, + L1_FEE_VAULT_ADDR, + FEE_VAULT_MIN_WITHDRAW_AMOUNT + ); + L2_TX_FEE_VAULT_ADDR = deploy("L2_TX_FEE_VAULT", type(L2TxFeeVaultWithGasToken).creationCode, args); + } } function deployL2ProxyAdmin() private { @@ -1432,7 +1443,10 @@ contract DeployScroll is DeterministicDeployment { } function initializeL2TxFeeVault() private { - if (L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR)) { + if ( + !ALTERNATIVE_GAS_TOKEN_ENABLED && + L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).messenger() != notnull(L2_SCROLL_MESSENGER_PROXY_ADDR) + ) { L2TxFeeVault(payable(L2_TX_FEE_VAULT_ADDR)).updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); } } diff --git a/scripts/deterministic/GenerateGenesis.s.sol b/scripts/deterministic/GenerateGenesis.s.sol index d0c3e9cd..4fa0917e 100644 --- a/scripts/deterministic/GenerateGenesis.s.sol +++ b/scripts/deterministic/GenerateGenesis.s.sol @@ -4,6 +4,7 @@ pragma solidity =0.8.24; import {L1GasPriceOracle} from "../../src/L2/predeploys/L1GasPriceOracle.sol"; import {L2MessageQueue} from "../../src/L2/predeploys/L2MessageQueue.sol"; import {L2TxFeeVault} from "../../src/L2/predeploys/L2TxFeeVault.sol"; +import {L2TxFeeVaultWithGasToken} from "../../src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol"; import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; @@ -152,28 +153,44 @@ contract GenerateGenesis is DeployScroll { } // set code - L2TxFeeVault _vault = new L2TxFeeVault(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); - vm.etch(predeployAddr, address(_vault).code); - + address _vaultAddr; vm.prank(DEPLOYER_ADDR); - _vault.updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + if (!ALTERNATIVE_GAS_TOKEN_ENABLED) { + L2TxFeeVault _vault = new L2TxFeeVault(DEPLOYER_ADDR, L1_FEE_VAULT_ADDR, FEE_VAULT_MIN_WITHDRAW_AMOUNT); + vm.prank(DEPLOYER_ADDR); + _vault.updateMessenger(L2_SCROLL_MESSENGER_PROXY_ADDR); + _vaultAddr = address(_vault); + } else { + L2TxFeeVaultWithGasToken _vault = new L2TxFeeVaultWithGasToken( + L2_ETH_GATEWAY_PROXY_ADDR, + DEPLOYER_ADDR, + L1_FEE_VAULT_ADDR, + FEE_VAULT_MIN_WITHDRAW_AMOUNT + ); + _vaultAddr = address(_vault); + } + + vm.etch(predeployAddr, _vaultAddr.code); // set storage bytes32 _ownerSlot = hex"0000000000000000000000000000000000000000000000000000000000000000"; - vm.store(predeployAddr, _ownerSlot, vm.load(address(_vault), _ownerSlot)); + vm.store(predeployAddr, _ownerSlot, vm.load(_vaultAddr, _ownerSlot)); bytes32 _minWithdrawAmountSlot = hex"0000000000000000000000000000000000000000000000000000000000000001"; - vm.store(predeployAddr, _minWithdrawAmountSlot, vm.load(address(_vault), _minWithdrawAmountSlot)); + vm.store(predeployAddr, _minWithdrawAmountSlot, vm.load(_vaultAddr, _minWithdrawAmountSlot)); bytes32 _messengerSlot = hex"0000000000000000000000000000000000000000000000000000000000000002"; - vm.store(predeployAddr, _messengerSlot, vm.load(address(_vault), _messengerSlot)); + vm.store(predeployAddr, _messengerSlot, vm.load(_vaultAddr, _messengerSlot)); bytes32 _recipientSlot = hex"0000000000000000000000000000000000000000000000000000000000000003"; - vm.store(predeployAddr, _recipientSlot, vm.load(address(_vault), _recipientSlot)); + vm.store(predeployAddr, _recipientSlot, vm.load(_vaultAddr, _recipientSlot)); + + bytes32 _ETHGatewaySlot = hex"0000000000000000000000000000000000000000000000000000000000000005"; + vm.store(predeployAddr, _ETHGatewaySlot, vm.load(_vaultAddr, _ETHGatewaySlot)); // reset so its not included state dump - vm.etch(address(_vault), ""); - vm.resetNonce(address(_vault)); + vm.etch(_vaultAddr, ""); + vm.resetNonce(_vaultAddr); } function setDeterministicDeploymentProxy() internal { diff --git a/src/L2/predeploys/L2TxFeeVault.sol b/src/L2/predeploys/L2TxFeeVault.sol index 20248eb7..fb424804 100644 --- a/src/L2/predeploys/L2TxFeeVault.sol +++ b/src/L2/predeploys/L2TxFeeVault.sol @@ -119,13 +119,7 @@ contract L2TxFeeVault is OwnableBase { emit Withdrawal(_value, recipient, msg.sender); - // no fee provided - IL2ScrollMessenger(messenger).sendMessage{value: _value}( - recipient, - _value, - bytes(""), // no message (simple eth transfer) - 0 // _gasLimit can be zero for fee vault. - ); + sendWithdrawMessage(recipient, _value); } /// @notice Triggers a withdrawal of all available funds to the L1 fee wallet. @@ -164,4 +158,19 @@ contract L2TxFeeVault is OwnableBase { emit UpdateMinWithdrawAmount(_oldMinWithdrawAmount, _newMinWithdrawAmount); } + + /********************** + * Internal Functions * + **********************/ + + /// @dev Internal function to do `sendWithdrawMessage` function call. + function sendWithdrawMessage(address _recipient, uint256 _value) internal virtual { + // no fee provided + IL2ScrollMessenger(messenger).sendMessage{value: _value}( + _recipient, + _value, + bytes(""), // no message (simple eth transfer) + 0 // _gasLimit can be zero for fee vault. + ); + } } diff --git a/src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol b/src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol new file mode 100644 index 00000000..7234fb66 --- /dev/null +++ b/src/alternative-gas-token/L2TxFeeVaultWithGasToken.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: MIT + +pragma solidity =0.8.24; + +import {L2TxFeeVault} from "../L2/predeploys/L2TxFeeVault.sol"; +import {IL2ETHGateway} from "../L2/gateways/IL2ETHGateway.sol"; + +contract L2TxFeeVaultWithGasToken is L2TxFeeVault { + /************* + * Constants * + *************/ + + /// @notice The address of `L2ETHGateway` contract. + address public ETHGateway; + + /*************** + * Constructor * + ***************/ + + constructor( + address _ETHGateway, + address _owner, + address _recipient, + uint256 _minWithdrawalAmount + ) L2TxFeeVault(_owner, _recipient, _minWithdrawalAmount) { + ETHGateway = _ETHGateway; + } + + /************************ + * Restricted Functions * + ************************/ + + /// @notice Update the address of ETHGateway. + /// @param _newETHGateway The address of ETHGateway to update. + function updateNativeTokenGateway(address _newETHGateway) external onlyOwner { + address _oldETHGateway = ETHGateway; + ETHGateway = _newETHGateway; + + emit UpdateMessenger(_oldETHGateway, _newETHGateway); + } + + /********************** + * Internal Functions * + **********************/ + + /// @inheritdoc L2TxFeeVault + function sendWithdrawMessage(address _recipient, uint256 _value) internal override { + // no fee provided + IL2ETHGateway(ETHGateway).withdrawETH{value: _value}( + _recipient, + _value, + 0 // _gasLimit can be zero for fee vault. + ); + } +} diff --git a/src/test/deterministic/DeployScroll.t.sol b/src/test/deterministic/DeployScroll.t.sol index 676d2f23..a30a47be 100644 --- a/src/test/deterministic/DeployScroll.t.sol +++ b/src/test/deterministic/DeployScroll.t.sol @@ -39,6 +39,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0xFdDfA03a778fE77DDf0E1E479DEdCD1Aea37E808, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0x3DAD8B5526C420Ae43bf1a7125643ea217A220A1, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0xded0C0D084A9eb3bA7E86dC1C0826A13055F9d7d, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x9Fea3cb89B6E60b49048b7D66F66c8cD18f28d11, L2_TX_FEE_VAULT_ADDR); } function testMockFinalizeAddresses() public { @@ -60,6 +61,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0xFdDfA03a778fE77DDf0E1E479DEdCD1Aea37E808, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0x3DAD8B5526C420Ae43bf1a7125643ea217A220A1, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0xded0C0D084A9eb3bA7E86dC1C0826A13055F9d7d, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x9Fea3cb89B6E60b49048b7D66F66c8cD18f28d11, L2_TX_FEE_VAULT_ADDR); } function testAltGasTokenAddresses() public { @@ -81,6 +83,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0x0000000000000000000000000000000000000000, L1_WETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0xFA99FF03e6Dd89e12aaF70DA363D02B5Ab5c2d8F, L2_ETH_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0x0000000000000000000000000000000000000000, L2_WETH_GATEWAY_IMPLEMENTATION_ADDR); + assertEq(0x747d2EB150F88EBA24Dc99841baA19E56e2BF901, L2_TX_FEE_VAULT_ADDR); } function checkCommonAddresses() internal view { @@ -106,7 +109,6 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0x70E868415c7532E436d67b7aE417Bd1551142A9d, L1_GAS_PRICE_ORACLE_ADDR); assertEq(0xaFbB29CC183006748fBF1d6a50426699801B3f6e, L2_WHITELIST_ADDR); assertEq(0x26fE70D2D9aA9f3DF3031A8a36bd7585b56f3e1c, L2_WETH_ADDR); - assertEq(0x5918A73f1c4825537abA44c7ae1e51b29e584c55, L2_TX_FEE_VAULT_ADDR); assertEq(0x639F9169025652D95b5c30080ee65177ff539e2d, L2_PROXY_ADMIN_ADDR); assertEq(0x1454F7362F8b982177b74CAc02F0428ef6044d27, L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR); assertEq(0xEE6FE96bA71AdCB8AE724032F7a9DB8A3e7f87E7, L2_SCROLL_MESSENGER_PROXY_ADDR); From 128cdd04e4bff1b73d55f65a5fe484a7c32071d1 Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 26 Sep 2024 16:15:09 +0800 Subject: [PATCH 38/48] fix: clean up --- package-lock.json | 22878 -------------------------------------------- 1 file changed, 22878 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 0fda8ad5..00000000 --- a/package-lock.json +++ /dev/null @@ -1,22878 +0,0 @@ -{ - "name": "scroll-contracts", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "scroll-contracts", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@openzeppelin/contracts": "^v4.9.3", - "@openzeppelin/contracts-upgradeable": "^v4.9.3", - "scrollsdk": "^87.0.0" - }, - "devDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.6", - "@nomicfoundation/hardhat-ethers": "^3.0.5", - "@nomicfoundation/hardhat-verify": "^2.0.5", - "@typechain/ethers-v6": "^0.5.1", - "@typechain/hardhat": "^9.1.0", - "@types/chai": "^4.2.21", - "@types/edit-json-file": "^1.7.0", - "@types/mocha": "^9.0.0", - "@types/node": "^20.11.27", - "@typescript-eslint/eslint-plugin": "^7.2.0", - "@typescript-eslint/parser": "^7.2.0", - "chai": "^4.2.0", - "circom": "^0.5.46", - "circomlib": "^0.5.0", - "dotenv": "^10.0.0", - "edit-json-file": "^1.7.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^8.3.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.23.4", - "eslint-plugin-n": "^16.6.2", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.4.0", - "eslint-plugin-promise": "^6.1.1", - "ethereum-waffle": "^3.0.0", - "ethers": "^6.11.1", - "hardhat": "^2.22.6", - "hardhat-gas-reporter": "^1.0.4", - "husky": "^8.0.1", - "lint-staged": "^13.0.3", - "lodash": "^4.17.21", - "prettier": "^2.3.2", - "prettier-plugin-solidity": "^1.0.0-beta.13", - "solhint": "^3.3.6", - "solidity-coverage": "^0.8.11", - "squirrelly": "8.0.8", - "toml": "^3.0.0", - "ts-node": "^10.1.0", - "typechain": "^8.3.2", - "typescript": "^5.4.2" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-consumer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", - "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", - "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-consumer": "0.8.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - } - }, - "node_modules/@ensdomains/ens/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@ensdomains/ens/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ensdomains/ens/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/ethereumjs-util": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", - "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", - "dev": true, - "license": "MPL-2.0", - "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/@ensdomains/ens/node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ensdomains/ens/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/@ensdomains/ens/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true, - "license": "ISC" - }, - "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ensdomains/ens/node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true, - "license": "ISC" - }, - "node_modules/@ensdomains/ens/node_modules/solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - }, - "bin": { - "solcjs": "solcjs" - } - }, - "node_modules/@ensdomains/ens/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/web3-utils": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.3.tgz", - "integrity": "sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg==", - "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^4.11.9", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true, - "license": "ISC" - }, - "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@ensdomains/ens/node_modules/yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "lodash.assign": "^4.0.3", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.1", - "which-module": "^1.0.0", - "window-size": "^0.2.0", - "y18n": "^3.2.1", - "yargs-parser": "^2.4.1" - } - }, - "node_modules/@ensdomains/ens/node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, - "node_modules/@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/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/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ethereum-waffle/chai": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-3.4.4.tgz", - "integrity": "sha512-/K8czydBtXXkcM9X6q29EqEkc5dN3oYenyH2a9hF7rGAApAJUpH8QBtojxOY/xQ2up5W332jqgxwp0yPiYug1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/chai/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "node_modules/@ethereum-waffle/compiler": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-3.4.4.tgz", - "integrity": "sha512-RUK3axJ8IkD5xpWjWoJgyHclOeEzDLQFga6gKpeGxiS/zBu+HB0W2FvsrrLalTFIaPw/CGYACRBSIxqiCqwqTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^2.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.5.5", - "ethers": "^5.0.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.1", - "solc": "^0.6.3", - "ts-generator": "^0.1.1", - "typechain": "^3.0.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/@typechain/ethers-v5": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-2.0.0.tgz", - "integrity": "sha512-0xdCkyGOzdqh4h5JSf+zoWx85IusEjDcPIwNEHP8mrWSnCae4rvrqB+/gtpdNfX7zjlFlZiMeePn2r63EI3Lrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ethers": "^5.0.2" - }, - "peerDependencies": { - "ethers": "^5.0.0", - "typechain": "^3.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "typical": "^2.6.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/command-line-args": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-4.0.7.tgz", - "integrity": "sha512-aUdPvQRAyBvQd2n7jXcsMDz68ckBJELXNzBybCHOibUWEg0mWTnaYCSRU8h9R+aNRSvDihJtssSRCiDRpLaezA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^2.0.0", - "find-replace": "^1.0.3", - "typical": "^2.6.1" - }, - "bin": { - "command-line-args": "bin/cli.js" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@ethereum-waffle/compiler/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/find-replace": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-1.0.3.tgz", - "integrity": "sha1-uI5zZNLZyVlVnziMZmcNYTBEH6A=", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^1.0.4", - "test-value": "^2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/find-replace/node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, - "license": "MIT", - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/solc": { - "version": "0.6.12", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.6.12.tgz", - "integrity": "sha512-Lm0Ql2G9Qc7yPP2Ba+WNmzw2jwsrd3u4PobHYlSOxaut3TtUbj9+5ZrT6f4DUpNPEoBaFUOEg9Op9C0mk7ge9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/ts-essentials": { - "version": "6.0.7", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-6.0.7.tgz", - "integrity": "sha512-2E4HIIj4tQJlIHuATRHayv0EfMGK3ris/GRk1E3CFnsZzeNV+hUmelbaTZHLtXaZppM5oLhHRtO04gINC4Jusw==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-3.0.0.tgz", - "integrity": "sha512-ft4KVmiN3zH4JUFu2WJBrwfHeDf772Tt2d8bssDTo/YcckKW2D+OwFrHXRC6hJvO3mHjFQTihoMV6fJOi0Hngg==", - "dev": true, - "license": "MIT", - "dependencies": { - "command-line-args": "^4.0.7", - "debug": "^4.1.1", - "fs-extra": "^7.0.0", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "ts-essentials": "^6.0.3", - "ts-generator": "^0.1.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - } - }, - "node_modules/@ethereum-waffle/compiler/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", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ethereum-waffle/ens": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-3.4.4.tgz", - "integrity": "sha512-0m4NdwWxliy3heBYva1Wr4WbJKLnwXizmy5FfSSr5PMbjI7SIGCdCB59U7/ZzY773/hY3bLnzLwvG5mggVjJWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/ens/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-3.4.4.tgz", - "integrity": "sha512-Mp0iB2YNWYGUV+VMl5tjPsaXKbKo8MDH9wSJ702l9EBjdxFf/vBvnMBAC1Fub1lLtmD0JHtp1pq+mWzg/xlLnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.5.0", - "ethers": "^5.5.2" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/mock-contract/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "node_modules/@ethereum-waffle/provider": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-3.4.4.tgz", - "integrity": "sha512-GK8oKJAM8+PKy2nK08yDgl4A80mFuI8zBkE0C9GqTRYQqvuxIyXoLmJ5NZU9lIwyWVv5/KsoA11BgAv2jXE82g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethereum-waffle/ens": "^3.4.4", - "ethers": "^5.5.2", - "ganache-core": "^2.13.2", - "patch-package": "^6.2.2", - "postinstall-postinstall": "^2.1.0" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/@ethereum-waffle/provider/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "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", - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "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", - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.6.1.tgz", - "integrity": "sha512-0cqssYh6FXjlwKWBmLm3+zH2BNARoS5u/hxbz+LpQmcDB3w0W553h2btWui1/uZp2GBM/SI3KniTuMcYyHpA5w==", - "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.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/hash": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.6.0.tgz", - "integrity": "sha512-oPMFlKLN+g+y7a79cLK3WiLcjWFnZQtXWgnLAbHZcN3s7L4v90UHpTOrLk+m3yr0gt+/h9STTM6zrr7PM8uoRw==", - "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/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.0", - "@ethersproject/web": "^5.6.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.6.0.tgz", - "integrity": "sha512-WOqnG0NJKtI8n0wWZPReHtaLkDByPL67tn4nBaDAhmVq8sjHTPbCdz4DRhVu/cfTOvfy9w3iq5QZ7BX7zw56BQ==", - "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/abstract-provider": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.0.tgz", - "integrity": "sha512-6nvhYXjbXsHPS+30sHZ+U4VMagFC/9zAk6Gd/h3S21YW4+yfb0WfRtaAIZ4kfM4rrVwqiy284LP0GtL5HXGLxQ==", - "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/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.6.0.tgz", - "integrity": "sha512-2Neq8wxJ9xHxCF9TUgmKeSh9BXJ6OAxWfeGWvbauPh8FuHEjamgHilllx8KkSd5ErxyHIX7Xv3Fkcud2kY9ezw==", - "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.6.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.6.0.tgz", - "integrity": "sha512-qN4T+hQd/Md32MoJpc69rOwLYRUXwjTlhHDIeUkUmiN/JyWkkLLMoG0TqvSQKNqZOMgN5stbUYN6ILC+eD7MEQ==", - "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.6.0", - "@ethersproject/properties": "^5.6.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.6.0.tgz", - "integrity": "sha512-VziMaXIUHQlHJmkv1dlcd6GY2PmT0khtAqaMctCIDogxkrarMzA9L94KN1NeXqqOfFD6r0sJT3vCTOFSmZ07DA==", - "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.6.0", - "@ethersproject/logger": "^5.6.0", - "bn.js": "^4.11.9" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", - "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", - "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/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.6.0.tgz", - "integrity": "sha512-SrdaJx2bK0WQl23nSpV/b1aq293Lh0sUaZT/yYKPDKn4tlAbkH96SPJwIhwSwTsoQQZxuh1jnqsKwyymoiBdWA==", - "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/bignumber": "^5.6.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.6.0.tgz", - "integrity": "sha512-74Ge7iqTDom0NX+mux8KbRUeJgu1eHZ3iv6utv++sLJG80FVuU9HnHeKVPfjd9s3woFhaFoQGf3B3iH/FrQmgw==", - "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/abi": "^5.6.0", - "@ethersproject/abstract-provider": "^5.6.0", - "@ethersproject/abstract-signer": "^5.6.0", - "@ethersproject/address": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/transactions": "^5.6.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.6.0.tgz", - "integrity": "sha512-fFd+k9gtczqlr0/BruWLAu7UAOas1uRRJvOR84uDf4lNZ+bTkGl366qvniUZHKtlqxBRU65MkOobkmvmpHU+jA==", - "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/abstract-signer": "^5.6.0", - "@ethersproject/address": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.6.0.tgz", - "integrity": "sha512-61g3Jp3nwDqJcL/p4nugSyLrpl/+ChXIOtCEM8UDmWeB3JCAt5FoLdOMXQc3WWkc0oM2C0aAn6GFqqMcS/mHTw==", - "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/abstract-signer": "^5.6.0", - "@ethersproject/basex": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/sha2": "^5.6.0", - "@ethersproject/signing-key": "^5.6.0", - "@ethersproject/strings": "^5.6.0", - "@ethersproject/transactions": "^5.6.0", - "@ethersproject/wordlists": "^5.6.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.6.0.tgz", - "integrity": "sha512-fmh86jViB9r0ibWXTQipxpAGMiuxoqUf78oqJDlCAJXgnJF024hOOX7qVgqsjtbeoxmcLwpPsXNU0WEe/16qPQ==", - "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/abstract-signer": "^5.6.0", - "@ethersproject/address": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/hdnode": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/pbkdf2": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.0", - "@ethersproject/strings": "^5.6.0", - "@ethersproject/transactions": "^5.6.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.6.0.tgz", - "integrity": "sha512-tk56BJ96mdj/ksi7HWZVWGjCq0WVl/QvfhFQNeL8fxhBlGoP+L80uDCiQcpJPd+2XxkivS3lwRm3E0CXTfol0w==", - "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.6.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.6.0.tgz", - "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==", - "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" - }, - "node_modules/@ethersproject/networks": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.2.tgz", - "integrity": "sha512-9uEzaJY7j5wpYGTojGp8U89mSsgQLc40PCMJLMCnFXTs7nhBveZ0t7dbqWUNrepWTszDbFkYD6WlL8DKx5huHA==", - "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/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.6.0.tgz", - "integrity": "sha512-Wu1AxTgJo3T3H6MIu/eejLFok9TYoSdgwRr5oGY1LTLfmGesDoSx05pemsbrPT2gG4cQME+baTSCp5sEo2erZQ==", - "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.6.0", - "@ethersproject/sha2": "^5.6.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.6.0.tgz", - "integrity": "sha512-szoOkHskajKePTJSZ46uHUWWkbv7TzP2ypdEK6jGMqJaEt2sb0jCgfBo0gH0m2HBpRixMuJ6TBRaQCF7a9DoCg==", - "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/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.4.tgz", - "integrity": "sha512-WAdknnaZ52hpHV3qPiJmKx401BLpup47h36Axxgre9zT+doa/4GC/Ne48ICPxTm0BqndpToHjpLP1ZnaxyE+vw==", - "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/abstract-provider": "^5.6.0", - "@ethersproject/abstract-signer": "^5.6.0", - "@ethersproject/address": "^5.6.0", - "@ethersproject/basex": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/hash": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/networks": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.0", - "@ethersproject/rlp": "^5.6.0", - "@ethersproject/sha2": "^5.6.0", - "@ethersproject/strings": "^5.6.0", - "@ethersproject/transactions": "^5.6.0", - "@ethersproject/web": "^5.6.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "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_modules/@ethersproject/random": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.6.0.tgz", - "integrity": "sha512-si0PLcLjq+NG/XHSZz90asNf+YfKEqJGVdxoEkSukzbnBgC8rydbgbUgBbBGLeHN4kAJwUFEKsu3sCXT93YMsw==", - "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.6.0", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.6.0.tgz", - "integrity": "sha512-dz9WR1xpcTL+9DtOT/aDO+YyxSSdO8YIS0jyZwHHSlAmnxA6cKU3TrTd4Xc/bHayctxTgGLYNuVVoiXE4tTq1g==", - "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.6.0", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.6.0.tgz", - "integrity": "sha512-1tNWCPFLu1n3JM9t4/kytz35DkuF9MxqkGGEHNauEbaARdm2fafnOyw1s0tIQDPKF/7bkP1u3dbrmjpn5CelyA==", - "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.6.0", - "@ethersproject/logger": "^5.6.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.6.0.tgz", - "integrity": "sha512-S+njkhowmLeUu/r7ir8n78OUKx63kBdMCPssePS89So1TH4hZqnWFsThEd/GiXYp9qMxVrydf7KdM9MTGPFukA==", - "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.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.6.0.tgz", - "integrity": "sha512-YwF52vTNd50kjDzqKaoNNbC/r9kMDPq3YzDWmsjFTRBcIF1y4JCQJ8gB30wsTfHbaxgxelI5BfxQSxD/PbJOww==", - "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/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/sha2": "^5.6.0", - "@ethersproject/strings": "^5.6.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.6.0.tgz", - "integrity": "sha512-uv10vTtLTZqrJuqBZR862ZQjTIa724wGPWQqZrofaPI/kUsf53TBG0I0D+hQ1qyNtllbNzaW+PDPHHUI6/65Mg==", - "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.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.6.0.tgz", - "integrity": "sha512-4HX+VOhNjXHZyGzER6E/LVI2i6lf9ejYeWD6l4g50AdmimyuStKc39kvKf1bXWQMg7QNVh+uC7dYwtaZ02IXeg==", - "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.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/rlp": "^5.6.0", - "@ethersproject/signing-key": "^5.6.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.6.0.tgz", - "integrity": "sha512-tig9x0Qmh8qbo1w8/6tmtyrm/QQRviBh389EQ+d8fP4wDsBrJBf08oZfoiz1/uenKK9M78yAP4PoR7SsVoTjsw==", - "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/bignumber": "^5.6.0", - "@ethersproject/constants": "^5.6.0", - "@ethersproject/logger": "^5.6.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.6.0.tgz", - "integrity": "sha512-qMlSdOSTyp0MBeE+r7SUhr1jjDlC1zAXB8VD84hCnpijPQiSNbxr6GdiLXxpUs8UKzkDiNYYC5DRI3MZr+n+tg==", - "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/abstract-provider": "^5.6.0", - "@ethersproject/abstract-signer": "^5.6.0", - "@ethersproject/address": "^5.6.0", - "@ethersproject/bignumber": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/hash": "^5.6.0", - "@ethersproject/hdnode": "^5.6.0", - "@ethersproject/json-wallets": "^5.6.0", - "@ethersproject/keccak256": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/random": "^5.6.0", - "@ethersproject/signing-key": "^5.6.0", - "@ethersproject/transactions": "^5.6.0", - "@ethersproject/wordlists": "^5.6.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.6.0.tgz", - "integrity": "sha512-G/XHj0hV1FxI2teHRfCGvfBUHFmU+YOSbCxlAMqJklxSa7QMiHFQfAxvwY2PFqgvdkxEKwRNr/eCjfAPEm2Ctg==", - "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/base64": "^5.6.0", - "@ethersproject/bytes": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.6.0.tgz", - "integrity": "sha512-q0bxNBfIX3fUuAo9OmjlEYxP40IB8ABgb7HjEZCL5IKubzV3j30CWi2rqQbjTS2HfoyQbfINoKcTVWP4ejwR7Q==", - "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.6.0", - "@ethersproject/hash": "^5.6.0", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/properties": "^5.6.0", - "@ethersproject/strings": "^5.6.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/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@iden3/bigarray": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/@iden3/bigarray/-/bigarray-0.0.2.tgz", - "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==", - "dev": true, - "license": "GPL-3.0" - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.0.tgz", - "integrity": "sha512-LczOjjxY4A7XYloxzyxJIHONELmUxVZncpOLoClpEcTiebiVdM46KRPYXGuULro9oNNR2xdVx3yoKiQjdfWmoA==", - "dev": true, - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.5.5.tgz", - "integrity": "sha512-sZ1W6gQzYnu45wPrWx8D3kwI2/U29VYTx9OjbDAd7jwRItJ0cSTMPRL/C8AWZFn9kWFLQGqEXVEE86w4Z8LpIQ==", - "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", - "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", - "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", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.4.1.tgz", - "integrity": "sha512-NgrMo2rI9r28uidumvd+K2/AJLdxtXsUlJr3hj/pM6S1FCd/HiWaLeLa/cjCVPcE2u1rYAa3W6UFxLCB7S5Dhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.4.1", - "@nomicfoundation/edr-darwin-x64": "0.4.1", - "@nomicfoundation/edr-linux-arm64-gnu": "0.4.1", - "@nomicfoundation/edr-linux-arm64-musl": "0.4.1", - "@nomicfoundation/edr-linux-x64-gnu": "0.4.1", - "@nomicfoundation/edr-linux-x64-musl": "0.4.1", - "@nomicfoundation/edr-win32-x64-msvc": "0.4.1" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.1.tgz", - "integrity": "sha512-XuiUUnWAVNw7JYv7nRqDWfpBm21HOxCRBQ8lQnRnmiets9Ss2X5Ul9mvBheIPh/D0wBzwJ8TRtsSrorpwE79cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.1.tgz", - "integrity": "sha512-N1MfJqEX5ixaXlyyrHnaYxzwIT27Nc/jUgLI7ts4/9kRvPTvyZRYmXS1ciKhmUFr/WvFckTCix2RJbZoGGtX7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.1.tgz", - "integrity": "sha512-bSPOfmcFjJwDgWOV5kgZHeqg2OWu1cINrHSGjig0aVHehjcoX4Sgayrj6fyAxcOV5NQKA6WcyTFll6NrCxzWRA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.1.tgz", - "integrity": "sha512-F/+DgOdeBFQDrk+SX4aFffJFBgJfd75ZtE2mjcWNAh/qWiS7NfUxdQX/5OvNo/H6EY4a+3bZH6Bgzqg4mEWvMw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.1.tgz", - "integrity": "sha512-POHhTWczIXCPhzKtY0Vt/l+VCqqCx5gNR5ErwSrNnLz/arfQobZFAU+nc61BX3Jch82TW8b3AbfGI73Kh7gO0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.1.tgz", - "integrity": "sha512-uu8oNp4Ozg3H1x1We0FF+rwXfFiAvsOm5GQ+OBx9YYOXnfDPWqguQfGIkhrti9GD0iYhfQ/WOG5wvp0IzzgGSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.1.tgz", - "integrity": "sha512-PaZHFw455z89ZiKYNTnKu+/TiVZVRI+mRJsbRTe2N0VlYfUBS1o2gdXBM12oP1t198HR7xQwEPPAslTFxGBqHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "dev": true, - "license": "MPL-2.0", - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz", - "integrity": "sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ==", - "dev": true, - "license": "MIT", - "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.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers/node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz", - "integrity": "sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz", - "integrity": "sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@ethersproject/address": "^5.0.2", - "cbor": "^8.1.0", - "chalk": "^2.4.2", - "debug": "^4.1.1", - "lodash.clonedeep": "^4.5.0", - "semver": "^6.3.0", - "table": "^6.8.0", - "undici": "^5.14.0" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", - "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==", - "license": "MIT" - }, - "node_modules/@openzeppelin/contracts-upgradeable": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", - "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==", - "license": "MIT" - }, - "node_modules/@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "license": "LGPL-3.0-or-later", - "dependencies": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "license": "LGPL-3.0-or-later", - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "license": "LGPL-3.0-or-later", - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - } - }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "license": "LGPL-3.0-or-later", - "dependencies": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@scure/base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.0.0.tgz", - "integrity": "sha512-gIVaYhUsy+9s58m/ETjSJVKHhKTBMmcRb9cEV5/5dwvfDlfORjKrFsDeDHWRrm6RjcPvCLZFwGJjAjLj1gg4HA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT" - }, - "node_modules/@scure/bip32": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.0.1.tgz", - "integrity": "sha512-AU88KKTpQ+YpTLoicZ/qhFhRRIo96/tlb+8YmDDHR9yiKVjSsFZiefJO4wjS2PMTkz5/oIcw84uAq/8pleQURA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.0.0", - "@noble/secp256k1": "~1.5.2", - "@scure/base": "~1.0.0" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@scure/bip39": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.0.0.tgz", - "integrity": "sha512-HrtcikLbd58PWOkl02k9V6nXWQyoa7A0+Ek9VF7z17DDk9XZAFUcIdqfh0jJXLypmizc5/8P6OxoUeKliiWv4w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.0.0", - "@scure/base": "~1.0.0" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", - "dev": true, - "license": "MIT" - }, - "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/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/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/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/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/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/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.1.tgz", - "integrity": "sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", - "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", - "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", - "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", - "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", - "dev": true, - "license": "MIT" - }, - "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", - "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", - "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", - "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/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@typechain/hardhat/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/bn.js/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", - "dev": true, - "license": "MIT" - }, - "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", - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/chai-as-promised/node_modules/@types/chai": { - "version": "4.3.12", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.12.tgz", - "integrity": "sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==", - "dev": true, - "license": "MIT" - }, - "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", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/concat-stream/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/edit-json-file": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@types/edit-json-file/-/edit-json-file-1.7.0.tgz", - "integrity": "sha512-yZrbGD4Qp92s6xU80MWBdz9vJE8k8EbO+gLWYb4W1UL9WYVUMOtUr5zvKlKgbcc2veYmFLO9dPnYA9Mxul0lOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/set-value": "*" - } - }, - "node_modules/@types/edit-json-file/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "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", - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mkdirp/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "20.11.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.27.tgz", - "integrity": "sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-fetch/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/pbkdf2/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/resolve/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/secp256k1/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/set-value": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/set-value/-/set-value-4.0.1.tgz", - "integrity": "sha512-mP/CLy6pdrhsDVrz1+Yp5Ly6Tcel2IAEejhyI5NxY6WnBUdWN+AAfGa0HHsdgCdsPWWcd/4D5J2X2TrRYcYRag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.2.0.tgz", - "integrity": "sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/type-utils": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.2.0.tgz", - "integrity": "sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.2.0.tgz", - "integrity": "sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.2.0.tgz", - "integrity": "sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.2.0", - "@typescript-eslint/utils": "7.2.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.2.0.tgz", - "integrity": "sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.2.0.tgz", - "integrity": "sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/visitor-keys": "7.2.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.2.0.tgz", - "integrity": "sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.2.0", - "@typescript-eslint/types": "7.2.0", - "@typescript-eslint/typescript-estree": "7.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.2.0.tgz", - "integrity": "sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.2.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true, - "license": "ISC" - }, - "node_modules/abstract-leveldown": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz", - "integrity": "sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "license": "MIT", - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=", - "dev": true, - "license": "MIT" - }, - "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": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.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": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "license": "BSD-3-Clause OR MIT", - "optional": 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.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "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-escapes/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" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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/antlr4": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.7.1.tgz", - "integrity": "sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ==", - "dev": true, - "license": "BSD" - }, - "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" - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "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" - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-back": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-1.0.4.tgz", - "integrity": "sha1-ZEun8JX3/898Q7Xw3DnTwfA8Bjs=", - "dev": true, - "license": "MIT", - "dependencies": { - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "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": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "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", - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-parents": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/ast-parents/-/ast-parents-0.0.1.tgz", - "integrity": "sha1-UI/Q8F0MSHddnszaLhdEIyYejdM=", - "dev": true, - "license": "MIT" - }, - "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", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "license": "MIT" - }, - "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", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/b4a": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.1.tgz", - "integrity": "sha512-AsKjNhz72yxteo/0EtQEiwkMUgk/tGmycXlbG4g3Ard2/ULtNLUykGOkeK0egmN27h0xMAhb76jYccW+XTBExA==", - "dev": true, - "license": "ISC" - }, - "node_modules/babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, - "node_modules/babel-code-frame/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-code-frame/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-code-frame/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-generator": "^6.26.0", - "babel-helpers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-register": "^6.26.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "convert-source-map": "^1.5.1", - "debug": "^2.6.9", - "json5": "^0.5.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.4", - "path-is-absolute": "^1.0.1", - "private": "^0.1.8", - "slash": "^1.0.0", - "source-map": "^0.5.7" - } - }, - "node_modules/babel-core/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-core/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-core/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-core/node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" - } - }, - "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-define-map": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.24.1", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-types": "^6.26.0" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-systemjs": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-hoist-variables": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-replace-supers": "^6.24.1", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-regex": "^6.24.1", - "babel-runtime": "^6.22.0", - "regexpu-core": "^2.0.0" - } - }, - "node_modules/babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.22.0" - } - }, - "node_modules/babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-transform": "^0.10.0" - } - }, - "node_modules/babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, - "node_modules/babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.22.0", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.23.0", - "babel-plugin-transform-es2015-classes": "^6.23.0", - "babel-plugin-transform-es2015-computed-properties": "^6.22.0", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.22.0", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.22.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", - "babel-plugin-transform-es2015-modules-umd": "^6.23.0", - "babel-plugin-transform-es2015-object-super": "^6.22.0", - "babel-plugin-transform-es2015-parameters": "^6.23.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", - "babel-plugin-transform-exponentiation-operator": "^6.22.0", - "babel-plugin-transform-regenerator": "^6.22.0", - "browserslist": "^3.2.6", - "invariant": "^2.2.2", - "semver": "^5.3.0" - } - }, - "node_modules/babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-core": "^6.26.0", - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.17.4", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.15" - } - }, - "node_modules/babel-register/node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "dev": true, - "license": "MIT", - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - } - }, - "node_modules/babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" - } - }, - "node_modules/babel-traverse/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/babel-traverse/node_modules/globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/babel-traverse/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - } - }, - "node_modules/babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-core": "^6.0.14", - "object-assign": "^4.0.0" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "license": "MIT", - "bin": { - "babylon": "bin/babylon.js" - } - }, - "node_modules/backoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.5.0.tgz", - "integrity": "sha1-9hbtqdPktmuMp/ynn2lXIsX44m8=", - "dev": true, - "license": "MIT", - "dependencies": { - "precond": "0.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "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": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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" - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "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" - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/bignumber.js": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.2.tgz", - "integrity": "sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip39": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", - "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", - "dev": true, - "license": "ISC", - "dependencies": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" - } - }, - "node_modules/blake-hash": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/blake-hash/-/blake-hash-1.1.1.tgz", - "integrity": "sha512-V93H+FEJuXXZi1eEsMtbcBFP9oL5Ept7SLw3cbXYlPC3nocm9Fr4m18ZhbhdJrZVS9J/Z0oNE4L3oDZvmorHNA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.2.1", - "inherits": "^2.0.3", - "nan": "^2.2.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/blake2b": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/blake2b/-/blake2b-2.1.4.tgz", - "integrity": "sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==", - "dev": true, - "license": "ISC", - "dependencies": { - "blake2b-wasm": "^2.4.0", - "nanoassert": "^2.0.0" - } - }, - "node_modules/blake2b-wasm": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", - "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.0.1", - "nanoassert": "^2.0.0" - } - }, - "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" - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "license": "MIT" - }, - "node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/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", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/body-parser/node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "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/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/boxen/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/boxen/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/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/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "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", - "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/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-rsa/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/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": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "dev": true, - "license": "MIT", - "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", - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "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-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true, - "license": "MIT" - }, - "node_modules/bufferutil": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.6.tgz", - "integrity": "sha512-jduaYOYtnio4aIAyc6UbvPCVcgq7nYpVnucyxr6eCYg/Woad9Hf/oxxBRDnGGjPfjUm6j5O/uBWhIu4iLebFaw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/builtins/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/builtins/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "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/bytewise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", - "integrity": "sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4=", - "dev": true, - "license": "MIT", - "dependencies": { - "bytewise-core": "^1.2.2", - "typewise": "^1.0.3" - } - }, - "node_modules/bytewise-core": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", - "integrity": "sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI=", - "dev": true, - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cachedown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cachedown/-/cachedown-1.0.0.tgz", - "integrity": "sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU=", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^2.4.1", - "lru-cache": "^3.2.0" - } - }, - "node_modules/cachedown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/cachedown/node_modules/lru-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", - "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", - "dev": true, - "license": "ISC", - "dependencies": { - "pseudomap": "^1.0.1" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001332", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", - "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "license": "Apache-2.0" - }, - "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", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, - "license": "WTFPL", - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 5" - } - }, - "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", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/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", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/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", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "license": "MIT" - }, - "node_modules/chalk/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", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", - "dev": true, - "license": "ISC", - "dependencies": { - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true, - "license": "ISC", - "optional": true - }, - "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/cids": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.7.5.tgz", - "integrity": "sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "^1.0.0", - "multihashes": "~0.4.15" - }, - "engines": { - "node": ">=4.0.0", - "npm": ">=3.0.0" - } - }, - "node_modules/cids/node_modules/multibase": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.1.tgz", - "integrity": "sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/cids/node_modules/multicodec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-1.0.4.tgz", - "integrity": "sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.6.0", - "varint": "^5.0.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/circom": { - "version": "0.5.46", - "resolved": "https://registry.npmjs.org/circom/-/circom-0.5.46.tgz", - "integrity": "sha512-clvfqJudyBlHAubTu4dKY04dVgst8OxGS7SAxdbXKbGO2c6XGOzP2TSygNUmYHanLDvUgJpOqQYe/AkLt9x/1g==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "chai": "^4.2.0", - "circom_runtime": "0.1.12", - "fastfile": "0.0.18", - "ffiasm": "0.1.1", - "ffjavascript": "0.2.22", - "ffwasm": "0.0.7", - "fnv-plus": "^1.3.1", - "r1csfile": "0.0.16", - "tmp-promise": "^2.0.2", - "wasmbuilder": "0.0.10" - }, - "bin": { - "circom": "cli.js" - } - }, - "node_modules/circom_runtime": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.12.tgz", - "integrity": "sha512-R+QT9HS9w71cmGmWIn+PSyD3aHyR5JZBiVvxOjCfn12wwnpuFwBjdMG7he+v8h/oQD1mDRAu2KrBeL4mAt5s4A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ffjavascript": "0.2.34", - "fnv-plus": "^1.3.1" - }, - "bin": { - "calcwit": "calcwit.js" - } - }, - "node_modules/circom_runtime/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/circom_runtime/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/circom_runtime/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/circom_runtime/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", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/circom_runtime/node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/circom_runtime/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/circom_runtime/node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/circom_runtime/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/circom_runtime/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/circom_runtime/node_modules/ffjavascript": { - "version": "0.2.34", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.34.tgz", - "integrity": "sha512-fq/qfJluC4spiOD1lp5jfckZVnS0o0kI5eKXVLw7UKwIwbNr+NBMBveBVcidSfMizF87T6wb7NBtLSdckQiAnQ==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "mocha": "^8.2.1", - "wasmcurves": "0.0.14", - "worker-threads": "^1.0.0" - } - }, - "node_modules/circom_runtime/node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "license": "ISC", - "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/circom_runtime/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/circom_runtime/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/circom_runtime/node_modules/js-yaml": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz", - "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/circom_runtime/node_modules/log-symbols": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", - "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/circom_runtime/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/circom_runtime/node_modules/mocha": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz", - "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.1", - "debug": "4.3.1", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.1.6", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.0.0", - "log-symbols": "4.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "nanoid": "3.1.20", - "serialize-javascript": "5.0.1", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.1.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 10.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/circom_runtime/node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/circom_runtime/node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/circom_runtime/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": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/circom_runtime/node_modules/workerpool": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz", - "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/circom_runtime/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/circom_runtime/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/circom_runtime/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/circom_runtime/node_modules/yargs/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==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/circomlib": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/circomlib/-/circomlib-0.5.5.tgz", - "integrity": "sha512-5FUw6AnEw+65suAgEQCucVepxOm96wnIo89vBldeX1DjeSV8zpP88Tje3BLBTLz0C1U6SkRnwqULrtiA5IVtZQ==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "blake-hash": "^1.1.0", - "blake2b": "^2.1.3", - "circom": "0.5.33", - "ffjavascript": "0.2.38", - "web3-utils": "^1.3.0" - } - }, - "node_modules/circomlib/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/circomlib/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/circomlib/node_modules/circom": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/circom/-/circom-0.5.33.tgz", - "integrity": "sha512-UdL8fr6GckhQ4VoWjIvuYwCHneJe8z/AyJpDxgKLyuaX51ijd4gBP6jlwHDbQJsha2aU2GR9qgDsxd0jfari1Q==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "chai": "^4.2.0", - "circom_runtime": "0.1.8", - "fastfile": "0.0.18", - "ffiasm": "0.1.1", - "ffjavascript": "0.2.22", - "ffwasm": "0.0.7", - "fnv-plus": "^1.3.1", - "r1csfile": "0.0.16", - "tmp-promise": "^2.0.2", - "wasmbuilder": "0.0.10" - }, - "bin": { - "circom": "cli.js" - } - }, - "node_modules/circomlib/node_modules/circom_runtime": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.8.tgz", - "integrity": "sha512-5ZmzCyidkNPb1zZsJGRXTuWcJ6kW6+gRBtHgf2tFqTh5dUyWVVPH0Zg7AsU2ijPr1AmYZUlme0yORUZK5HrjOA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "ffjavascript": "0.2.10", - "fnv-plus": "^1.3.1" - }, - "bin": { - "calcwit": "calcwit.js" - } - }, - "node_modules/circomlib/node_modules/circom_runtime/node_modules/ffjavascript": { - "version": "0.2.10", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.10.tgz", - "integrity": "sha512-GQI6gHYYG5/iD4Kt3VzezzK7fARJzP0zkc82V/+JAdjfeKBXhDSo5rpKFuK3cDcrdW0Fu2emuYNMEAuFqhEQvQ==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "wasmcurves": "0.0.5", - "worker-threads": "^1.0.0" - } - }, - "node_modules/circomlib/node_modules/circom_runtime/node_modules/wasmcurves": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.5.tgz", - "integrity": "sha512-BmI4GXLjLawGg2YkvHa8zRsnWec+d1uwoxE+Iov8cqOpDL7GA5XO2pk2yuDbXHMzwIug2exnKot3baRZ86R0pA==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.42", - "blakejs": "^1.1.0" - } - }, - "node_modules/circomlib/node_modules/circom/node_modules/ffjavascript": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.22.tgz", - "integrity": "sha512-EsVqap2Txm17bKW0z/jXCX3M7rQ++nQUAJY8alWDpyhjRj90xjl6GLeVSKZQ8rOFDQ/SFFXcEB8w9X8Boxid+w==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "wasmcurves": "0.0.12", - "worker-threads": "^1.0.0" - } - }, - "node_modules/circomlib/node_modules/circom/node_modules/wasmcurves": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.12.tgz", - "integrity": "sha512-1Jl9mkatyHSNj80ILjf85SZUNuZQBCkTjJlhzqHnZQXUmIimCIWkugaVaYNjozLs1Gun4h/keZe1MBeBN0sRpg==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.42", - "blakejs": "^1.1.0" - } - }, - "node_modules/circomlib/node_modules/ethereumjs-util": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", - "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", - "dev": true, - "license": "MPL-2.0", - "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/circomlib/node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT" - }, - "node_modules/circomlib/node_modules/ffjavascript": { - "version": "0.2.38", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.38.tgz", - "integrity": "sha512-b4dobcci6QxxUvNYFCHw2ONhXwtgSHCzqxbH6c7ipWMOzyoG+MPRMZgAqnUREYX8UC6zqA7AiRmiIB76nxt2TQ==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "wasmcurves": "0.0.14", - "web-worker": "^1.0.0" - } - }, - "node_modules/circomlib/node_modules/web3-utils": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.7.3.tgz", - "integrity": "sha512-g6nQgvb/bUpVUIxJE+ezVN+rYwYmlFyMvMIRSuqpi1dk6ApDD00YNArrk7sPcZnjvxOJ76813Xs2vIN2rgh4lg==", - "dev": true, - "license": "LGPL-3.0", - "dependencies": { - "bn.js": "^4.11.9", - "ethereum-bloom-filters": "^1.0.6", - "ethereumjs-util": "^7.1.0", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/class-is": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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", - "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", - "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", - "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": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cli-truncate/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" - }, - "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/cli-truncate/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", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true, - "license": "ISC" - }, - "node_modules/cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/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", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui/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", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "license": "MIT", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.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/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "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", - "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", - "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", - "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-args/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", - "engines": { - "node": ">=6" - } - }, - "node_modules/command-line-args/node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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", - "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/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", - "engines": { - "node": ">=8" - } - }, - "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", - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz", - "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "license": "MIT" - }, - "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", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-hash": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/content-hash/-/content-hash-2.5.2.tgz", - "integrity": "sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "cids": "^0.7.1", - "multicodec": "^0.5.5", - "multihashes": "^0.4.15" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/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" - }, - "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/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/cookiejar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", - "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/core-js-pure": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.0.tgz", - "integrity": "sha512-ylOC9nVy0ak1N+fPIZj00umoZHgUVqmucklP5RT5N+vJof38klKn8Ze6KGyvchdClvEBr6LcQqJpI216LUMqYA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "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" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "license": "MIT", - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "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", - "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", - "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" - }, - "node_modules/cross-fetch": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.6.tgz", - "integrity": "sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "^2.6.7", - "whatwg-fetch": "^2.0.4" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "license": "ISC", - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "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" - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/deferred-leveldown": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz", - "integrity": "sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~5.0.0", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true, - "license": "MIT" - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "license": "MIT", - "dependencies": { - "repeating": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "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, - "dependencies": { - "heap": ">= 0.2.0" - } - }, - "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", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==", - "dev": true - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" - } - }, - "node_modules/dotignore": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", - "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.4" - }, - "bin": { - "ignored": "bin/ignored" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true, - "license": "BSD-3-Clause", - "optional": true - }, - "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" - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/edit-json-file": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/edit-json-file/-/edit-json-file-1.7.0.tgz", - "integrity": "sha512-eIkLJ9i4ija7b2TbaLHy3scyjWFLzwM2Wa6kHbV4ppVLcCqn7FzqnO1vmCG3dLrkd+teWE3mvACfv166mO0VZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-value": "^1.0.12", - "iterate-object": "^1.3.4", - "r-json": "^1.2.10", - "set-value": "^4.1.0", - "w-json": "^1.3.10" - } - }, - "node_modules/edit-json-file/node_modules/set-value": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz", - "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/jonschlinkert", - "https://paypal.me/jonathanschlinkert", - "https://jonschlinkert.dev/sponsor" - ], - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "is-primitive": "^3.0.1" - }, - "engines": { - "node": ">=11.0" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.111", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.111.tgz", - "integrity": "sha512-/s3+fwhKf1YK4k7btOImOzCQLpUjS6MaPf0ODTNuT4eTM1Bg4itBpLkydhOzJmpmH6Z9eXFyuuK5czsmzRzwtw==", - "dev": true, - "license": "ISC" - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "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/emoji-regex": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.1.0.tgz", - "integrity": "sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding-down": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-5.0.4.tgz", - "integrity": "sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^5.0.0", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.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/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", - "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-abstract/node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.60", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.60.tgz", - "integrity": "sha512-jpKNXIt60htYG59/9FGf2PYT3pwMpnEbNKysU+k/4FGwyGtMotOvcZOuW+EmXXYASRqYSXQfGL5cVIthOTgbkg==", - "dev": true, - "hasInstallScript": true, - "license": "ISC", - "dependencies": { - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.3", - "next-tick": "^1.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "license": "MIT", - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "license": "ISC", - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true, - "license": "MIT", - "optional": true - }, - "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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "license": "BSD-2-Clause", - "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/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-config-standard": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", - "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", - "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", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "eslint": "^8.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", - "eslint-plugin-promise": "^6.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-es-x": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", - "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-es/node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint-plugin-n/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-n/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-promise": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", - "integrity": "sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/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/eslint/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/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/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/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/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", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/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": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.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", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eth-block-tracker": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz", - "integrity": "sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug==", - "dev": true, - "license": "MIT", - "dependencies": { - "eth-query": "^2.1.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.3", - "ethjs-util": "^0.1.3", - "json-rpc-engine": "^3.6.0", - "pify": "^2.3.0", - "tape": "^4.6.3" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha1-IprEbsqG1S4MmR58sq74P/D2i88=", - "dev": true, - "license": "ISC", - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.25.tgz", - "integrity": "sha512-1fRgyE4xUB8SoqLgN3eDfpDfwEfRxh2Sz1b7wzFbyQA+9TekMmvSjjoRu9SKcSVyK+vLkLIsVbJDsTWjw195OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.0.0-beta.146", - "@solidity-parser/parser": "^0.14.0", - "cli-table3": "^0.5.0", - "colors": "1.4.0", - "ethereum-cryptography": "^1.0.3", - "ethers": "^4.0.40", - "fs-readdir-recursive": "^1.1.0", - "lodash": "^4.17.14", - "markdown-table": "^1.1.3", - "mocha": "^7.1.1", - "req-cwd": "^2.0.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "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.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/debug/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/eth-gas-reporter/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/eth-gas-reporter/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==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz", - "integrity": "sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@scure/bip32": "1.0.1", - "@scure/bip39": "1.0.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "4.0.49", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-4.0.49.tgz", - "integrity": "sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "aes-js": "3.0.0", - "bn.js": "^4.11.9", - "elliptic": "6.5.4", - "hash.js": "1.1.3", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.4", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "license": "ISC", - "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": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "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", - "engines": { - "node": ">=4" - } - }, - "node_modules/eth-gas-reporter/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eth-gas-reporter/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eth-gas-reporter/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/eth-gas-reporter/node_modules/mocha": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", - "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.5", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/eth-gas-reporter/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eth-gas-reporter/node_modules/scrypt-js": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.4.tgz", - "integrity": "sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-gas-reporter/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-gas-reporter/node_modules/uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=", - "dev": true - }, - "node_modules/eth-gas-reporter/node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eth-json-rpc-infura": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.1.tgz", - "integrity": "sha512-W7zR4DZvyTn23Bxc0EWsq4XGDdD63+XPUCEhV2zQvQGavDVC4ZpFDK4k99qN7bd7/fjj37+rxmuBOBeIqCA5Mw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-fetch": "^2.1.1", - "eth-json-rpc-middleware": "^1.5.0", - "json-rpc-engine": "^3.4.0", - "json-rpc-error": "^2.0.0" - } - }, - "node_modules/eth-json-rpc-middleware": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz", - "integrity": "sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "async": "^2.5.0", - "eth-query": "^2.1.2", - "eth-tx-summary": "^3.1.2", - "ethereumjs-block": "^1.6.0", - "ethereumjs-tx": "^1.3.3", - "ethereumjs-util": "^5.1.2", - "ethereumjs-vm": "^2.1.0", - "fetch-ponyfill": "^4.0.0", - "json-rpc-engine": "^3.6.0", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "tape": "^4.6.3" - } - }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-json-rpc-middleware/node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/eth-lib": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.8.tgz", - "integrity": "sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/eth-query": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/eth-query/-/eth-query-2.1.2.tgz", - "integrity": "sha1-1nQdkAAQa1FRDHLbktY2VFam2l4=", - "dev": true, - "license": "ISC", - "dependencies": { - "json-rpc-random-id": "^1.0.0", - "xtend": "^4.0.1" - } - }, - "node_modules/eth-sig-util": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-3.0.0.tgz", - "integrity": "sha512-4eFkMOhpGbTxBQ3AMzVf0haUX2uTur7DpWiHzWyTURa28BVJJtOkcb9Ok5TV0YvEPG61DODPW7ZUATbJTslioQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "buffer": "^5.2.1", - "elliptic": "^6.4.0", - "ethereumjs-abi": "0.6.5", - "ethereumjs-util": "^5.1.1", - "tweetnacl": "^1.0.0", - "tweetnacl-util": "^0.15.0" - } - }, - "node_modules/eth-sig-util/node_modules/ethereumjs-abi": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz", - "integrity": "sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE=", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.10.0", - "ethereumjs-util": "^4.3.0" - } - }, - "node_modules/eth-sig-util/node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.1.tgz", - "integrity": "sha512-WrckOZ7uBnei4+AKimpuF1B3Fv25OmoRgmYCpGsP7u8PFxXAmAgiJSYT2kRWnt6fVIlKaQlZvuwXp7PIrmn3/w==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.8.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.0.0" - } - }, - "node_modules/eth-sig-util/node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/eth-tx-summary": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz", - "integrity": "sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg==", - "dev": true, - "license": "ISC", - "dependencies": { - "async": "^2.1.2", - "clone": "^2.0.0", - "concat-stream": "^1.5.1", - "end-of-stream": "^1.1.0", - "eth-query": "^2.0.2", - "ethereumjs-block": "^1.4.1", - "ethereumjs-tx": "^1.1.1", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "^2.6.0", - "through2": "^2.0.3" - } - }, - "node_modules/eth-tx-summary/node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true, - "license": "MIT" - }, - "node_modules/eth-tx-summary/node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethashjs": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ethashjs/-/ethashjs-0.0.8.tgz", - "integrity": "sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "buffer-xor": "^2.0.1", - "ethereumjs-util": "^7.0.2", - "miller-rabin": "^4.0.0" - } - }, - "node_modules/ethashjs/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethashjs/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/ethashjs/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT" - }, - "node_modules/ethashjs/node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethashjs/node_modules/ethereumjs-util": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.4.tgz", - "integrity": "sha512-p6KmuPCX4mZIqsQzXfmSx9Y0l2hqf+VkAiwSisW3UKUFdk8ZkAt+AYaor83z2nSi6CU2zSsXMlD80hAbNEGM0A==", - "dev": true, - "license": "MPL-2.0", - "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/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=", - "dev": true, - "license": "MIT" - }, - "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", - "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/ethereum-waffle": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-3.4.4.tgz", - "integrity": "sha512-PA9+jCjw4WC3Oc5ocSMBj5sXvueWQeAbvCA+hUlb6oFgwwKyq5ka3bWQ7QZcjzIX+TdFkxP4IbFmoY2D8Dkj9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethereum-waffle/chai": "^3.4.4", - "@ethereum-waffle/compiler": "^3.4.4", - "@ethereum-waffle/mock-contract": "^3.4.4", - "@ethereum-waffle/provider": "^3.4.4", - "ethers": "^5.0.1" - }, - "bin": { - "waffle": "bin/waffle" - }, - "engines": { - "node": ">=10.0" - } - }, - "node_modules/ethereum-waffle/node_modules/ethers": { - "version": "5.6.4", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.4.tgz", - "integrity": "sha512-62UIfxAQXdf67TeeOaoOoPctm5hUlYgfd0iW3wxfj7qRYKDcvvy0f+sJ3W2/Pyx77R8dblvejA8jokj+lS+ATQ==", - "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/abi": "5.6.1", - "@ethersproject/abstract-provider": "5.6.0", - "@ethersproject/abstract-signer": "5.6.0", - "@ethersproject/address": "5.6.0", - "@ethersproject/base64": "5.6.0", - "@ethersproject/basex": "5.6.0", - "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.1", - "@ethersproject/constants": "5.6.0", - "@ethersproject/contracts": "5.6.0", - "@ethersproject/hash": "5.6.0", - "@ethersproject/hdnode": "5.6.0", - "@ethersproject/json-wallets": "5.6.0", - "@ethersproject/keccak256": "5.6.0", - "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.2", - "@ethersproject/pbkdf2": "5.6.0", - "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.4", - "@ethersproject/random": "5.6.0", - "@ethersproject/rlp": "5.6.0", - "@ethersproject/sha2": "5.6.0", - "@ethersproject/signing-key": "5.6.0", - "@ethersproject/solidity": "5.6.0", - "@ethersproject/strings": "5.6.0", - "@ethersproject/transactions": "5.6.0", - "@ethersproject/units": "5.6.0", - "@ethersproject/wallet": "5.6.0", - "@ethersproject/web": "5.6.0", - "@ethersproject/wordlists": "5.6.0" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "git+ssh://git@github.com/ethereumjs/ethereumjs-abi.git#ee3994657fa7a427238e6ba92a84d0b529bbcde0", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-account": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz", - "integrity": "sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^6.0.0", - "rlp": "^2.2.1", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-block": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz", - "integrity": "sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.1", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-block/node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-blockchain": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz", - "integrity": "sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.6.1", - "ethashjs": "~0.0.7", - "ethereumjs-block": "~2.2.2", - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.1.0", - "flow-stoplight": "^1.0.0", - "level-mem": "^3.0.1", - "lru-cache": "^5.1.1", - "rlp": "^2.2.2", - "semaphore": "^1.1.0" - } - }, - "node_modules/ethereumjs-blockchain/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ethereumjs-tx": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz", - "integrity": "sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereum-common": "^0.0.18", - "ethereumjs-util": "^5.0.0" - } - }, - "node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz", - "integrity": "sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "ethereumjs-account": "^2.0.3", - "ethereumjs-block": "~2.2.0", - "ethereumjs-common": "^1.1.0", - "ethereumjs-util": "^6.0.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-util": "^5.0.0", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-account/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ethereumjs-vm/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-wallet": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/ethereumjs-wallet/-/ethereumjs-wallet-0.6.5.tgz", - "integrity": "sha512-MDwjwB9VQVnpp/Dc1XzA6J1a3wgHQ4hSvA1uWNatdpOrtCbPVuQSKSyRnjLvS0a+KKMw2pvQ9Ybqpb3+eW8oNA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "aes-js": "^3.1.1", - "bs58check": "^2.1.2", - "ethereum-cryptography": "^0.1.3", - "ethereumjs-util": "^6.0.0", - "randombytes": "^2.0.6", - "safe-buffer": "^5.1.2", - "scryptsy": "^1.2.1", - "utf8": "^3.0.0", - "uuid": "^3.3.2" - } - }, - "node_modules/ethereumjs-wallet/node_modules/aes-js": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.1.2.tgz", - "integrity": "sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/ethereumjs-wallet/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethers": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.11.1.tgz", - "integrity": "sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "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", - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "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", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/ethers/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" - }, - "node_modules/ethers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "license": "0BSD" - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "dev": true, - "license": "MIT", - "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": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true, - "license": "MIT" - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "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", - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/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", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/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": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "node_modules/express": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", - "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.19.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.2", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.7", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "license": "ISC", - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true, - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", - "dev": true, - "license": "ISC", - "dependencies": { - "checkpoint-store": "^1.1.0" - } - }, - "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" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "license": "MIT", - "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.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true, - "license": "MIT" - }, - "node_modules/fastfile": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/fastfile/-/fastfile-0.0.18.tgz", - "integrity": "sha512-q03PTKc+wptis4WmuFOwPNQx2p5myFUrl/dMgRlW9mymc1Egyc14JPHgiGnWK+sJ0+dBl2Vwtfh5GfSQltYOpw==", - "dev": true, - "license": "GPL-3.0" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fetch-ponyfill": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz", - "integrity": "sha1-rjzl9zLGReq4fkroeTQUcJsjmJM=", - "dev": true, - "license": "MIT", - "dependencies": { - "node-fetch": "~1.7.1" - } - }, - "node_modules/fetch-ponyfill/node_modules/node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "node_modules/ffiasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ffiasm/-/ffiasm-0.1.1.tgz", - "integrity": "sha512-irMMHiR9JJ7BVBrAhtliUawxVdPYSdyl81taUYJ4C1mJ0iw2ueThE/qtr0J8B83tsIY8HJvh0lg5F+6ClK4xpA==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "ejs": "^3.0.1", - "yargs": "^15.3.1" - }, - "bin": { - "buildzqfield": "src/buildzqfield.js" - } - }, - "node_modules/ffiasm/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/ffiasm/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ffiasm/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ffjavascript": { - "version": "0.2.22", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.22.tgz", - "integrity": "sha512-EsVqap2Txm17bKW0z/jXCX3M7rQ++nQUAJY8alWDpyhjRj90xjl6GLeVSKZQ8rOFDQ/SFFXcEB8w9X8Boxid+w==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "wasmcurves": "0.0.12", - "worker-threads": "^1.0.0" - } - }, - "node_modules/ffjavascript/node_modules/wasmcurves": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.12.tgz", - "integrity": "sha512-1Jl9mkatyHSNj80ILjf85SZUNuZQBCkTjJlhzqHnZQXUmIimCIWkugaVaYNjozLs1Gun4h/keZe1MBeBN0sRpg==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.42", - "blakejs": "^1.1.0" - } - }, - "node_modules/ffwasm": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ffwasm/-/ffwasm-0.0.7.tgz", - "integrity": "sha512-17cTLzv7HHAKqZbX8MvHxjSrR0yDdn1sh4TVsTbAvO9e6klhFicnyoVXc/sCuViV/M8g65sCmVrAmoPCZp1YkQ==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48", - "wasmbuilder": "0.0.10" - } - }, - "node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "license": "MIT" - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT", - "optional": true - }, - "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", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-replace/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", - "engines": { - "node": ">=6" - } - }, - "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/find-up/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/find-value": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/find-value/-/find-value-1.0.12.tgz", - "integrity": "sha512-OCpo8LTk8eZ2sdDCwbU2Lc3ivYsdM6yod6jP2jHcNEFcjPhkgH0+POzTIol7xx1LZgtbI5rkO5jqxsG5MWtPjQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "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/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-stoplight": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flow-stoplight/-/flow-stoplight-1.0.0.tgz", - "integrity": "sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s=", - "dev": true, - "license": "ISC" - }, - "node_modules/fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==", - "dev": true, - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "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.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.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/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "license": "MIT", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "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", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "minipass": "^2.6.0" - } - }, - "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" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": 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.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true, - "license": "MIT" - }, - "node_modules/functions-have-names": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.2.tgz", - "integrity": "sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ganache-core": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/ganache-core/-/ganache-core-2.13.2.tgz", - "integrity": "sha512-tIF5cR+ANQz0+3pHWxHjIwHqFXcVo0Mb+kcsNhglNFALcYo49aQpnS9dqHartqPfMFjiHh/qFoD3mYK0d/qGgw==", - "bundleDependencies": [ - "keccak" - ], - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "3.0.0", - "async": "2.6.2", - "bip39": "2.5.0", - "cachedown": "1.0.0", - "clone": "2.1.2", - "debug": "3.2.6", - "encoding-down": "5.0.4", - "eth-sig-util": "3.0.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-account": "3.0.0", - "ethereumjs-block": "2.2.2", - "ethereumjs-common": "1.5.0", - "ethereumjs-tx": "2.1.2", - "ethereumjs-util": "6.2.1", - "ethereumjs-vm": "4.2.0", - "heap": "0.2.6", - "keccak": "3.0.1", - "level-sublevel": "6.6.4", - "levelup": "3.1.1", - "lodash": "4.17.20", - "lru-cache": "5.1.1", - "merkle-patricia-tree": "3.0.0", - "patch-package": "6.2.2", - "seedrandom": "3.0.1", - "source-map-support": "0.5.12", - "tmp": "0.1.0", - "web3-provider-engine": "14.2.1", - "websocket": "1.0.32" - }, - "engines": { - "node": ">=8.9.0" - }, - "optionalDependencies": { - "ethereumjs-wallet": "0.6.5", - "web3": "1.2.11" - } - }, - "node_modules/ganache-core/node_modules/abstract-leveldown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz", - "integrity": "sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache-core/node_modules/async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.11" - } - }, - "node_modules/ganache-core/node_modules/async/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/braces/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/ganache-core/node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/ganache-core/node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-common": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.0.tgz", - "integrity": "sha512-SZOjgK1356hIY7MRj3/ma5qtfr/4B5BL+G4rP/XSMYr2z1H5el4RX5GReYCKmQmYI/nSBmRnwrZ17IfHuG0viQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-tx/node_modules/ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-4.2.0.tgz", - "integrity": "sha512-X6qqZbsY33p5FTuZqCnQ4+lo957iUJMM6Mpa6bL4UW0dxM6WmDSHuI4j/zOp1E2TDKImBGCJA9QPfc08PaNubA==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.1.2", - "async-eventemitter": "^0.2.2", - "core-js-pure": "^3.0.1", - "ethereumjs-account": "^3.0.0", - "ethereumjs-block": "^2.2.2", - "ethereumjs-blockchain": "^4.0.3", - "ethereumjs-common": "^1.5.0", - "ethereumjs-tx": "^2.1.2", - "ethereumjs-util": "^6.2.0", - "fake-merkle-patricia-tree": "^1.0.1", - "functional-red-black-tree": "^1.0.1", - "merkle-patricia-tree": "^2.3.2", - "rustbn.js": "~0.2.0", - "safe-buffer": "^5.1.1", - "util.promisify": "^1.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/ethereumjs-common": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", - "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/level-ws/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/levelup/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "license": "MIT", - "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/ganache-core/node_modules/ethereumjs-vm/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/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", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/ethereumjs-vm/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ganache-core/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/fill-range/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", - "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "fs-extra": "^4.0.3", - "micromatch": "^3.1.4" - } - }, - "node_modules/ganache-core/node_modules/find-yarn-workspace-root/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/ganache-core/node_modules/heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=", - "dev": true - }, - "node_modules/ganache-core/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache-core/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/level-errors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", - "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ganache-core/node_modules/level-iterator-stream/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/level-ws": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-1.0.0.tgz", - "integrity": "sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.2.8", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/level-ws/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "license": "MIT", - "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/ganache-core/node_modules/level-ws/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" - }, - "node_modules/ganache-core/node_modules/level-ws/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", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ganache-core/node_modules/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz", - "integrity": "sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.6.1", - "ethereumjs-util": "^5.2.0", - "level-mem": "^3.0.1", - "level-ws": "^1.0.0", - "readable-stream": "^3.0.6", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz", - "integrity": "sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "^0.1.3", - "rlp": "^2.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/ganache-core/node_modules/merkle-patricia-tree/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/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==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/node-gyp-build": { - "version": "4.2.3", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache-core/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true, - "license": "MIT" - }, - "node_modules/ganache-core/node_modules/patch-package": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", - "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^1.2.1", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/ganache-core/node_modules/patch-package/node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/ganache-core/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache-core/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==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ganache-core/node_modules/source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/ganache-core/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": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/ganache-core/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache-core/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "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": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz", - "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "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", - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "license": "ISC", - "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/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "license": "MIT", - "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" - } - }, - "node_modules/globby/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.x" - } - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "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==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.22.6", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.6.tgz", - "integrity": "sha512-abFEnd9QACwEtSvZZGSmzvw7N3zhQN1cDKz5SLHAupfG24qTHofCjqvD5kT5Wwsq5XOL0ON1Mq5rr4v0XX5ciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.1", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "boxen": "^5.1.2", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.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", - "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": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.8.tgz", - "integrity": "sha512-1G5thPnnhcwLHsFnl759f2tgElvuwdkzxlI65fC9PwxYMEe9cmjkVAAWTf3/3y8uP6ZSPiUiOW8PgZnykmZe0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.24", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.0.0.tgz", - "integrity": "sha512-DZVbtY62kc3kkBtMHqwCOfXrT/hnoORy5BJ4+HU1IR59X0KWAOqsfzQPcUl/lQLlG7qXbe/fZ3r/emxtAl+sqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/hardhat/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/hardhat/node_modules/@types/node": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.24.tgz", - "integrity": "sha512-aveCYRQbgTH9Pssp1voEP7HiuWlD2jW2BO56w+bVrJn04i61yh6mRfoKO6hEYQD9vF+W8Chkwc6j1M36uPkx4g==", - "dev": true, - "license": "MIT" - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.0.3.tgz", - "integrity": "sha512-NQLTW0x0CosoVb/n79x/TRHtfvS3hgNUPTUSCu0vM+9k6IIhHFFrAOJReneexjZsoZxMjJHnJn4lrE8EbnSyqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.0.0", - "@noble/secp256k1": "1.5.5", - "@scure/bip32": "1.0.1", - "@scure/bip39": "1.0.0" - } - }, - "node_modules/hardhat/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/hardhat/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat/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_modules/hardhat/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/hardhat/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": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/hardhat/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/hardhat/node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "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_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": "*" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "has-symbol-support-x": "^1.4.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/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": "MIT", - "dependencies": { - "safe-buffer": "~5.2.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==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hasown/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", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "license": "MIT" - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "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_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=", - "dev": true, - "license": "ISC", - "optional": true - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/idna-uts46-hx/node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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" - }, - "node_modules/inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/inquirer/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/inquirer/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", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/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", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/io-ts/node_modules/fp-ts": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.5.tgz", - "integrity": "sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==", - "dev": true, - "license": "MIT" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true, - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fn": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fn/-/is-fn-1.0.0.tgz", - "integrity": "sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.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": "sha1-fY035q135dEnFIkTxXPggtd39VQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", - "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", - "dev": true, - "license": "MIT", - "optional": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "engines": { - "node": ">=8" - } - }, - "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", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-primitive": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz", - "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "license": "MIT" - }, - "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" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true, - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "license": "MIT" - }, - "node_modules/isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/iterate-object": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.4.tgz", - "integrity": "sha512-4dG1D1x/7g8PwHS9aK6QV5V94+ZvyP4+d19qDv43EzImmrndysIl4prmJ1hWWIGCqrZHyaHBm6BSEWHOLnpoNw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jake/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/jake/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/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/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-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-rpc-engine": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz", - "integrity": "sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA==", - "dev": true, - "license": "ISC", - "dependencies": { - "async": "^2.0.1", - "babel-preset-env": "^1.7.0", - "babelify": "^7.3.0", - "json-rpc-error": "^2.0.0", - "promise-to-callback": "^1.0.0", - "safe-event-emitter": "^1.0.1" - } - }, - "node_modules/json-rpc-error": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-rpc-error/-/json-rpc-error-2.0.0.tgz", - "integrity": "sha1-p6+cICg4tekFxyUOVH8a/3cligI=", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1" - } - }, - "node_modules/json-rpc-random-id": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz", - "integrity": "sha1-uknZat7RRE27jaPSA3SKy7zeyMg=", - "dev": true, - "license": "ISC" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonify": "~0.0.0" - } - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true, - "license": "MIT" - }, - "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": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "license": "Public Domain" - }, - "node_modules/jsonschema": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.0.tgz", - "integrity": "sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keccak/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/keccak/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": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.11" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "license": "MIT", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz", - "integrity": "sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-3.0.1.tgz", - "integrity": "sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "level-packager": "~4.0.0", - "memdown": "~3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=", - "dev": true, - "license": "MIT" - }, - "node_modules/level-mem/node_modules/memdown": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-3.0.0.tgz", - "integrity": "sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~5.0.0", - "functional-red-black-tree": "~1.0.1", - "immediate": "~3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem/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" - }, - "node_modules/level-packager": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-4.0.1.tgz", - "integrity": "sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "encoding-down": "~5.0.0", - "levelup": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-post": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/level-post/-/level-post-1.0.7.tgz", - "integrity": "sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew==", - "dev": true, - "license": "MIT", - "dependencies": { - "ltgt": "^2.1.2" - } - }, - "node_modules/level-sublevel": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-6.6.4.tgz", - "integrity": "sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytewise": "~1.1.0", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0", - "level-iterator-stream": "^2.0.3", - "ltgt": "~2.1.1", - "pull-defer": "^0.2.2", - "pull-level": "^2.0.3", - "pull-stream": "^3.6.8", - "typewiselite": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/level-sublevel/node_modules/level-iterator-stream": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz", - "integrity": "sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig==", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.5", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/level-sublevel/node_modules/ltgt": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.1.3.tgz", - "integrity": "sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ=", - "dev": true, - "license": "MIT" - }, - "node_modules/level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~1.0.15", - "xtend": "~2.1.1" - } - }, - "node_modules/level-ws/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", - "dev": true, - "license": "MIT" - }, - "node_modules/level-ws/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/level-ws/node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dev": true, - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/levelup": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-3.1.1.tgz", - "integrity": "sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~4.0.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~3.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lint-staged": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-13.0.3.tgz", - "integrity": "sha512-9hmrwSCFroTSYLjflGI8Uk+GWAwMB4OlpU4bMJEAT5d/llQwtYKoim4bLOyLCuWFAhWEupE0vkIFqtw/WIsPug==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.17", - "commander": "^9.3.0", - "debug": "^4.3.4", - "execa": "^6.1.0", - "lilconfig": "2.0.5", - "listr2": "^4.0.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.2", - "pidtree": "^0.6.0", - "string-argv": "^0.3.1", - "yaml": "^2.1.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.3.0.tgz", - "integrity": "sha512-hv95iU5uXPbK83mjrJKuZyFM/LBAoCV/XhVGkS5Je6tl7sxr6A0ITMw5WoRV46/UaJ46Nllm3Xt7IaJhXTIkzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/lint-staged/node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.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==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true, - "license": "MIT" - }, - "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" - }, - "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==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true, - "license": "MIT" - }, - "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": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/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/log-symbols/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/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/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/looper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-2.0.0.tgz", - "integrity": "sha1-Zs0Md0rz1P7axTeU90LbVtqPCew=", - "dev": true, - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/loupe": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", - "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "license": "MIT", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.7.1", - "functional-red-black-tree": "^1.0.1", - "immediate": "^3.2.3", - "inherits": "~2.0.1", - "ltgt": "~2.2.0", - "safe-buffer": "~5.1.1" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/memdown/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" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz", - "integrity": "sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^1.4.2", - "ethereumjs-util": "^5.0.0", - "level-ws": "0.0.0", - "levelup": "^1.2.1", - "memdown": "^1.0.0", - "readable-stream": "^2.0.0", - "rlp": "^2.0.0", - "semaphore": ">=1.0.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "xtend": "~4.0.0" - } - }, - "node_modules/merkle-patricia-tree/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true, - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "~2.6.0" - } - }, - "node_modules/merkle-patricia-tree/node_modules/level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/merkle-patricia-tree/node_modules/level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "level-errors": "^1.0.3", - "readable-stream": "^1.0.33", - "xtend": "^4.0.0" - } - }, - "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream/node_modules/level-errors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.1.2.tgz", - "integrity": "sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "errno": "~0.1.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/level-iterator-stream/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/merkle-patricia-tree/node_modules/levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "deferred-leveldown": "~1.2.1", - "level-codec": "~7.0.0", - "level-errors": "~1.0.3", - "level-iterator-stream": "~1.3.0", - "prr": "~1.0.1", - "semver": "~5.4.1", - "xtend": "~4.0.0" - } - }, - "node_modules/merkle-patricia-tree/node_modules/semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "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": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true, - "license": "MIT" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "minipass": "^2.9.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "mkdirp": "*" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mkdirp-promise/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", - "optional": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", - "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.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.0.1", - "ms": "2.1.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/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/mocha/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/mocha/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/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "license": "ISC", - "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" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs/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==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/mock-fs": { - "version": "4.14.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", - "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "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/multibase": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.7.0.tgz", - "integrity": "sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "base-x": "^3.0.8", - "buffer": "^5.5.0" - } - }, - "node_modules/multicodec": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.5.7.tgz", - "integrity": "sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "varint": "^5.0.0" - } - }, - "node_modules/multihashes": { - "version": "0.4.21", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz", - "integrity": "sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer": "^5.5.0", - "multibase": "^0.7.0", - "varint": "^5.0.0" - } - }, - "node_modules/mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true, - "license": "ISC" - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/nanoassert": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nanoassert/-/nanoassert-2.0.0.tgz", - "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==", - "dev": true, - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.1.20", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz", - "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==", - "dev": true, - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/next-tick": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", - "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/nopt/node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "dev": true, - "license": "MIT", - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=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": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=", - "dev": true, - "license": "MIT" - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", - "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.3.tgz", - "integrity": "sha512-qN5lHhArxl/789Bp3XCpssAYy7cvOdRzxzflmGEJaiipAT2b/USr1XvKjYyssPOwQ/3KjV1e8Ed9po9rie6E6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/oboe": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.4.tgz", - "integrity": "sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY=", - "dev": true, - "license": "BSD", - "optional": true, - "dependencies": { - "http-https": "^1.0.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "license": "MIT", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate/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", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "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": "sha1-juqz5U+laSD+Fro493+iGqzC104=", - "dev": true - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/patch-package": { - "version": "6.4.7", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.4.7.tgz", - "integrity": "sha512-S0vh/ZEafZ17hbhgqdnpunKDfzHQibQizx9g8yEf5dcVk3KOflOfdufRXQX8CSEkyOQwuM/bNz1GwKvFj54kaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^7.0.1", - "is-ci": "^2.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.0", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^5.6.0", - "slash": "^2.0.0", - "tmp": "^0.0.33" - }, - "bin": { - "patch-package": "index.js" - }, - "engines": { - "npm": ">5" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true, - "license": "MIT", - "optional": 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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postinstall-postinstall": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postinstall-postinstall/-/postinstall-postinstall-2.1.0.tgz", - "integrity": "sha512-7hQX6ZlZXIoRiWNrbMQaLzUUfH+sSx39u8EJ9HYuDc1kLo9IXKWjM5RSquZN1ad5GnH8CGFM78fsAAQi3OKEEQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT" - }, - "node_modules/precond": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/precond/-/precond-0.2.3.tgz", - "integrity": "sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.0.0-beta.19", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz", - "integrity": "sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.14.0", - "emoji-regex": "^10.0.0", - "escape-string-regexp": "^4.0.0", - "semver": "^7.3.5", - "solidity-comments-extractor": "^0.0.7", - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prettier": "^2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/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/prettier-plugin-solidity/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "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" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", - "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-to-callback": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-to-callback/-/promise-to-callback-1.0.0.tgz", - "integrity": "sha1-XSp0kBC/tn2WNZj805YHRqaP7vc=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-fn": "^1.0.0", - "set-immediate-shim": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true, - "license": "MIT" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true, - "license": "ISC" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/pull-cat": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz", - "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=", - "dev": true, - "license": "MIT" - }, - "node_modules/pull-defer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.3.tgz", - "integrity": "sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==", - "dev": true, - "license": "MIT" - }, - "node_modules/pull-level": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pull-level/-/pull-level-2.0.4.tgz", - "integrity": "sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "level-post": "^1.0.7", - "pull-cat": "^1.1.9", - "pull-live": "^1.0.1", - "pull-pushable": "^2.0.0", - "pull-stream": "^3.4.0", - "pull-window": "^2.1.4", - "stream-to-pull-stream": "^1.7.1" - } - }, - "node_modules/pull-live": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pull-live/-/pull-live-1.0.1.tgz", - "integrity": "sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU=", - "dev": true, - "license": "MIT", - "dependencies": { - "pull-cat": "^1.1.9", - "pull-stream": "^3.4.0" - } - }, - "node_modules/pull-pushable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz", - "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=", - "dev": true, - "license": "MIT" - }, - "node_modules/pull-stream": { - "version": "3.6.14", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.14.tgz", - "integrity": "sha512-KIqdvpqHHaTUA2mCYcLG1ibEbu/LCKoJZsBWyv9lSYtPkJPBq8m3Hxa103xHi6D2thj5YXa0TqK3L3GUkwgnew==", - "dev": true, - "license": "MIT" - }, - "node_modules/pull-window": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/pull-window/-/pull-window-2.1.4.tgz", - "integrity": "sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA=", - "dev": true, - "license": "MIT", - "dependencies": { - "looper": "^2.0.0" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "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==", - "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" - }, - "node_modules/r-json": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/r-json/-/r-json-1.2.10.tgz", - "integrity": "sha512-hu9vyLjSlHXT62NAS7DjI9WazDlvjN0lgp3n431dCVnirVcLkZIpzSwA3orhZEKzdDD2jqNYI+w0yG0aFf4kpA==", - "dev": true, - "license": "MIT" - }, - "node_modules/r1csfile": { - "version": "0.0.16", - "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.16.tgz", - "integrity": "sha512-A2jRVWzGgmXeG2lVAc0H4suJmzt50it5UvBnycJgBCpMXM3tH/M6RguP7nvs6suY/yYnkN6jX6iTScSiDUF3FA==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "@iden3/bigarray": "0.0.2", - "fastfile": "0.0.18", - "ffjavascript": "0.2.22" - } - }, - "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", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/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/raw-body/node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "license": "MIT", - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "license": "MIT", - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "license": "MIT", - "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/readable-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-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", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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", - "engines": { - "node": ">=6" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "dev": true, - "license": "BSD", - "dependencies": { - "babel-runtime": "^6.18.0", - "babel-types": "^6.19.0", - "private": "^0.1.6" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.5.0" - } - }, - "node_modules/regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "node_modules/regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "license": "BSD", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-finite": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha1-1AgrTURZgDZkD7c93qAe1T20nrw=", - "dev": true, - "license": "MIT", - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha1-10GI5H+TeW9Kpx327jWuaJ8+DnA=", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-promise-core": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", - "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, - "license": "ISC", - "dependencies": { - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request-promise-native": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", - "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", - "dev": true, - "license": "ISC", - "dependencies": { - "request-promise-core": "1.1.4", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - }, - "engines": { - "node": ">=0.12.0" - }, - "peerDependencies": { - "request": "^2.34" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true, - "license": "ISC" - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve/node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/restore-cursor/node_modules/onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "dev": true, - "license": "MIT", - "dependencies": { - "through": "~2.3.4" - } - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "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==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/rlp/node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true, - "license": "MIT" - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.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==", - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true, - "license": "(MIT OR Apache-2.0)" - }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "license": "0BSD" - }, - "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" - }, - "node_modules/safe-event-emitter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz", - "integrity": "sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==", - "dev": true, - "license": "ISC", - "dependencies": { - "events": "^3.0.0" - } - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "license": "MIT", - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "BSD-3-Clause", - "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" - } - }, - "node_modules/sc-istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true, - "license": "MIT" - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "license": "ISC", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "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": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true, - "license": "MIT", - "engines": { - "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": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true, - "license": "MIT" - }, - "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": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scrollsdk": { - "version": "87.0.0", - "resolved": "https://registry.npmjs.org/scrollsdk/-/scrollsdk-87.0.0.tgz", - "integrity": "sha512-Qg4WaQd2mrjEIe+6NhL02IyLxzlfB1FKhfLhnHSHTNxOMjRGBlavFkrjj43k64obiLdmwj0cKMORkxpjGo2xhw==", - "engines": { - "node": ">=16.0" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true, - "license": "MIT" - }, - "node_modules/scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pbkdf2": "^3.0.3" - } - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-1/02Y/rUeU1CJBAGLebiC5Lbo5FnB22gQbIFFYTLkwvp1xdABZJH1sn4ZT1MzXmPpzv+Rf/Lu2NcsLJiK4rcDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/send/node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "body-parser": "^1.16.0", - "cors": "^2.8.1", - "express": "^4.14.0", - "request": "^2.79.0", - "xhr": "^2.3.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "license": "ISC" - }, - "node_modules/set-immediate-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", - "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true, - "license": "MIT" - }, - "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" - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "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", - "optional": true - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "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_modules/slice-ansi/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "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": { - "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/solc/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/solhint": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/solhint/-/solhint-3.3.7.tgz", - "integrity": "sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@solidity-parser/parser": "^0.14.1", - "ajv": "^6.6.1", - "antlr4": "4.7.1", - "ast-parents": "0.0.1", - "chalk": "^2.4.2", - "commander": "2.18.0", - "cosmiconfig": "^5.0.7", - "eslint": "^5.6.0", - "fast-diff": "^1.1.2", - "glob": "^7.1.3", - "ignore": "^4.0.6", - "js-yaml": "^3.12.0", - "lodash": "^4.17.11", - "semver": "^6.3.0" - }, - "bin": { - "solhint": "solhint.js" - }, - "optionalDependencies": { - "prettier": "^1.14.3" - } - }, - "node_modules/solhint/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/solhint/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", - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/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", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/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", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/solhint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true, - "license": "MIT" - }, - "node_modules/solhint/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true, - "license": "MIT" - }, - "node_modules/solhint/node_modules/eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.11", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "progress": "^2.0.0", - "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.2.3", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^6.14.0 || ^8.10.0 || >=9.10.0" - } - }, - "node_modules/solhint/node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/solhint/node_modules/eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/solhint/node_modules/eslint/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solhint/node_modules/espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/solhint/node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/solhint/node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/solhint/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/solhint/node_modules/file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true, - "license": "ISC" - }, - "node_modules/solhint/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/solhint/node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/solhint/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/solhint/node_modules/slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/solhint/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/solhint/node_modules/string-width/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/solhint/node_modules/string-width/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/solhint/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solhint/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/solhint/node_modules/table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/solidity-comments-extractor": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz", - "integrity": "sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/solidity-coverage": { - "version": "0.8.11", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.11.tgz", - "integrity": "sha512-yy0Yk+olovBbXn0Me8BWULmmv7A69ZKkP5aTOJGOO8u61Tu2zS989erfjtFlUjDnfWtxRAVkd8BsQD704yLWHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "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.15", - "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" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "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.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "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/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "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/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "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/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "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.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "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.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "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/logger": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "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/bignumber": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "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/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "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.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "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" - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "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/logger": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "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/logger": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "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.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "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.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "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.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "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.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "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/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/solidity-coverage/node_modules/@scure/base": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", - "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/solidity-coverage/node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/solidity-coverage/node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true, - "license": "MIT" - }, - "node_modules/solidity-coverage/node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/solidity-coverage/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/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==", - "dev": true, - "license": "LGPL-3.0", - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solidity-coverage/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.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==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true, - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/squirrelly": { - "version": "8.0.8", - "resolved": "https://registry.npmjs.org/squirrelly/-/squirrelly-8.0.8.tgz", - "integrity": "sha512-7dyZJ9Gw86MmH0dYLiESsjGOTj6KG8IWToTaqBuB6LwPI+hyNb6mbQaZwrfnAQ4cMDnSWMUvX/zAYDLTSWLk/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/squirrellyjs/squirrelly?sponsor=1" - } - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-to-pull-stream": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz", - "integrity": "sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } - }, - "node_modules/stream-to-pull-stream/node_modules/looper": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", - "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=", - "dev": true, - "license": "MIT" - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "license": "MIT" - }, - "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "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" - }, - "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", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/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/string-width/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.5.tgz", - "integrity": "sha512-Lnh17webJVsD6ECeovpVN17RlAKjmz4rF9S+8Y45CkMc/ufVpTkU3vZIyIC7sllQ1FCvObZnnCdNs/HXTUOTlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/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", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi/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/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-color/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swarm-js": { - "version": "0.1.40", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.40.tgz", - "integrity": "sha512-yqiOCEoA4/IShXkY3WKwP5PvZhmoOOD8clsKA7EEcRILMkTEYHCQ21HDCAcVpmIxZq4LyZvWeRJ6quIyHk1caA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bluebird": "^3.5.0", - "buffer": "^5.0.5", - "eth-lib": "^0.1.26", - "fs-extra": "^4.0.2", - "got": "^7.1.0", - "mime-types": "^2.1.16", - "mkdirp-promise": "^5.0.1", - "mock-fs": "^4.1.0", - "setimmediate": "^1.0.5", - "tar": "^4.0.2", - "xhr-request": "^1.0.1" - } - }, - "node_modules/swarm-js/node_modules/eth-lib": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.29.tgz", - "integrity": "sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "bn.js": "^4.11.6", - "elliptic": "^6.4.0", - "nano-json-stream-parser": "^0.1.2", - "servify": "^0.1.12", - "ws": "^3.0.0", - "xhr-request-promise": "^0.1.2" - } - }, - "node_modules/swarm-js/node_modules/fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "node_modules/swarm-js/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "decompress-response": "^3.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/swarm-js/node_modules/prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/swarm-js/node_modules/ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" - } - }, - "node_modules/swarm-js/node_modules/ws/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", - "optional": true - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.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", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dev": true, - "license": "BSD-3-Clause", - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/tape": { - "version": "4.15.1", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.15.1.tgz", - "integrity": "sha512-k7F5pyr91n9D/yjSJwbLLYDCrTWXxMSXbbmHX2n334lSIc2rxeXyFkaBv4UuUd2gBYMrAOalPutAiCxC6q1qbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "~1.0.2", - "deep-equal": "~1.1.1", - "defined": "~1.0.0", - "dotignore": "~0.1.2", - "for-each": "~0.3.3", - "glob": "~7.2.0", - "has": "~1.0.3", - "inherits": "~2.0.4", - "is-regex": "~1.1.4", - "minimist": "~1.2.6", - "object-inspect": "~1.12.0", - "resolve": "~1.22.0", - "resumer": "~0.0.0", - "string.prototype.trim": "~1.2.5", - "through": "~2.3.8" - }, - "bin": { - "tape": "bin/tape" - } - }, - "node_modules/tar": { - "version": "4.4.19", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz", - "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", - "dev": true, - "license": "ISC", - "optional": true, - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, - "engines": { - "node": ">=4.5" - } - }, - "node_modules/test-value": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/test-value/-/test-value-2.1.0.tgz", - "integrity": "sha1-Edpv9nDzRxpztiXKTz/c97t0gpE=", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^1.0.3", - "typical": "^2.6.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true, - "license": "MIT" - }, - "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", - "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" - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true, - "license": "MIT" - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmp-promise": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-2.1.1.tgz", - "integrity": "sha512-Z048AOz/w9b6lCbJUpevIJpRpUztENl8zdv1bmAKVHimfqRFl92ROkmT9rp7TVBnrEw2gtMTol/2Cp2S2kJa4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "tmp": "0.1.0" - } - }, - "node_modules/tmp-promise/node_modules/tmp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", - "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "rimraf": "^2.6.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/to-regex-range/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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "license": "MIT", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.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/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true, - "license": "MIT" - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "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", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "dev": true, - "license": "ISC", - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-command-line-args/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/ts-command-line-args/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", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-command-line-args/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/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-generator": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ts-generator/-/ts-generator-0.1.1.tgz", - "integrity": "sha512-N+ahhZxTLYu1HNTQetwWcx3so8hcYbkKBHTr4b4/YgObFTIKkOSSsaa+nal12w8mfrJAyzJfETXawbNjSfP2gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mkdirp": "^0.5.2", - "@types/prettier": "^2.1.1", - "@types/resolve": "^0.0.8", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "mkdirp": "^0.5.1", - "prettier": "^2.1.2", - "resolve": "^1.8.1", - "ts-essentials": "^1.0.0" - }, - "bin": { - "ts-generator": "dist/cli/run.js" - } - }, - "node_modules/ts-generator/node_modules/ts-essentials": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-1.0.4.tgz", - "integrity": "sha512-q3N1xS4vZpRouhYHDPwO0bDW3EZ6SK9CrrDHxi/D6BPReSjpVgWIOpLS2o0gSBZm+7q/wyKp6RVM1AeeW7uyfQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ts-node": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", - "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "0.7.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.0", - "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/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "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/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y=", - "dev": true, - "license": "MIT" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "license": "Unlicense" - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true, - "license": "ISC" - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "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/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/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", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true, - "license": "MIT" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.2.tgz", - "integrity": "sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typewise": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", - "integrity": "sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE=", - "dev": true, - "license": "MIT", - "dependencies": { - "typewise-core": "^1.2.0" - } - }, - "node_modules/typewise-core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", - "integrity": "sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU=", - "dev": true, - "license": "MIT" - }, - "node_modules/typewiselite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typewiselite/-/typewiselite-1.0.0.tgz", - "integrity": "sha1-yIgvobsQksBgBal/NO9chQjjZk4=", - "dev": true, - "license": "MIT" - }, - "node_modules/typical": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", - "integrity": "sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0=", - "dev": true, - "license": "MIT" - }, - "node_modules/uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/underscore": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", - "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/undici": { - "version": "5.28.3", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", - "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true, - "license": "MIT" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "license": "MIT", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unorm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz", - "integrity": "sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA==", - "dev": true, - "license": "MIT or GPL-2.0", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "license": "MIT", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "license": "MIT", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true, - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true, - "license": "MIT" - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "license": "MIT", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true, - "license": "MIT" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.9.tgz", - "integrity": "sha512-Yek7dAy0v3Kl0orwMlvi7TPtiCNrdfHNd7Gcc/pLq4BLXqfAmd0J7OWMizUQnTTJsyjKn02mU7anqwfmUP4J8Q==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "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" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "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" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/varint": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz", - "integrity": "sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "license": "MIT" - }, - "node_modules/verror/node_modules/extsprintf": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", - "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT" - }, - "node_modules/w-json": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/w-json/-/w-json-1.3.10.tgz", - "integrity": "sha512-XadVyw0xE+oZ5FGApXsdswv96rOhStzKqL53uSe5UaTadABGkWIg1+DTx8kiZ/VqTZTBneoL0l65RcPe4W3ecw==", - "dev": true, - "license": "MIT" - }, - "node_modules/wasmbuilder": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.10.tgz", - "integrity": "sha512-zQSvZ7d74d9OvN+mCN6ucNne4QS5/cBBYTHldX0Oe+u9gStY21orapvuX1ajisA7RVIpuFhYg+ZgdySsPfeh0A==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.48" - } - }, - "node_modules/wasmcurves": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.14.tgz", - "integrity": "sha512-G1iMkxlRaQSdqQ1JrwHcU+awLmwyH6kFKfT8g9obd8MWe+u5oSdFXrODB0zmSI5aGGvJPG+4cAmqCGYv9R+7qg==", - "dev": true, - "license": "GPL-3.0", - "dependencies": { - "big-integer": "^1.6.42", - "blakejs": "^1.1.0" - } - }, - "node_modules/web-worker": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", - "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/web3": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.2.11.tgz", - "integrity": "sha512-mjQ8HeU41G6hgOYm1pmeH0mRAeNKJGnJEUzDMoerkpw7QUQT4exVREgF1MYPvL/z6vAshOXei25LE/t/Bxl8yQ==", - "dev": true, - "hasInstallScript": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-bzz": "1.2.11", - "web3-core": "1.2.11", - "web3-eth": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-shh": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.2.11.tgz", - "integrity": "sha512-XGpWUEElGypBjeFyUhTkiPXFbDVD6Nr/S5jznE3t8cWUA0FxRf1n3n/NuIZeb0H9RkN2Ctd/jNma/k8XGa3YKg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/node": "^12.12.6", - "got": "9.6.0", - "swarm-js": "^0.1.40", - "underscore": "1.9.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-bzz/node_modules/@types/node": { - "version": "12.20.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", - "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/web3-core": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.2.11.tgz", - "integrity": "sha512-CN7MEYOY5ryo5iVleIWRE3a3cZqVaLlIbIzDPsvQRUfzYnvzZQRZBm9Mq+ttDi2STOOzc1MKylspz/o3yq/LjQ==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "@types/node": "^12.12.6", - "bignumber.js": "^9.0.0", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-requestmanager": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-helpers": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.2.11.tgz", - "integrity": "sha512-PEPoAoZd5ME7UfbnCZBdzIerpe74GEvlwT4AjOmHeCVZoIFk7EqvOZDejJHt+feJA6kMVTdd0xzRNN295UhC1A==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-eth-iban": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-method": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.2.11.tgz", - "integrity": "sha512-ff0q76Cde94HAxLDZ6DbdmKniYCQVtvuaYh+rtOUMB6kssa5FX0q3vPmixi7NPooFnbKmmZCM6NvXg4IreTPIw==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@ethersproject/transactions": "^5.0.0-beta.135", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-promievent": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.2.11.tgz", - "integrity": "sha512-il4McoDa/Ox9Agh4kyfQ8Ak/9ABYpnF8poBLL33R/EnxLsJOGQG2nZhkJa3I067hocrPSjEdlPt/0bHXsln4qA==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-requestmanager": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.2.11.tgz", - "integrity": "sha512-oFhBtLfOiIbmfl6T6gYjjj9igOvtyxJ+fjS+byRxiwFJyJ5BQOz4/9/17gWR1Cq74paTlI7vDGxYfuvfE/mKvA==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "web3-providers-http": "1.2.11", - "web3-providers-ipc": "1.2.11", - "web3-providers-ws": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core-subscriptions": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.2.11.tgz", - "integrity": "sha512-qEF/OVqkCvQ7MPs1JylIZCZkin0aKK9lDxpAtQ1F8niEDGFqn7DT8E/vzbIa0GsOjL2fZjDhWJsaW+BSoAW1gg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-core/node_modules/@types/node": { - "version": "12.20.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", - "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/web3-eth": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.2.11.tgz", - "integrity": "sha512-REvxW1wJ58AgHPcXPJOL49d1K/dPmuw4LjPLBPStOVkQjzDTVmJEIsiLwn2YeuNDd4pfakBwT8L3bz1G1/wVsQ==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-accounts": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-eth-ens": "1.2.11", - "web3-eth-iban": "1.2.11", - "web3-eth-personal": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.2.11.tgz", - "integrity": "sha512-PkRYc0+MjuLSgg03QVWqWlQivJqRwKItKtEpRUaxUAeLE7i/uU39gmzm2keHGcQXo3POXAbOnMqkDvOep89Crg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@ethersproject/abi": "5.0.0-beta.153", - "underscore": "1.9.1", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-abi/node_modules/@ethersproject/abi": { - "version": "5.0.0-beta.153", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz", - "integrity": "sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@ethersproject/address": ">=5.0.0-beta.128", - "@ethersproject/bignumber": ">=5.0.0-beta.130", - "@ethersproject/bytes": ">=5.0.0-beta.129", - "@ethersproject/constants": ">=5.0.0-beta.128", - "@ethersproject/hash": ">=5.0.0-beta.128", - "@ethersproject/keccak256": ">=5.0.0-beta.127", - "@ethersproject/logger": ">=5.0.0-beta.129", - "@ethersproject/properties": ">=5.0.0-beta.131", - "@ethersproject/strings": ">=5.0.0-beta.130" - } - }, - "node_modules/web3-eth-accounts": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.2.11.tgz", - "integrity": "sha512-6FwPqEpCfKIh3nSSGeo3uBm2iFSnFJDfwL3oS9pyegRBXNsGRVpgiW63yhNzL0796StsvjHWwQnQHsZNxWAkGw==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.8", - "ethereumjs-common": "^1.3.2", - "ethereumjs-tx": "^2.1.1", - "scrypt-js": "^3.0.1", - "underscore": "1.9.1", - "uuid": "3.3.2", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/ethereumjs-tx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", - "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "dependencies": { - "ethereumjs-common": "^1.5.0", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/web3-eth-accounts/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "license": "MPL-2.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/web3-eth-accounts/node_modules/uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/web3-eth-contract": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.2.11.tgz", - "integrity": "sha512-MzYuI/Rq2o6gn7vCGcnQgco63isPNK5lMAan2E51AJLknjSLnOxwNY3gM8BcKoy4Z+v5Dv00a03Xuk78JowFow==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/bn.js": "^4.11.5", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-ens": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-1.2.11.tgz", - "integrity": "sha512-dbW7dXP6HqT1EAPvnniZVnmw6TmQEKF6/1KgAxbo8iBBYrVTMDGFQUUnZ+C4VETGrwwaqtX4L9d/FrQhZ6SUiA==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "content-hash": "^2.5.2", - "eth-ens-namehash": "2.0.8", - "underscore": "1.9.1", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-promievent": "1.2.11", - "web3-eth-abi": "1.2.11", - "web3-eth-contract": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-iban": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.2.11.tgz", - "integrity": "sha512-ozuVlZ5jwFC2hJY4+fH9pIcuH1xP0HEFhtWsR69u9uDIANHLPQQtWYmdj7xQ3p2YT4bQLq/axKhZi7EZVetmxQ==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.2.11.tgz", - "integrity": "sha512-42IzUtKq9iHZ8K9VN0vAI50iSU9tOA1V7XU2BhF/tb7We2iKBVdkley2fg26TxlOcKNEHm7o6HRtiiFsVK4Ifw==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "@types/node": "^12.12.6", - "web3-core": "1.2.11", - "web3-core-helpers": "1.2.11", - "web3-core-method": "1.2.11", - "web3-net": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-eth-personal/node_modules/@types/node": { - "version": "12.20.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.48.tgz", - "integrity": "sha512-4kxzqkrpwYtn6okJUcb2lfUu9ilnb3yhUOH6qX3nug8D2DupZ2drIkff2yJzYcNJVl3begnlcaBJ7tqiTTzjnQ==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/web3-net": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.2.11.tgz", - "integrity": "sha512-sjrSDj0pTfZouR5BSTItCuZ5K/oZPVdVciPQ6981PPPIwJJkCMeVjD7I4zO3qDPCnBjBSbWvVnLdwqUBPtHxyg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-utils": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-provider-engine": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/web3-provider-engine/-/web3-provider-engine-14.2.1.tgz", - "integrity": "sha512-iSv31h2qXkr9vrL6UZDm4leZMc32SjWJFGOp/D92JXfcEboCqraZyuExDkpxKw8ziTufXieNM7LSXNHzszYdJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "async": "^2.5.0", - "backoff": "^2.5.0", - "clone": "^2.0.0", - "cross-fetch": "^2.1.0", - "eth-block-tracker": "^3.0.0", - "eth-json-rpc-infura": "^3.1.0", - "eth-sig-util": "^1.4.2", - "ethereumjs-block": "^1.2.2", - "ethereumjs-tx": "^1.2.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.4", - "json-rpc-error": "^2.0.0", - "json-stable-stringify": "^1.0.1", - "promise-to-callback": "^1.0.0", - "readable-stream": "^2.2.9", - "request": "^2.85.0", - "semaphore": "^1.0.3", - "ws": "^5.1.1", - "xhr": "^2.2.0", - "xtend": "^4.0.1" - } - }, - "node_modules/web3-provider-engine/node_modules/eth-sig-util": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/eth-sig-util/-/eth-sig-util-1.4.2.tgz", - "integrity": "sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA=", - "dev": true, - "license": "ISC", - "dependencies": { - "ethereumjs-abi": "git+https://github.com/ethereumjs/ethereumjs-abi.git", - "ethereumjs-util": "^5.1.1" - } - }, - "node_modules/web3-provider-engine/node_modules/ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==", - "dev": true, - "license": "MIT" - }, - "node_modules/web3-provider-engine/node_modules/ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "async": "^2.0.1", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.0", - "merkle-patricia-tree": "^2.1.2" - } - }, - "node_modules/web3-provider-engine/node_modules/ws": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", - "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/web3-providers-http": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.2.11.tgz", - "integrity": "sha512-psh4hYGb1+ijWywfwpB2cvvOIMISlR44F/rJtYkRmQ5jMvG4FOCPlQJPiHQZo+2cc3HbktvvSJzIhkWQJdmvrA==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core-helpers": "1.2.11", - "xhr2-cookies": "1.1.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ipc": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.2.11.tgz", - "integrity": "sha512-yhc7Y/k8hBV/KlELxynWjJDzmgDEDjIjBzXK+e0rHBsYEhdCNdIH5Psa456c+l0qTEU2YzycF8VAjYpWfPnBpQ==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "oboe": "2.1.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.2.11.tgz", - "integrity": "sha512-ZxnjIY1Er8Ty+cE4migzr43zA/+72AF1myzsLaU5eVgdsfV7Jqx7Dix1hbevNZDKFlSoEyq/3j/jYalh3So1Zg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "eventemitter3": "4.0.4", - "underscore": "1.9.1", - "web3-core-helpers": "1.2.11", - "websocket": "^1.0.31" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/web3-providers-ws/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/web3-providers-ws/node_modules/websocket": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.34.tgz", - "integrity": "sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/web3-shh": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.2.11.tgz", - "integrity": "sha512-B3OrO3oG1L+bv3E1sTwCx66injW1A8hhwpknDUbV+sw3fehFazA06z9SGXUefuFI1kVs4q2vRi0n4oCcI4dZDg==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "web3-core": "1.2.11", - "web3-core-method": "1.2.11", - "web3-core-subscriptions": "1.2.11", - "web3-net": "1.2.11" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.2.11.tgz", - "integrity": "sha512-3Tq09izhD+ThqHEaWYX4VOT7dNPdZiO+c/1QMA0s5X2lDFKK/xHJb7cyTRRVzN2LvlHbR7baS1tmQhSua51TcQ==", - "dev": true, - "license": "LGPL-3.0", - "optional": true, - "dependencies": { - "bn.js": "^4.11.9", - "eth-lib": "0.2.8", - "ethereum-bloom-filters": "^1.0.6", - "ethjs-unit": "0.1.6", - "number-to-bn": "1.7.0", - "randombytes": "^2.1.0", - "underscore": "1.9.1", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/websocket": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.32.tgz", - "integrity": "sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bufferutil": "^4.0.1", - "debug": "^2.2.0", - "es5-ext": "^0.10.50", - "typedarray-to-buffer": "^3.1.5", - "utf-8-validate": "^5.0.2", - "yaeti": "^0.0.6" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/websocket/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/websocket/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==", - "dev": true, - "license": "MIT" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true, - "license": "ISC" - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/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", - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/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", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", - "dev": true, - "license": "MIT", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true, - "license": "MIT" - }, - "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", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "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", - "engines": { - "node": ">=8" - } - }, - "node_modules/worker-threads": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/worker-threads/-/worker-threads-1.0.0.tgz", - "integrity": "sha512-vK6Hhvph8oLxocEJIlc3YfGAZhm210uGzjZsXSu+JYLAQ/s/w4Tqgl60JrdH58hW8NSGP4m3bp8a92qPXgX05w==", - "dev": true, - "license": "ISC" - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true, - "license": "Apache-2.0" - }, - "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", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true, - "license": "ISC" - }, - "node_modules/write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "license": "MIT", - "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/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xhr-request-promise": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz", - "integrity": "sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "xhr-request": "^1.1.0" - } - }, - "node_modules/xhr2-cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr2-cookies/-/xhr2-cookies-1.1.0.tgz", - "integrity": "sha1-fXdEnQmZGX8VXLc7I99yUF7YnUg=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "cookiejar": "^2.1.1" - } - }, - "node_modules/xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.32" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.1.1.tgz", - "integrity": "sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "node_modules/yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/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/yargs-unparser/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/yargs/node_modules/ansi-regex": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} From e14c75171bb20ea031a30ba7852a8c70862b88e8 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Fri, 11 Oct 2024 16:21:14 +0800 Subject: [PATCH 39/48] feat: configurable coordinator collection time sec (#51) --- docker/config-example.toml | 4 ++++ docker/templates/coordinator-config.json | 2 +- scripts/deterministic/Configuration.sol | 6 ++++++ scripts/deterministic/GenerateConfigs.s.sol | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index bb580b3c..d5d90356 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -56,6 +56,7 @@ L2GETH_KEYSTORE = '{"address":"756ea06bdee36de11f22dcca45a31d8a178ef3c6","crypto L2GETH_PASSWORD = "scroll2022" L2GETH_NODEKEY = "2f59ff2fdee1c42a3d8c8980c313bc8d6c2557463f7bb92b0f0bc89a6d3cbf01" L2_GETH_STATIC_PEERS = '["enode://848a7d59dd8f60dd1a51160e6bc15c194937855443de9be4b2abd83e11a5c4ac21d61d065448c5c520826fe83f1f29eb5a452daccca27b8113aa897074132507@l2-sequencer:30303"]' +L2GETH_CCC_NUMWORKERS = 5 [rollup] @@ -103,6 +104,9 @@ L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" [coordinator] +CHUNK_COLLECTION_TIME_SEC = 3600 +BATCH_COLLECTION_TIME_SEC = 1800 +BUNDLE_COLLECTION_TIME_SEC = 600 COORDINATOR_JWT_SECRET_KEY = "e788b62d39254928a821ac1c76b274a8c835aa1e20ecfb6f50eb10e87847de44" [ingress] diff --git a/docker/templates/coordinator-config.json b/docker/templates/coordinator-config.json index 12d51857..50d3e7e3 100644 --- a/docker/templates/coordinator-config.json +++ b/docker/templates/coordinator-config.json @@ -3,7 +3,7 @@ "provers_per_session": 1, "session_attempts": 100, "chunk_collection_time_sec": 3600, - "batch_collection_time_sec": 600, + "batch_collection_time_sec": 1800, "bundle_collection_time_sec": 600, "verifier": { "mock_mode": false, diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index eed6e28b..ff912292 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -75,6 +75,9 @@ abstract contract Configuration is Script { address internal L1_PLONK_VERIFIER_ADDR; // coordinator + string internal CHUNK_COLLECTION_TIME_SEC; + string internal BATCH_COLLECTION_TIME_SEC; + string internal BUNDLE_COLLECTION_TIME_SEC; string internal COORDINATOR_JWT_SECRET_KEY; // frontend @@ -147,6 +150,9 @@ abstract contract Configuration is Script { L1_FEE_VAULT_ADDR = cfg.readAddress(".contracts.L1_FEE_VAULT_ADDR"); L1_PLONK_VERIFIER_ADDR = cfg.readAddress(".contracts.L1_PLONK_VERIFIER_ADDR"); + CHUNK_COLLECTION_TIME_SEC = cfg.readString(".coordinator.CHUNK_COLLECTION_TIME_SEC"); + BATCH_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BATCH_COLLECTION_TIME_SEC"); + BUNDLE_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BUNDLE_COLLECTION_TIME_SEC"); COORDINATOR_JWT_SECRET_KEY = cfg.readString(".coordinator.COORDINATOR_JWT_SECRET_KEY"); EXTERNAL_RPC_URI_L1 = cfg.readString(".frontend.EXTERNAL_RPC_URI_L1"); diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 8ca3104f..7517c6d0 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -79,6 +79,10 @@ contract GenerateCoordinatorConfig is DeployScroll { string memory template = vm.readFile(COORDINATOR_CONFIG_TEMPLATE_PATH); vm.writeFile(COORDINATOR_CONFIG_PATH, template); + vm.writeJson(CHUNK_COLLECTION_TIME_SEC, COORDINATOR_CONFIG_PATH, ".prover_manager.chunk_collection_time_sec"); + vm.writeJson(BATCH_COLLECTION_TIME_SEC, COORDINATOR_CONFIG_PATH, ".prover_manager.batch_collection_time_sec"); + vm.writeJson(BUNDLE_COLLECTION_TIME_SEC, COORDINATOR_CONFIG_PATH, ".prover_manager.bundle_collection_time_sec"); + vm.writeJson(vm.toString(CHAIN_ID_L2), COORDINATOR_CONFIG_PATH, ".l2.chain_id"); vm.writeJson(COORDINATOR_JWT_SECRET_KEY, COORDINATOR_CONFIG_PATH, ".auth.secret"); } From f1454a1f3c63b37152613a2a5e06b5cac362392d Mon Sep 17 00:00:00 2001 From: sbaizet <74511063+sbaizet-ledger@users.noreply.github.com> Date: Fri, 11 Oct 2024 15:56:25 +0200 Subject: [PATCH 40/48] ci: use workflow dispatch (#52) --- .github/workflows/docker-release.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index 56111774..c16792ab 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -1,9 +1,9 @@ name: Build and publish scroll-alpine image +# This workflow aims to build images from the feat-deterministic-deployment branch on: - push: - tags: - - 'v*.*.*' + workflow_dispatch: + jobs: build: name: Clone, Build, Publish @@ -41,7 +41,6 @@ jobs: - name: Build deploy image id: build_deploy_image env: - REGISTRY: ${{ steps.login-ecr.outputs.registry }} REPOSITORY: scrolltech/scroll-stack-contracts uses: docker/build-push-action@v3 with: @@ -50,13 +49,11 @@ jobs: context: . file: docker/Dockerfile.deploy tags: | - ${{ env.REPOSITORY }}:deploy-${{ github.ref_name }} - ${{ env.REPOSITORY }}:latest + ${{ env.REPOSITORY }}:deploy-${{ github.sha }} - name: Build gen image id: build_gen_image env: - REGISTRY: ${{ steps.login-ecr.outputs.registry }} REPOSITORY: scrolltech/scroll-stack-contracts uses: docker/build-push-action@v3 with: @@ -65,5 +62,4 @@ jobs: context: . file: docker/Dockerfile.gen-configs tags: | - ${{ env.REPOSITORY }}:gen-configs-${{ github.ref_name }} - ${{ env.REPOSITORY }}:latest + ${{ env.REPOSITORY }}:gen-configs-${{ github.sha }} From aa80925c5c4cacd62a35380a5ec081a6865621eb Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Mon, 14 Oct 2024 18:18:22 +0800 Subject: [PATCH 41/48] feat: gas oracle support volatile gas token exchange rate (#49) --- docker/templates/rollup-config.json | 44 ++++++++++++++++++--- scripts/deterministic/GenerateConfigs.s.sol | 39 +++++++++++++++++- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/docker/templates/rollup-config.json b/docker/templates/rollup-config.json index 2579ca15..909181b1 100644 --- a/docker/templates/rollup-config.json +++ b/docker/templates/rollup-config.json @@ -22,9 +22,20 @@ "l1_blob_base_fee_weight": 0.030, "check_committed_batches_window_minutes": 5, "l1_base_fee_default": 15000000000, - "l1_blob_base_fee_default": 1 + "l1_blob_base_fee_default": 1, + "alternative_gas_token_config": { + "enabled": false, + "mode": "Fixed", + "fixed_exchange_rate": 0.001, + "token_symbol_pair": "" + } }, - "gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313" + "gas_oracle_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1313131313131313131313131313131313131313131313131313131313131313" + } + } } }, "l2_config": { @@ -49,7 +60,13 @@ }, "gas_oracle_config": { "min_gas_price": 0, - "gas_price_diff": 50000 + "gas_price_diff": 50000, + "alternative_gas_token_config": { + "enabled": false, + "mode": "Fixed", + "fixed_exchange_rate": 0.001, + "token_symbol_pair": "" + } }, "chain_monitor": { "enabled": true, @@ -60,9 +77,24 @@ "enable_test_env_bypass_features": null, "finalize_batch_without_proof_timeout_sec": null, "finalize_bundle_without_proof_timeout_sec": null, - "gas_oracle_sender_private_key": "1313131313131313131313131313131313131313131313131313131313131313", - "commit_sender_private_key": "1414141414141414141414141414141414141414141414141414141414141414", - "finalize_sender_private_key": "1515151515151515151515151515151515151515151515151515151515151515", + "gas_oracle_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1313131313131313131313131313131313131313131313131313131313131313" + } + }, + "commit_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1414141414141414141414141414141414141414141414141414141414141414" + } + }, + "finalize_sender_signer_config": { + "signer_type": "PrivateKey", + "private_key_signer_config": { + "private_key": "1515151515151515151515151515151515151515151515151515151515151515" + } + }, "l1_commit_gas_limit_multiplier": 1.2 }, "chunk_proposer_config": { diff --git a/scripts/deterministic/GenerateConfigs.s.sol b/scripts/deterministic/GenerateConfigs.s.sol index 7517c6d0..456a2e7d 100644 --- a/scripts/deterministic/GenerateConfigs.s.sol +++ b/scripts/deterministic/GenerateConfigs.s.sol @@ -1,11 +1,15 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity =0.8.24; -import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH, BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; +import {stdToml} from "forge-std/StdToml.sol"; + +import {ADMIN_SYSTEM_BACKEND_CONFIG_PATH, ADMIN_SYSTEM_BACKEND_CONFIG_TEMPLATE_PATH, BALANCE_CHECKER_CONFIG_PATH, BALANCE_CHECKER_CONFIG_TEMPLATE_PATH, BRIDGE_HISTORY_CONFIG_PATH, BRIDGE_HISTORY_CONFIG_TEMPLATE_PATH, CHAIN_MONITOR_CONFIG_PATH, CHAIN_MONITOR_CONFIG_TEMPLATE_PATH, CONFIG_PATH, COORDINATOR_CONFIG_PATH, COORDINATOR_CONFIG_TEMPLATE_PATH, FRONTEND_ENV_PATH, ROLLUP_CONFIG_PATH, ROLLUP_CONFIG_TEMPLATE_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_PATH, ROLLUP_EXPLORER_BACKEND_CONFIG_TEMPLATE_PATH} from "./Constants.sol"; import {DeployScroll} from "./DeployScroll.s.sol"; import {DeterministicDeployment} from "./DeterministicDeployment.sol"; contract GenerateRollupConfig is DeployScroll { + using stdToml for string; + /*************** * Entry point * ***************/ @@ -51,6 +55,39 @@ contract GenerateRollupConfig is DeployScroll { vm.writeJson(vm.toString(MAX_BLOCK_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_block_num_per_chunk"); vm.writeJson(vm.toString(MAX_TX_IN_CHUNK), ROLLUP_CONFIG_PATH, ".l2_config.chunk_proposer_config.max_tx_num_per_chunk"); vm.writeJson(vm.toString(MAX_BATCH_IN_BUNDLE), ROLLUP_CONFIG_PATH, ".l2_config.bundle_proposer_config.max_batch_num_per_bundle"); + + // alternative gas token configuration for gas oracle + if (ALTERNATIVE_GAS_TOKEN_ENABLED) { + bool GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED; + if (vm.keyExistsToml(cfg, ".gas-token.GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED")) { + GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = cfg.readBool(".gas-token.GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED"); + vm.writeJson(vm.toString(GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED), ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_config.alternative_gas_token_config.enabled"); + vm.writeJson(vm.toString(GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED), ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_config.alternative_gas_token_config.enabled"); + } + if (GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED) { + string memory EXCHANGE_RATE_UPDATE_MODE = cfg.readString(".gas-token.EXCHANGE_RATE_UPDATE_MODE"); + vm.writeJson(EXCHANGE_RATE_UPDATE_MODE, ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_config.alternative_gas_token_config.mode"); + vm.writeJson(EXCHANGE_RATE_UPDATE_MODE, ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_config.alternative_gas_token_config.mode"); + if (keccak256(abi.encodePacked(EXCHANGE_RATE_UPDATE_MODE)) == keccak256("Fixed")) { + string memory FIXED_EXCHANGE_RATE = cfg.readString(".gas-token.FIXED_EXCHANGE_RATE"); + vm.writeJson(FIXED_EXCHANGE_RATE, ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_config.alternative_gas_token_config.fixed_exchange_rate"); + vm.writeJson(FIXED_EXCHANGE_RATE, ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_config.alternative_gas_token_config.fixed_exchange_rate"); + } else if (keccak256(abi.encodePacked(EXCHANGE_RATE_UPDATE_MODE)) == keccak256("BinanceApi")) { + string memory TOKEN_SYMBOL_PAIR = cfg.readString(".gas-token.TOKEN_SYMBOL_PAIR"); + vm.writeJson(TOKEN_SYMBOL_PAIR, ROLLUP_CONFIG_PATH, ".l1_config.relayer_config.gas_oracle_config.alternative_gas_token_config.token_symbol_pair"); + vm.writeJson(TOKEN_SYMBOL_PAIR, ROLLUP_CONFIG_PATH, ".l2_config.relayer_config.gas_oracle_config.alternative_gas_token_config.token_symbol_pair"); + } else { + revert( + string( + abi.encodePacked( + "[ERROR] unsupported exchange rate update mode for gas oracle, mode: ", + EXCHANGE_RATE_UPDATE_MODE + ) + ) + ); + } + } + } } } From 0bcc9987d86c404a74852d19b3903e823198bb7d Mon Sep 17 00:00:00 2001 From: Morty Date: Thu, 17 Oct 2024 00:36:10 +0800 Subject: [PATCH 42/48] fix: update config file for gas token --- docker/config-example.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker/config-example.toml b/docker/config-example.toml index d5d90356..bd71c2d3 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -48,6 +48,10 @@ ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgres ALTERNATIVE_GAS_TOKEN_ENABLED = false # EXAMPLE_GAS_TOKEN_DECIMAL = 6 # L1_GAS_TOKEN = "0x68a041e7c20Afa4784b5d9C63246c89545Ac0E66" +GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = true +EXCHANGE_RATE_UPDATE_MODE = "Fixed" # the mode can be Fixed or BinanceApi +FIXED_EXCHANGE_RATE = "0.01" # affect when mode is Fixed +TOKEN_SYMBOL_PAIR = "UNIETH" # affect when mode is BinanceApi [sequencer] From 848f31a73b09537fc4406e0def7072962f15f74f Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 23 Oct 2024 15:42:19 +0800 Subject: [PATCH 43/48] feat: support deploy plonk verifier (#56) --- docker/config-example.toml | 18 +++++++++--------- docker/templates/config-contracts.toml | 1 + scripts/deterministic/Configuration.sol | 2 -- scripts/deterministic/Constants.sol | 3 +++ scripts/deterministic/DeployScroll.s.sol | 6 ++++++ src/test/deterministic/DeployScroll.t.sol | 10 +++++----- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index bd71c2d3..f5969cb6 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -16,7 +16,6 @@ L1_CONTRACT_DEPLOYMENT_BLOCK = 0 # note: for now we simply use Anvil's dev accounts DEPLOYER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" -OWNER_PRIVATE_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80" L1_COMMIT_SENDER_PRIVATE_KEY = "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d" L1_FINALIZE_SENDER_PRIVATE_KEY = "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a" @@ -33,7 +32,7 @@ L2_GAS_ORACLE_SENDER_ADDR = "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266" [db] -ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgresql://postgres:qwerty12345@postgresql:5432/scroll_admin_system?sslmode=disable" +ADMIN_SYSTEM_BACKEND_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" BLOCKSCOUT_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/blockscout" BRIDGE_HISTORY_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" CHAIN_MONITOR_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgresql:5432/scroll?sslmode=disable" @@ -48,10 +47,10 @@ ROLLUP_EXPLORER_DB_CONNECTION_STRING = "postgres://postgres:qwerty12345@postgres ALTERNATIVE_GAS_TOKEN_ENABLED = false # EXAMPLE_GAS_TOKEN_DECIMAL = 6 # L1_GAS_TOKEN = "0x68a041e7c20Afa4784b5d9C63246c89545Ac0E66" -GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = true -EXCHANGE_RATE_UPDATE_MODE = "Fixed" # the mode can be Fixed or BinanceApi -FIXED_EXCHANGE_RATE = "0.01" # affect when mode is Fixed -TOKEN_SYMBOL_PAIR = "UNIETH" # affect when mode is BinanceApi +GAS_ORACLE_INCORPORATE_TOKEN_EXCHANGE_RATE_ENANBLED = false +EXCHANGE_RATE_UPDATE_MODE = "Fixed" +FIXED_EXCHANGE_RATE = "0.01" +TOKEN_SYMBOL_PAIR = "UNIETH" [sequencer] @@ -66,6 +65,7 @@ L2GETH_CCC_NUMWORKERS = 5 MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 +MAX_CHUNK_IN_BATCH = 15 MAX_BATCH_IN_BUNDLE = 30 MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 TEST_ENV_MOCK_FINALIZE_ENABLED = true @@ -73,7 +73,7 @@ TEST_ENV_MOCK_FINALIZE_TIMEOUT_SEC = 300 [frontend] -EXTERNAL_RPC_URI_L1 ="http://l1-devnet.scrollsdk" +EXTERNAL_RPC_URI_L1 = "http://l1-devnet.scrollsdk" EXTERNAL_RPC_URI_L2 = "http://l2-rpc.scrollsdk" BRIDGE_API_URI = "http://bridge-history-api.scrollsdk/api" ROLLUPSCAN_API_URI = "http://rollup-explorer-backend.scrollsdk/api" @@ -89,15 +89,15 @@ L2_DEPLOYER_INITIAL_BALANCE = 1000000000000000000 [contracts] -DEPLOYMENT_SALT = "" +DEPLOYMENT_SALT = "devnetSalt-000" # contracts deployed outside this script L1_FEE_VAULT_ADDR = "0x0000000000000000000000000000000000000001" -L1_PLONK_VERIFIER_ADDR = "0x0000000000000000000000000000000000000001" [contracts.overrides] # L1_WETH = "0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14" +# L1_PLONK_VERIFIER = "0x0000000000000000000000000000000000000001" L2_MESSAGE_QUEUE = "0x5300000000000000000000000000000000000000" L1_GAS_PRICE_ORACLE = "0x5300000000000000000000000000000000000002" diff --git a/docker/templates/config-contracts.toml b/docker/templates/config-contracts.toml index 437772b6..dae22e78 100644 --- a/docker/templates/config-contracts.toml +++ b/docker/templates/config-contracts.toml @@ -6,6 +6,7 @@ L1_SCROLL_CHAIN_PROXY_ADDR = "" L1_SCROLL_MESSENGER_PROXY_ADDR = "" L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR = "" L1_ENFORCED_TX_GATEWAY_PROXY_ADDR = "" +L1_PLONK_VERIFIER_ADDR = "" L1_ZKEVM_VERIFIER_V2_ADDR = "" L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR = "" L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR = "" diff --git a/scripts/deterministic/Configuration.sol b/scripts/deterministic/Configuration.sol index ff912292..59708c97 100644 --- a/scripts/deterministic/Configuration.sol +++ b/scripts/deterministic/Configuration.sol @@ -72,7 +72,6 @@ abstract contract Configuration is Script { string internal DEPLOYMENT_SALT; address internal L1_FEE_VAULT_ADDR; - address internal L1_PLONK_VERIFIER_ADDR; // coordinator string internal CHUNK_COLLECTION_TIME_SEC; @@ -148,7 +147,6 @@ abstract contract Configuration is Script { DEPLOYMENT_SALT = cfg.readString(".contracts.DEPLOYMENT_SALT"); L1_FEE_VAULT_ADDR = cfg.readAddress(".contracts.L1_FEE_VAULT_ADDR"); - L1_PLONK_VERIFIER_ADDR = cfg.readAddress(".contracts.L1_PLONK_VERIFIER_ADDR"); CHUNK_COLLECTION_TIME_SEC = cfg.readString(".coordinator.CHUNK_COLLECTION_TIME_SEC"); BATCH_COLLECTION_TIME_SEC = cfg.readString(".coordinator.BATCH_COLLECTION_TIME_SEC"); diff --git a/scripts/deterministic/Constants.sol b/scripts/deterministic/Constants.sol index 27c71ef0..3238bef3 100644 --- a/scripts/deterministic/Constants.sol +++ b/scripts/deterministic/Constants.sol @@ -40,3 +40,6 @@ string constant ADMIN_SYSTEM_BACKEND_CONFIG_PATH = "./volume/admin-system-backen // plonk verifier configs bytes32 constant V4_VERIFIER_DIGEST = 0x0a1904dbfff4614fb090b4b3864af4874f12680c32f07889e9ede8665097e5ec; + +// plonk verifier v0.13.1 creation code +bytes constant PLONK_VERIFIER_CREATION_CODE = hex"62000025565b60006040519050600081036200001a57606090505b818101604052919050565b6136a3620000338162000005565b816200003f82398181f3fe60017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd477f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001610151565b60007f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4782107f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47841080821692505050600082146000841480821780158481169450505050507f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478384097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478482097f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47600382088381148581169550505050505092915050565b8060003506602052806020350660405280604035066060528060603506608052806080350660a0528060a0350660c0528060c0350660e0528060e0350661010052806101003506610120528061012035066101405280610140350661016052806101603506610180528061018035066101a052806101a035066101c052806101c035066101e052806101e0350661020052806102003506610220528061022035066102405280610240350661026052806102603506610280528061028035066102a052806102a035066102c052806102c035066102e052806102e0350661030052806103003506610320527f083d7f8552bdf1dd98458c19d469c458809424d40c483abc2e528b75a6f0f1466000526103203580610340526103403580610360528461027d8284610048565b169450505061038060002061038052610380518181066103a052806103c0525061036035806103e052610380358061040052846102ba8284610048565b169450505060606103c02061042052610420518181066104405280610460525060016104805360216104602061048052610480518181066104a052806104c052506103a035806104e0526103c0358061050052846103188284610048565b16945050506103e03580610520526104003580610540528461033a8284610048565b16945050506104203580610560526104403580610580528461035c8284610048565b169450505060e06104c0206105a0526105a0518181066105c052806105e05250610460358061060052610480358061062052846103998284610048565b16945050506104a03580610640526104c0358061066052846103bb8284610048565b16945050506104e035806106805261050035806106a052846103dd8284610048565b169450505061052035806106c05261054035806106e052846103ff8284610048565b16945050506101206105e0206107005261070051818106610720528061074052508061056035066107605280610580350661078052806105a035066107a052806105c035066107c052806105e035066107e0528061060035066108005280610620350661082052806106403506610840528061066035066108605280610680350661088052806106a035066108a052806106c035066108c052806106e035066108e052806107003506610900528061072035066109205280610740350661094052806107603506610960526102406107402061098052610980518181066109a052806109c0525060016109e05360216109c0206109e0526109e051818106610a005280610a2052506107803580610a40526107a03580610a6052846105248284610048565b16945050506060610a2020610a8052610a8051818106610aa05280610ac052506107c03580610ae0526107e03580610b0052846105618284610048565b169450505060205160405160581b8101905060605160b01b8101905080610b205260805160a05160581b8101905060c05160b01b8101905080610b4052846105a98284610048565b169450505060e0516101005160581b810190506101205160b01b8101905080610b6052610140516101605160581b810190506101805160b01b8101905080610b8052846105f68284610048565b169450505080610720516107205109610ba05280610ba051610ba05109610bc05280610bc051610bc05109610be05280610be051610be05109610c005280610c0051610c005109610c205280610c2051610c205109610c405280610c4051610c405109610c605280610c6051610c605109610c805280610c8051610c805109610ca05280610ca051610ca05109610cc05280610cc051610cc05109610ce05280610ce051610ce05109610d005280610d0051610d005109610d205280610d2051610d205109610d405280610d4051610d405109610d605280610d6051610d605109610d805280610d8051610d805109610da05280610da051610da05109610dc05280610dc051610dc05109610de05280610de051610de05109610e005280610e0051610e005109610e205280610e2051610e205109610e405280610e4051610e405109610e605280610e6051610e605109610e805280610e8051610e805109610ea05280610ea051610ea05109610ec052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610ec05108610ee052807f30644e66c81e03716be83b486d6feabcc7ddd0fe6cbf5e72d585d142f7829b05610ee05109610f0052807f2d19f86a2342079b8c1a6417471d461040256eaa689be51f08e6a92e1243ce65610f005109610f2052807f034a5608bdef988e2c35e19f3a64124ce80e799e111d8b723afb4c65ddbc319c6107205108610f4052807f24a1fcd63e9f03b27281db85fe631ec8e5c466f8178a4ee94d4942b7ccd90e1c610f005109610f6052807f0bc2519ca2929c7745ce6a30831e3994426f8150622f21a7f698b2dc2326f1e56107205108610f8052807f0d5eb4c216db2c3262de3f6a2ef71a9be95ff21a7a1a50ed069d6131e7d54e5f610f005109610fa052807f230599b0ca5673f75572064c528a3dc13ed3f62dff9f1fa43d449462082ab1a26107205108610fc052807f26501ebfe559ea5826f023d3e76e4b66f170cd940408eb5590a4075c80b498d6610f005109610fe052807f0a142fb2fbd7b5d1916021e29a130cf636c31ab475b0853bb33dee376f4b672b610720510861100052807f082a7bd4c0a7e4352229d332c27a160da18f0d7c651f3047df41b80345532f6e610f00510961102052807f2839d29e2089bbf496267283bf07424f86a4dacc149a404964a03d90aaacd093610720510861104052807f19277f31ecb5bfe8604677099c09556812b0b5c50cceb2b584098183a5a6c5c8610f00510961106052807f173ccf40f47be0415809ceace57802f5158332836ceabddbbfd874104a593a39610720510861108052807f20bab6e5f766b4edf82399e9c5ff0e40d4b6875321a3d8020e18521d8f5c7241610f0051096110a052807f0fa9978ce9caeb3bc02cabccbb824a1c537d60f55815988f35c9a37660a38dc061072051086110c052806001610f0051096110e052807f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510861110052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec97610f00510961112052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136a610720510861114052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd160610f00510961116052807f22cf783949fb23920f632ef506a6aa2402084d503eedd291044d337cbfc22ea1610720510861118052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a0610f0051096111a052807e2a19e332d7512599f4404d67c5444dc00d6a18c45f1e6ec131c829dff1fe6161072051086111c052807f1951441010b2b95a6e47a6075066a50a036f5ba978c050f2821df86636c0facb610f0051096111e052807f17130a62d07ee6cf4a089faf311ab35324c48c9f00f91f9ec1c3fd2db93f0536610720510861120052807f04fe6e3fa02c3830525c10d7bbf567639bfc836de8fe4e471c889a638d381c71610f00510961122052807f2b65e033410567f965f434dec58bf0f98c3764da90bb224a27595b3062c7e390610720510861124052807f24db2e49a2c215211bae763372d0d8b05d0140adbc6d9d63f2a226fb711fd873610f00510961126052807f0b8920293e6f8b089ca1cf830eb07faccb32a79abd4bd32d513fce987ee0278e610720510861128052807f0f6afbf59e2fef78443acf353ca6d17cfc07ebc6343141cd56a9102bd4864004610f0051096112a052807f20f9527d4301b0b17415768144da86e02c2bfc8245882ec3ed38e5681b79bffd61072051086112c052807f1283ba6f4b7b1a76ba2008fe823128bea4adb9269cbfd7c41c223be65bc60863610f0051096112e052807f1de0940395b685b2fe303cb7ff502f9e83862f21dcf998cd27bfb9ad9439f79e610720510861130052807f10e6c9ec7941500e1b1095e82fb0034bd9e95777ca9ae5ce296eadc089110518610f00510961132052807f1f7d848667f0501b9d3fafce51d155114e4a90d0af1e8ac31a7347d366eefae9610720510861134052807f25ad5db2a6bf79a14fd0d2ffd3d0927af7fdd30bce40f88fb46774fd262d7673610f00510961136052807f0ab6f0c03a722688687f72b6adb0c5e23036153cab7878018f7a8096c9d2898e610720510861138052807f2cd3ee06866876806a4a382f7a95576f34fd9ce6aad8bf350670ed33fe3259ac610f0051096113a052807f0390606c5ac929a94e060d8706ec00edf3364b61cee0b15c3d71085ff1cda65561072051086113c052807f2f835d9f4207df4efa4ffa0b2bbf9a4f54221c57cc506b7a5f8dae90bd2e3d0a610f0051096113e052807ee0f0d39f29c0dabe004bab55c1be0dd411cbf0ad690516e454470332d1c2f7610720510861140052807f30526acf1fa80f36309d80530d854ae7d52fc97bcb8d0a6a2a7f852e7b6e9d79610f00510961142052807e11e3a3c18990f387b2c56373fc0d7553041eccae2c66271962706574916288610720510861144052807f0af04af9c243a8b4b8767330b8dae01f562d7641cdf0a0c4d288e395c0aebb72610f00510961146052807f257403791eedf774ffd9d285c8a6783dd2067206abc8cfcc715911fe2f51448f610720510861148052807f2387d5be5175ba27fd2f8779b460ffdd830e06cd2f6bcf30c3715fbed25b1b67610f0051096114a052807f0cdc78b48fbbe601bb20be3ccd20587fa525e17b4a4da160807095d51da4e49a61072051086114c052807f18c95f1ae6514e11a1b30fd7923947c5ffcec5347f16e91b4dd654168326bede610f0051096114e052807f179aef57fae05218169d35deef48109728652313faa28775f60ba17d6cd94123610720510861150052807f1ed7bccd53b52d451436ae36d9f0225657083d7e909edb5560d7ea488aebe0d1610f00510961152052807f118c91a58d7c72e4a419977fa7913606d12baac9e91a953be30a0b4b65141f30610720510861154052807f0ba3551f265c0941ccb3766d47b26720ad620a597137ff3c84310bd3e28e26c9610f00510961156052807f24c0f953bad596e7eb9ccf4939cef13c7ad1ddef08817154bfb0e9c00d71d938610720510861158052807f0803f4ae22d04b4c9c282c70c843e12bfb2d84b89bd7ef84dc3b90d60053b1c8610f0051096115a052807f286059c4be6154dd1c281945b93d77312d06638fdde1810c67a664bdefac4e3961072051086115c052807f29aa84e8187de51daa6de67f44fe365fbb789d1e5f97bc95844628487ebd3a0d610f0051096115e052807f06b9c98ac8b3bb0c0de25f373c8321fd6cbb4b2a1a21b3fbbf9bcd4b7142c5f4610720510861160052807f0e4fc6c7e1947e44222db52506e305b8a9ad70f6a834db5a4778d4a30f1c6f92610f00510961162052807f221487aaff9d21e5962290917a9e52a47e867751d1849536fc6920f0e0e3906f610720510861164052807f20816bee57855658ecd8a204faf6bced826a725b63c6a1a388b4609a2478809f610f00510961166052807f0fe2e28489ac49d0cb77a3b1868a9b6fa5c975ed15f2ceedbb2d94f9cb877f62610720510861168052807f0d44b8855e09d5ae332469459793c1444814f6d137f9e93e780bd41c97e37caa610f0051096116a052807f231f95ed8327ca7b852bdc70e9ed9718e01ef17741bf8752cbd62177581c835761072051086116c052807f07fe49da5568a43070d955e0d212d956e1ff8abd41a763c737e292bee0476699610f0051096116e052807f286604988bc8fbf94776efd5af6e7f0646345d8b38120cca0bff62d50fb89968610720510861170052610f40518181610f805109905080611720528181610fc051099050806117405281816110005109905080611760528181611040510990508061178052818161108051099050806117a05281816110c051099050806117c052818161110051099050806117e0528181611140510990508061180052818161118051099050806118205281816111c051099050806118405281816112005109905080611860528181611240510990508061188052818161128051099050806118a05281816112c051099050806118c052818161130051099050806118e0528181611340510990508061190052818161138051099050806119205281816113c051099050806119405281816114005109905080611960528181611440510990508061198052818161148051099050806119a05281816114c051099050806119c052818161150051099050806119e05281816115405109905080611a005281816115805109905080611a205281816115c05109905080611a405281816116005109905080611a605281816116405109905080611a805281816116805109905080611aa05281816116c05109905080611ac05281816117005109905080611ae0528181610ee05109905080611b0052506020611b40526020611b60526020611b8052611b0051611ba0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff611bc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001611be0528260016020611b2060c0611b4060055afa14169250611b20516000610ee05190508282611ae05109610ee0528282820991506117005190508282611ac05109611700528282820991506116c05190508282611aa051096116c0528282820991506116805190508282611a805109611680528282820991506116405190508282611a605109611640528282820991506116005190508282611a405109611600528282820991506115c05190508282611a2051096115c0528282820991506115805190508282611a0051096115805282828209915061154051905082826119e051096115405282828209915061150051905082826119c05109611500528282820991506114c051905082826119a051096114c0528282820991506114805190508282611980510961148052828282099150611440519050828261196051096114405282828209915061140051905082826119405109611400528282820991506113c0519050828261192051096113c052828282099150611380519050828261190051096113805282828209915061134051905082826118e051096113405282828209915061130051905082826118c05109611300528282820991506112c051905082826118a051096112c0528282820991506112805190508282611880510961128052828282099150611240519050828261186051096112405282828209915061120051905082826118405109611200528282820991506111c0519050828261182051096111c052828282099150611180519050828261180051096111805282828209915061114051905082826117e051096111405282828209915061110051905082826117c05109611100528282820991506110c051905082826117a051096110c052828282099150611080519050828261178051096110805282828209915061104051905082826117605109611040528282820991506110005190508282611740510961100052828282099150610fc051905082826117205109610fc052828282099150610f805190508282610f405109610f805282828209915081610f4052505080610f4051610f205109611c005280610f8051610f605109611c205280610fc051610fa05109611c40528061100051610fe05109611c605280611040516110205109611c805280611080516110605109611ca052806110c0516110a05109611cc05280611100516110e05109611ce05280611140516111205109611d005280611180516111605109611d2052806111c0516111a05109611d405280611200516111e05109611d605280611240516112205109611d805280611280516112605109611da052806112c0516112a05109611dc05280611300516112e05109611de05280611340516113205109611e005280611380516113605109611e2052806113c0516113a05109611e405280611400516113e05109611e605280611440516114205109611e805280611480516114605109611ea052806114c0516114a05109611ec05280611500516114e05109611ee05280611540516115205109611f005280611580516115605109611f2052806115c0516115a05109611f405280611600516115e05109611f605280611640516116205109611f805280611680516116605109611fa052806116c0516116a05109611fc05280611700516116e05109611fe05280602051611ce05109818183604051611d005109089050818183606051611d205109089050818183608051611d40510908905081818360a051611d60510908905081818360c051611d80510908905081818360e051611da0510908905081818361010051611dc0510908905081818361012051611de0510908905081818361014051611e00510908905081818361016051611e20510908905081818361018051611e4051090890508181836101a051611e6051090890508181836101c051611e8051090890508181836101e051611ea0510908905081818361020051611ec0510908905081818361022051611ee0510908905081818361024051611f00510908905081818361026051611f20510908905081818361028051611f4051090890508181836102a051611f6051090890508181836102c051611f8051090890508181836102e051611fa0510908905081818361030051611fc0510908905081818361032051611fe0510908905080612000525080610780516107a05109612020528061202051610760510861204052806107c0518203612040510861206052806108205161206051096120805280612080516105c051096120a052806108e05182036001086120c05280611ce0516120c051096120e052806120e0516120a051086121005280612100516105c0510961212052806108e0516108e0510961214052806108e051820361214051086121605280611c0051612160510961218052806121805161212051086121a052806121a0516105c051096121c05280611c005182036001086121e05280611c4051611c2051086122005280611c605161220051086122205280611c805161222051086122405280611ca05161224051086122605280611cc051612260510861228052806122805182036121e051086122a052806104405161088051096122c052806122c0516107e051086122e052806104a0516122e051086123005280610440516108a05109612320528061232051610760510861234052806104a051612340510861236052806123005161236051096123805280610440516108c051096123a052806123a05161200051086123c052806104a0516123c051086123e05280612380516123e05109612400528061090051612400510961242052806104405160010961244052806124405161072051096124605280612460516107e0510861248052806104a05161248051086124a05280610440517f09226b6e22c6f0ca64ec26aad4c86e715b5f898e5e963f25870e56bbe533e9a2096124c052806124c05161072051096124e052806124e051610760510861250052806104a051612500510861252052806124a05161252051096125405280610440517f13b360d4e82fe915fed16081038f98c211427b87a281bd733c277dbadf10372b09612560528061256051610720510961258052806125805161200051086125a052806104a0516125a051086125c05280612540516125c051096125e052806108e0516125e051096126005280612600518203612420510861262052806122a05161262051096126405280612640516121c051086126605280612660516105c051096126805280611ce05161092051096126a052806126a05161268051086126c052806126c0516105c051096126e05280611c005161092051096127005280612700516126e051086127205280612720516105c051096127405280610440516108005108612760528061084051610760510961278052806104405161278051086127a05280612760516127a051096127c0528061092051820361094051086127e052806127c0516127e051096128005280610960516127a05109612820528061282051820361276051086128405280612840518203612800510861286052806122a051612860510961288052806128805161274051086128a05280610ec051610ec051096128c05280610ec0516128c051096128e05280610ec0516128e051096129005280610ec05160010961292052806128c05160010961294052806128e0516001096129605280610ee0516128a05109612980528061072051610ba051096129a05280600161072051096129c052806129c0518203610aa051086129e052807f0d94d63997367c97a8ed16c17adaae39262b9af83acb9e003f94c217303dd1606107205109612a005280612a00518203610aa05108612a2052807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec976107205109612a405280612a40518203610aa05108612a6052807f303a348fae5a4f041e5c056919bc140f68267e2fb55a522282b02d6a100e01a06107205109612a805280612a80518203610aa05108612aa052807f2eedbf565be4b0b88a0e251d750f7559486d77bea4d5c9612ce3041295d380d5610aa051098181837f01768f1c854cef712e4220990c71e303dfc67089d4e3a73016fef1815a2c7f2c610720510908905080612ac05250807f0cf547ca658485dd9a20bd27b080d3147ec1caa826e725f7f7989fc9668dd16f610aa051098181837f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610720510908905080612ae05250807f077ebe9a531776ef7c9e90d5a0685181f70e74298eca38a6c92d84d4c0457ceb610aa051098181837e32f4eea6716d08d38119c3d378a36e865ffacfa73eb2357603f3f3368c88c6610720510908905080612b005250807f0d71dfba734c88cf774db4e0e4f959cb98acfbbb1fc789e5167bbca1fcafd24e610aa051098181837f25ea65fea4371c04dd1eaf23d69f2e0f9524ef5b9845d01cdb218e89a8052321610720510908905080612b205250806129e051600109612b405280612a6051612b405109612b605280612a2051612b605109612b805280612aa051612b805109612ba052807f12a9c31703ccb0bcd5b5b57cd4dd977803fa8c04c096f4fa7c9164c78338136b610aa051098181837f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610720510908905080612bc05250807f1dba8b5bdd64ef6ce29a9039aca3c0e524395c43b9227b96c75090cc6cc7ec96610aa051098181837f1025b522462e72d539ad797831c912abfe0dc14b7e56dd9687bbceb53c8a1b37610720510908905080612be05250806001610aa051098181837f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000000610720510908905080612c005250612ac0518181612ae05109905080612c20528181612b005109905080612c40528181612b205109905080612c60528181612bc05109905080612c80528181612be05109905080612ca0528181612b605109905080612cc0528181612c005109905080612ce0528181612b405109905080612d0052506020612d40526020612d60526020612d8052612d0051612da0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612dc0527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612de0528260016020612d2060c0612d4060055afa14169250612d20516000612b405190508282612ce05109612b4052828282099150612c005190508282612cc05109612c0052828282099150612b605190508282612ca05109612b6052828282099150612be05190508282612c805109612be052828282099150612bc05190508282612c605109612bc052828282099150612b205190508282612c405109612b2052828282099150612b005190508282612c205109612b0052828282099150612ae05190508282612ac05109612ae05282828209915081612ac0525050612ac0518181612ae0510890508181612b00510890508181612b205108905080612e00525080612b6051612ba05109612e2052612bc0518181612be05108905080612e40525080612b4051612ba05109612e6052612c005180612e805250612e00518181612e405109905080612ea0528181612e805109905080612ec052506020612f00526020612f20526020612f4052612ec051612f60527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593efffffff612f80527f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001612fa0528260016020612ee060c0612f0060055afa14169250612ee0516000612e805190508282612ea05109612e8052828282099150612e405190508282612e005109612e405282828209915081612e0052505080612e4051612e205109612fc05280612e8051612e605109612fe052806109a0516109a0510961300052806109a051613000510961302052806109a051613020510961304052806109a051613040510961306052806109a051613060510961308052806109a05161308051096130a052806109a0516130a051096130c052806109a0516130c051096130e052806109a0516130e051096131005280610a0051610a0051096131205280610a005161312051096131405280612ac0516107605109818183612ae0516107805109089050818183612b00516107a05109089050818183612b20516107c0510908905080613160525080612e0051613160510961318052806001613180518303096131a0528060016131a051096131c05280612e20516001096131e05280612bc0516108e05109818183612be051610900510908905080613200525080612fc05161320051096132205280600161322051830309613240528060016131e051096132605280612bc0516109205109818183612be051610940510908905080613280525080612fc05161328051096132a052806109a0516132a0518303096132c052806109a0516131e051096132e052806132c05161324051086133005280610a005161330051096133205280610a005161326051096133405280610a00516132e051096133605280613320516131c051086133805280612e60516001096133a05280612c00516109605109806133c0525080612fe0516133c051096133e0528060016133e051830309613400528060016133a051096134205280612c00516107e0510980613440525080612fe051613440510961346052806109a0516134605183030961348052806109a0516133a051096134a052806134805161340051086134c05280612c00516108005109806134e0525080612fe0516134e05109613500528061300051613500518303096135205280613000516133a051096135405280613520516134c051086135605280612c0051610820510980613580525080612fe05161358051096135a05280613020516135a0518303096135c05280613020516133a051096135e052806135c05161356051086136005280612c0051610840510980613620525080612fe0516136205109613640528061304051613640518303096136605280613040516133a0510961368052806136605161360051086136a05280612c00516108805109806136c0525080612fe0516136c051096136e05280613060516136e0518303096137005280613060516133a051096137205280613700516136a051086137405280612c00516108a0510980613760525080612fe0516137605109613780528061308051613780518303096137a05280613080516133a051096137c052806137a05161374051086137e05280612c00516108c0510980613800525080612fe051613800510961382052806130a0516138205183030961384052806130a0516133a051096138605280613840516137e051086138805280612e605161292051096138a05280612e605161294051096138c05280612e605161296051096138e05280612c0051612980510980613900525080612fe051613900510961392052806130c0516139205183030961394052806130c0516133a0510961396052806130c0516138a0510961398052806130c0516138c051096139a052806130c0516138e051096139c052806139405161388051086139e05280612c0051610860510980613a00525080612fe051613a005109613a2052806130e051613a2051830309613a4052806130e0516133a05109613a605280613a40516139e05108613a80528061312051613a805109613aa05280613120516134205109613ac05280613120516134a05109613ae05280613120516135405109613b005280613120516135e05109613b205280613120516136805109613b405280613120516137205109613b605280613120516137c05109613b805280613120516138605109613ba05280613120516139605109613bc05280613120516139805109613be05280613120516139a05109613c005280613120516139c05109613c20528061312051613a605109613c405280613aa0516133805108613c605280612ba051600109613c805280610aa051600109613ca0526001613cc0526002613ce052613c6051613d00528260016040613cc06060613cc060075afa14169250613cc051613d2052613ce051613d405261034051613d605261036051613d80528260016040613d206080613d2060065afa141692506104e051613da05261050051613dc05261334051613de0528260016040613da06060613da060075afa14169250613d2051613e0052613d4051613e2052613da051613e4052613dc051613e60528260016040613e006080613e0060065afa1416925061052051613e805261054051613ea05261336051613ec0528260016040613e806060613e8060075afa14169250613e0051613ee052613e2051613f0052613e8051613f2052613ea051613f40528260016040613ee06080613ee060065afa141692506103e051613f605261040051613f8052613ac051613fa0528260016040613f606060613f6060075afa14169250613ee051613fc052613f0051613fe052613f605161400052613f8051614020528260016040613fc06080613fc060065afa141692507f2ad47afc517e78898ecd3a5c20c46975e6c50bf030951071878c7470e2f3f9f1614040527f1ceaca4426cdc11c593eee4db1e3981bfd8bd0eba770b93aa85f5f15dc16096061406052613ae051614080528260016040614040606061404060075afa14169250613fc0516140a052613fe0516140c052614040516140e052614060516141005282600160406140a060806140a060065afa141692507f0fb05ccb81603592ce60bd6199890470ef6f9caca3c17570df7701d70a2dd957614120527f1cc1301d6d462edf2e79083532a337ef3f087fbf0b9516d08074784017e10c7e61414052613b0051614160528260016040614120606061412060075afa141692506140a051614180526140c0516141a052614120516141c052614140516141e0528260016040614180608061418060065afa141692507f1e69edc3b54a25a5be1efb7515b5eaa259569e44cf6e7b99887bd2015311104f614200527f293e037f34e8ad87a6ebea272575c751f96a1e0acbf05bf5774e0581c3cc382361422052613b2051614240528260016040614200606061420060075afa1416925061418051614260526141a05161428052614200516142a052614220516142c0528260016040614260608061426060065afa141692507f0cf666852fd76b36f03572da1111ea68014217801887369fd35f9460f6bb13246142e0527f230bb407465f3dcda6711ec136903711485b30046005c0dd769bd85d1cc8a56761430052613b40516143205282600160406142e060606142e060075afa14169250614260516143405261428051614360526142e05161438052614300516143a0528260016040614340608061434060065afa141692507f2c2ef5dd4ea527c7b6a1adb979cf19e316cf50515b2225ecd040f40f46ad8fc66143c0527f2cd240820bffbbfa44c0832dfe16e8a40c4e75d800f58f7576733ca37a9c73696143e052613b60516144005282600160406143c060606143c060075afa14169250614340516144205261436051614440526143c051614460526143e051614480528260016040614420608061442060065afa141692507f1e2415bae32b721ff7b95b1766a3d0a4ea86d62fc8b4ed864092e8be29b375b46144a0527f0193d85fa914927d0567822f343ead8682e19e1948bdfe0d70e5ce64eaddf26a6144c052613b80516144e05282600160406144a060606144a060075afa14169250614420516145005261444051614520526144a051614540526144c051614560528260016040614500608061450060065afa141692507f02b01e53fe9c70fbc4e13606ffb809f58993a5b31d9e9a69e5c86b2833b52ac8614580527f21fe9d89f5e7d29aa77fb345a045fabbcc5f2be8bbd2f571306475118175ae306145a052613ba0516145c0528260016040614580606061458060075afa14169250614500516145e052614520516146005261458051614620526145a0516146405282600160406145e060806145e060065afa1416925061060051614660526106205161468052613bc0516146a0528260016040614660606061466060075afa141692506145e0516146c052614600516146e0526146605161470052614680516147205282600160406146c060806146c060065afa1416925061064051614740526106605161476052613be051614780528260016040614740606061474060075afa141692506146c0516147a0526146e0516147c052614740516147e052614760516148005282600160406147a060806147a060065afa1416925061068051614820526106a05161484052613c0051614860528260016040614820606061482060075afa141692506147a051614880526147c0516148a052614820516148c052614840516148e0528260016040614880608061488060065afa141692506106c051614900526106e05161492052613c2051614940528260016040614900606061490060075afa1416925061488051614960526148a05161498052614900516149a052614920516149c0528260016040614960608061496060065afa14169250610560516149e05261058051614a0052613c4051614a205282600160406149e060606149e060075afa1416925061496051614a405261498051614a60526149e051614a8052614a0051614aa0528260016040614a406080614a4060065afa14169250610a4051614ac052610a6051614ae052613c80518103614b00528260016040614ac06060614ac060075afa14169250614a4051614b2052614a6051614b4052614ac051614b6052614ae051614b80528260016040614b206080614b2060065afa14169250610ae051614ba052610b0051614bc052613ca051614be0528260016040614ba06060614ba060075afa14169250614b2051614c0052614b4051614c2052614ba051614c4052614bc051614c60528260016040614c006080614c0060065afa14169250614c0051614c8052614c2051614ca052610ae051614cc052610b0051614ce052610b2051614d0052610b4051614d2052610b6051614d4052610b8051614d6052610100614c8020614d805280614d805106614da05280614da051614da05109614dc05280614da051600109614de052614d0051614e0052614d2051614e2052614de051614e40528260016040614e006060614e0060075afa14169250614c8051614e6052614ca051614e8052614e0051614ea052614e2051614ec0528260016040614e606080614e6060065afa14169250614d4051614ee052614d6051614f0052614de051614f20528260016040614ee06060614ee060075afa14169250614cc051614f4052614ce051614f6052614ee051614f8052614f0051614fa0528260016040614f406080614f4060065afa14169250614e6051614fc052614e8051614fe0527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c2615000527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed615020527f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b615040527f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa61506052614f405161508052614f60516150a0527f186282957db913abd99f91db59fe69922e95040603ef44c0bd7aa3adeef8f5ac6150c0527f17944351223333f260ddc3b4af45191b856689eda9eab5cbcddbbe570ce860d26150e0527f06d971ff4a7467c3ec596ed6efc674572e32fd6f52b721f97e35b0b3d3546753615100527f06ecdb9f9567f59ed2eee36e1e1d58797fd13cc97fafc2910f5e8a12f202fa9a615120528260016020614fc0610180614fc060085afa14169250826001614fc051141692508261369e57600080fd5b600080f3"; diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index e18e4e1d..90162acd 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -133,6 +133,7 @@ contract DeployScroll is DeterministicDeployment { address internal L1_WETH_GATEWAY_IMPLEMENTATION_ADDR; address internal L1_WETH_GATEWAY_PROXY_ADDR; address internal L1_WHITELIST_ADDR; + address internal L1_PLONK_VERIFIER_ADDR; address internal L1_ZKEVM_VERIFIER_V2_ADDR; address internal L1_GAS_TOKEN_ADDR; address internal L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR; @@ -364,6 +365,7 @@ contract DeployScroll is DeterministicDeployment { deployL1ScrollChainProxy(); deployL1ScrollMessengerProxy(); deployL1EnforcedTxGateway(); + deployL1PlonkVerifier(); deployL1ZkEvmVerifier(); deployL1MultipleVersionRollupVerifier(); deployL1MessageQueue(); @@ -545,6 +547,10 @@ contract DeployScroll is DeterministicDeployment { ); } + function deployL1PlonkVerifier() private { + L1_PLONK_VERIFIER_ADDR = deploy("L1_PLONK_VERIFIER", PLONK_VERIFIER_CREATION_CODE); + } + function deployL1ZkEvmVerifier() private { bytes memory args = abi.encode(notnull(L1_PLONK_VERIFIER_ADDR), V4_VERIFIER_DIGEST); L1_ZKEVM_VERIFIER_V2_ADDR = deploy("L1_ZKEVM_VERIFIER_V2", type(ZkEvmVerifierV2).creationCode, args); diff --git a/src/test/deterministic/DeployScroll.t.sol b/src/test/deterministic/DeployScroll.t.sol index a30a47be..de069cad 100644 --- a/src/test/deterministic/DeployScroll.t.sol +++ b/src/test/deterministic/DeployScroll.t.sol @@ -26,7 +26,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { predictAllContracts(); checkCommonAddresses(); - assertEq(0xc42A1Bf23C85B87f0630a4aBD179900c96BC2929, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x15046c2d09354551A19d9eaD13ca19A41AAa6345, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); assertEq(0x904699c3146cE384a5B47Ebf7Ddf8c592E203F2C, L1_ETH_GATEWAY_PROXY_ADDR); assertEq(0x5e27Eea664f5aB1849025195DF2b7e619f904358, L1_WETH_GATEWAY_PROXY_ADDR); assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_ADDR); @@ -48,7 +48,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { predictAllContracts(); checkCommonAddresses(); - assertEq(0xf3f7244F57171A29ed963F8BA1ec48C361BAac67, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x123f428B99F6B65B335eb756a5abA2a59AB56F40, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); assertEq(0x904699c3146cE384a5B47Ebf7Ddf8c592E203F2C, L1_ETH_GATEWAY_PROXY_ADDR); assertEq(0x5e27Eea664f5aB1849025195DF2b7e619f904358, L1_WETH_GATEWAY_PROXY_ADDR); assertEq(0x0000000000000000000000000000000000000000, L1_GAS_TOKEN_ADDR); @@ -70,7 +70,7 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { predictAllContracts(); checkCommonAddresses(); - assertEq(0xc42A1Bf23C85B87f0630a4aBD179900c96BC2929, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); + assertEq(0x15046c2d09354551A19d9eaD13ca19A41AAa6345, L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR); assertEq(0x0000000000000000000000000000000000000000, L1_ETH_GATEWAY_PROXY_ADDR); assertEq(0x0000000000000000000000000000000000000000, L1_WETH_GATEWAY_PROXY_ADDR); assertEq(0xd7919F1390711D610961cb27D2BE0BD2Ec1E5704, L1_GAS_TOKEN_ADDR); @@ -95,8 +95,8 @@ contract DeployScrollTest is TestBase, StdAssertions, DeployScroll { assertEq(0xC97658507021A2EB494298CAA815B83BC3DE935b, L1_SCROLL_MESSENGER_PROXY_ADDR); assertEq(0x02476A470215Bd2F268179492431230C5Dc607C8, L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR); assertEq(0xcCBBecF7B9D6e1CD2dF1aEFab510c0697d04AC1f, L1_ENFORCED_TX_GATEWAY_PROXY_ADDR); - assertEq(0xC74599653677A4795d79CBd6D4a5AE2D4615384D, L1_ZKEVM_VERIFIER_V2_ADDR); - assertEq(0x4aAD8eF23d69f5b6Ca8bD58A0789950084116baF, L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR); + assertEq(0x7e3852FA81eB752e20F2Ef22dC31eaF0E79dB1C1, L1_ZKEVM_VERIFIER_V2_ADDR); + assertEq(0x2Fd0514AfEC744cA51fF5FC3567Bf4CeaB4356f7, L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR); assertEq(0x650522433606B6f232cA0C8d0D5245b6571c180a, L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR); assertEq(0x09a4C2780ECBfF76a58957b93ea66D9727eF6A4C, L1_MESSAGE_QUEUE_PROXY_ADDR); assertEq(0xd18137D9b43061477C3DA4453E2F3D1B03453efc, L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR); From 40bd3e72defc724bd62a36d214248357fa21c837 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Wed, 30 Oct 2024 22:16:43 +0800 Subject: [PATCH 44/48] update chain monitor config (#59) --- docker/templates/balance-checker-config.json | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docker/templates/balance-checker-config.json b/docker/templates/balance-checker-config.json index 79011d94..fdd59f36 100644 --- a/docker/templates/balance-checker-config.json +++ b/docker/templates/balance-checker-config.json @@ -4,37 +4,43 @@ "rpc_url": "${SCROLL_L1_RPC}", "min_balance_ether": "10", "address": "${L1_COMMIT_SENDER_ADDRESS}", - "name": "L1_COMMIT_SENDER" + "name": "L1_COMMIT_SENDER", + "confirmation_number": 1 }, { "rpc_url": "${SCROLL_L1_RPC}", "min_balance_ether": "10", "address": "${L1_FINALIZE_SENDER_ADDRESS}", - "name": "L1_FINALIZE_SENDER" + "name": "L1_FINALIZE_SENDER", + "confirmation_number": 1 }, { "rpc_url": "${SCROLL_L1_RPC}", "min_balance_ether": "1.1", "address": "${L1_GAS_ORACLE_SENDER_ADDRESS}", - "name": "L1_GAS_ORACLE_SENDER" + "name": "L1_GAS_ORACLE_SENDER", + "confirmation_number": 1 }, { "rpc_url": "${SCROLL_L1_RPC}", "min_balance_ether": "0", "address": "${L1_SCROLL_FEE_VAULT_ADDRESS}", - "name": "L1_SCROLL_FEE_VAULT" + "name": "L1_SCROLL_FEE_VAULT", + "confirmation_number": 1 }, { "rpc_url": "${SCROLL_L2_RPC}", "min_balance_ether": "1.1", "address": "${L2_GAS_ORACLE_SENDER_ADDRESS}", - "name": "L2_GAS_ORACLE_SENDER" + "name": "L2_GAS_ORACLE_SENDER", + "confirmation_number": 1 }, { "rpc_url": "${SCROLL_L2_RPC}", "min_balance_ether": "0", "address": "${L2_TX_FEE_VAULT_ADDR}", - "name": "L2_TX_FEE_VAULT" + "name": "L2_TX_FEE_VAULT", + "confirmation_number": 1 } ], "JOB_INTERVAL_SECS": 60, From a507de4d144db7454ae497af71895d23bc571b88 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 31 Oct 2024 16:13:33 +0800 Subject: [PATCH 45/48] chore: clean up rollup config values (#60) --- docker/config-example.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/docker/config-example.toml b/docker/config-example.toml index f5969cb6..7e8bc9fd 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -65,7 +65,6 @@ L2GETH_CCC_NUMWORKERS = 5 MAX_TX_IN_CHUNK = 100 MAX_BLOCK_IN_CHUNK = 100 -MAX_CHUNK_IN_BATCH = 15 MAX_BATCH_IN_BUNDLE = 30 MAX_L1_MESSAGE_GAS_LIMIT = 10_000_000 TEST_ENV_MOCK_FINALIZE_ENABLED = true From a976769a2b07ceea7dcd10d0a7a20ad41e010528 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Tue, 5 Nov 2024 04:05:57 +0800 Subject: [PATCH 46/48] feat: support contracts verification (#57) --- .github/workflows/docker-release.yml | 13 ++ docker/Dockerfile.deploy | 2 +- docker/Dockerfile.gen-configs | 2 +- docker/Dockerfile.verify | 45 ++++++ docker/config-example.toml | 10 ++ docker/scripts/verify.sh | 150 ++++++++++++++++++ scripts/deterministic/DeployScroll.s.sol | 34 +--- .../MultipleVersionRollupVerifierSetOwner.sol | 16 ++ .../contracts/ProxyAdminSetOwner.sol | 12 ++ .../ScrollStandardERC20FactorySetOwner.sol | 12 ++ 10 files changed, 263 insertions(+), 33 deletions(-) create mode 100644 docker/Dockerfile.verify create mode 100755 docker/scripts/verify.sh create mode 100644 scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol create mode 100644 scripts/deterministic/contracts/ProxyAdminSetOwner.sol create mode 100644 scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml index c16792ab..7dccd11f 100644 --- a/.github/workflows/docker-release.yml +++ b/.github/workflows/docker-release.yml @@ -63,3 +63,16 @@ jobs: file: docker/Dockerfile.gen-configs tags: | ${{ env.REPOSITORY }}:gen-configs-${{ github.sha }} + + - name: Build verify image + id: build_verify_image + env: + REPOSITORY: scrolltech/scroll-stack-contracts + uses: docker/build-push-action@v3 + with: + platforms: linux/amd64,linux/arm64 + push: true + context: . + file: docker/Dockerfile.verify + tags: | + ${{ env.REPOSITORY }}:verify-${{ github.sha }} \ No newline at end of file diff --git a/docker/Dockerfile.deploy b/docker/Dockerfile.deploy index 2204b199..af7b0076 100644 --- a/docker/Dockerfile.deploy +++ b/docker/Dockerfile.deploy @@ -18,7 +18,7 @@ RUN curl -L https://foundry.paradigm.xyz | bash ENV PATH="/root/.foundry/bin:${PATH}" # Run foundryup to update Foundry -RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae +RUN foundryup -v nightly-fdd321bac95f0935529164a88faf99d4d5cfa321 # copy dependencies COPY ./lib /contracts/lib diff --git a/docker/Dockerfile.gen-configs b/docker/Dockerfile.gen-configs index 519ff256..df710589 100644 --- a/docker/Dockerfile.gen-configs +++ b/docker/Dockerfile.gen-configs @@ -18,7 +18,7 @@ RUN curl -L https://foundry.paradigm.xyz | bash ENV PATH="/root/.foundry/bin:${PATH}" # Run foundryup to update Foundry -RUN foundryup -v nightly-56dbd20c7179570c53b6c17ff34daa7273a4ddae +RUN foundryup -v nightly-fdd321bac95f0935529164a88faf99d4d5cfa321 # copy dependencies COPY ./lib /contracts/lib diff --git a/docker/Dockerfile.verify b/docker/Dockerfile.verify new file mode 100644 index 00000000..7df5a64b --- /dev/null +++ b/docker/Dockerfile.verify @@ -0,0 +1,45 @@ +# Use the latest node Debian slim base image +# This makes installing yarn dep much easier +FROM node:20-bookworm-slim + +# Switch to bash shell +SHELL ["/bin/bash", "-c"] + +WORKDIR /root + +# Install dependencies +RUN apt update +RUN apt install --yes curl bash coreutils git jq ca-certificates + +# Download and run the Foundry installation script +RUN curl -L https://foundry.paradigm.xyz | bash + +# Set the environment variables to ensure Foundry tools are in the PATH +ENV PATH="/root/.foundry/bin:${PATH}" + +# Run foundryup to update Foundry +RUN foundryup -v nightly-fdd321bac95f0935529164a88faf99d4d5cfa321 + +# copy dependencies +COPY ./lib /contracts/lib +COPY ./node_modules/@openzeppelin /contracts/node_modules/@openzeppelin +COPY ./node_modules/hardhat /contracts/node_modules/hardhat + +# copy configurations +COPY foundry.toml /contracts/foundry.toml +COPY remappings.txt /contracts/remappings.txt + +# copy source code +COPY ./src /contracts/src +COPY ./scripts /contracts/scripts + +# compile contracts +ENV FOUNDRY_EVM_VERSION="cancun" +ENV FOUNDRY_BYTECODE_HASH="none" + +WORKDIR /contracts +RUN forge build + +COPY ./docker/scripts/verify.sh /contracts/docker/scripts/verify.sh + +ENTRYPOINT ["/bin/bash", "/contracts/docker/scripts/verify.sh"] diff --git a/docker/config-example.toml b/docker/config-example.toml index 7e8bc9fd..77e52074 100644 --- a/docker/config-example.toml +++ b/docker/config-example.toml @@ -104,6 +104,16 @@ L2_WHITELIST = "0x5300000000000000000000000000000000000003" L2_WETH = "0x5300000000000000000000000000000000000004" L2_TX_FEE_VAULT = "0x5300000000000000000000000000000000000005" +[contracts.verify] + +VERIFIER_TYPE_L1 = "blockscout" +VERIFIER_TYPE_L2 = "blockscout" +EXPLORER_URI_L1 = "http://l1-explorer.scrollsdk" +EXPLORER_URI_L2 = "http://blockscout.scrollsdk" +RPC_URI_L1 = "http://l1-devnet.scrollsdk" +RPC_URI_L2 = "http://l2-rpc.scrollsdk" +EXPLORER_API_KEY_L1 = "" +EXPLORER_API_KEY_L2 = "" [coordinator] diff --git a/docker/scripts/verify.sh b/docker/scripts/verify.sh new file mode 100755 index 00000000..86eb41c4 --- /dev/null +++ b/docker/scripts/verify.sh @@ -0,0 +1,150 @@ +#!/bin/sh + +# extract values from config file +config_file="./volume/config.toml" +CHAIN_ID_L1=$(grep -E "^CHAIN_ID_L1 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) +CHAIN_ID_L2=$(grep -E "^CHAIN_ID_L2 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) +RPC_URI_L1=$(grep -E "^RPC_URI_L1 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +RPC_URI_L2=$(grep -E "^RPC_URI_L2 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +VERIFIER_TYPE_L1=$(grep -E "^VERIFIER_TYPE_L1 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +VERIFIER_TYPE_L2=$(grep -E "^VERIFIER_TYPE_L2 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +EXPLORER_URI_L1=$(grep -E "^EXPLORER_URI_L1 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +EXPLORER_URI_L2=$(grep -E "^EXPLORER_URI_L2 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +EXPLORER_API_KEY_L1=$(grep -E "^EXPLORER_API_KEY_L1 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +EXPLORER_API_KEY_L2=$(grep -E "^EXPLORER_API_KEY_L2 =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2- | tr -d '"') +ALTERNATIVE_GAS_TOKEN_ENABLED=$(grep -E "^ALTERNATIVE_GAS_TOKEN_ENABLED =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) +TEST_ENV_MOCK_FINALIZE_ENABLED=$(grep -E "^TEST_ENV_MOCK_FINALIZE_ENABLED =" "$config_file" | sed 's/ *= */=/' | cut -d'=' -f2-) + +# extract contract name and address +extract_contract_info() { + contract_name=$(cut -d "=" -f 1 <<< "$line" | tr -d '"') + contract_addr=$(cut -d "=" -f 2 <<< "$line" | tr -d '"' | tr -d ' ') +} + +get_source_code_name() { + # specially handle the case where alternative gas token is enabled + if [[ "$ALTERNATIVE_GAS_TOKEN_ENABLED" == "true" && "$1" =~ ^(L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR|L2_TX_FEE_VAULT_ADDR)$ ]]; then + case "$1" in + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L1ScrollMessengerNonETH ;; + L2_TX_FEE_VAULT_ADDR) echo L2TxFeeVaultWithGasToken ;; + *) + esac + # specially handle the case where mock finalize is enabled + elif [[ "$TEST_ENV_MOCK_FINALIZE_ENABLED" == "true" && "$1" =~ ^(L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR)$ ]]; then + case "$1" in + L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR) echo ScrollChainMockFinalize ;; + *) + esac + else + case "$1" in + L1_WETH_ADDR) echo WrappedEther ;; + L1_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR) echo EmptyContract ;; + L1_PROXY_ADMIN_ADDR) echo ProxyAdminSetOwner ;; + L1_WHITELIST_ADDR) echo Whitelist ;; + L1_SCROLL_CHAIN_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_SCROLL_MESSENGER_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_ENFORCED_TX_GATEWAY_IMPLEMENTATION_ADDR) echo EnforcedTxGateway ;; + L1_ENFORCED_TX_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_ZKEVM_VERIFIER_V2_ADDR) echo ZkEvmVerifierV2 ;; + L1_MULTIPLE_VERSION_ROLLUP_VERIFIER_ADDR ) echo MultipleVersionRollupVerifierSetOwner ;; + L1_MESSAGE_QUEUE_IMPLEMENTATION_ADDR) echo L1MessageQueueWithGasPriceOracle ;; + L1_MESSAGE_QUEUE_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_SCROLL_CHAIN_IMPLEMENTATION_ADDR) echo ScrollChain ;; + L1_GATEWAY_ROUTER_IMPLEMENTATION_ADDR) echo L1GatewayRouter ;; + L1_GATEWAY_ROUTER_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_ETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_WETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_STANDARD_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_ERC721_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_ERC1155_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_MESSAGE_QUEUE_ADDR) echo L2MessageQueue ;; + L1_GAS_PRICE_ORACLE_ADDR) echo L1GasPriceOracle ;; + L1_GAS_TOKEN_GATEWAY_IMPLEMENTATION_ADDR) echo L1GasTokenGateway ;; + L1_GAS_TOKEN_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L1_WRAPPED_TOKEN_GATEWAY_ADDR) echo L1WrappedTokenGateway ;; + L2_WHITELIST_ADDR) echo Whitelist ;; + L2_WETH_ADDR) echo WrappedEther ;; + L2_TX_FEE_VAULT_ADDR) echo L2TxFeeVault ;; + L2_PROXY_ADMIN_ADDR) echo ProxyAdminSetOwner ;; + L2_PROXY_IMPLEMENTATION_PLACEHOLDER_ADDR) echo EmptyContract ;; + L2_SCROLL_MESSENGER_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_ETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_WETH_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_STANDARD_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_CUSTOM_ERC20_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_ERC721_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_ERC1155_GATEWAY_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_SCROLL_STANDARD_ERC20_ADDR) echo ScrollStandardERC20 ;; + L2_SCROLL_STANDARD_ERC20_FACTORY_ADDR) echo ScrollStandardERC20FactorySetOwner ;; + L1_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L1ScrollMessenger ;; + L1_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L1StandardERC20Gateway ;; + L1_ETH_GATEWAY_IMPLEMENTATION_ADDR) echo L1ETHGateway ;; + L1_WETH_GATEWAY_IMPLEMENTATION_ADDR) echo L1WETHGateway ;; + L1_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L1CustomERC20Gateway ;; + L1_ERC721_GATEWAY_IMPLEMENTATION_ADDR) echo L1ERC721Gateway ;; + L1_ERC1155_GATEWAY_IMPLEMENTATION_ADDR ) echo L1ERC1155Gateway ;; + L2_SCROLL_MESSENGER_IMPLEMENTATION_ADDR) echo L2ScrollMessenger ;; + L2_GATEWAY_ROUTER_IMPLEMENTATION_ADDR) echo L2GatewayRouter ;; + L2_GATEWAY_ROUTER_PROXY_ADDR) echo TransparentUpgradeableProxy ;; + L2_STANDARD_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L2StandardERC20Gateway ;; + L2_ETH_GATEWAY_IMPLEMENTATION_ADDR) echo L2ETHGateway ;; + L2_WETH_GATEWAY_IMPLEMENTATION_ADDR) echo L2WETHGateway ;; + L2_CUSTOM_ERC20_GATEWAY_IMPLEMENTATION_ADDR) echo L2CustomERC20Gateway ;; + L2_ERC721_GATEWAY_IMPLEMENTATION_ADDR) echo L2ERC721Gateway ;; + L2_ERC1155_GATEWAY_IMPLEMENTATION_ADDR) echo L2ERC1155Gateway ;; + *) echo "" ;; # default: return void string + esac + fi +} + +# read the file line by line +while IFS= read -r line; do + extract_contract_info "$line" + + # get contracts deployment layer + if [[ "$contract_name" =~ ^L1 ]]; then + layer="L1" + elif [[ "$contract_name" =~ ^L2 ]]; then + layer="L2" + # specially handle contract_name L1_GAS_PRICE_ORACLE_ADDR + if [[ "$contract_name" == "L1_GAS_PRICE_ORACLE_ADDR" ]]; then + layer="L1" + fi + else + echo "wrong contract name, not starts with L1 or L2, contract_name: $contract_name" + continue + fi + + source_code_name=$(get_source_code_name $contract_name) + + # skip if source_code_name or contract_addr is empty + if [[ -z $source_code_name || -z $contract_addr ]]; then + echo "empty source_code_name: $source_code_name or contract_addr: $contract_addr" + continue + fi + + # verify contract + echo "" + echo "verifing contract $contract_name with address $contract_addr on $layer" + EXTRA_PARAMS="" + if [[ "$layer" == "L1" ]]; then + if [[ "$VERIFIER_TYPE_L1" == "etherscan" ]]; then + EXTRA_PARAMS="--api-key $EXPLORER_API_KEY_L1" + elif [[ "$VERIFIER_TYPE_L1" == "blockscout" ]]; then + EXTRA_PARAMS="--verifier-url ${EXPLORER_URI_L1}/api/ --verifier $VERIFIER_TYPE_L1" + elif [[ "$VERIFIER_TYPE_L1" == "sourcify" ]]; then + EXTRA_PARAMS="--api-key $EXPLORER_API_KEY_L1 --verifier-url $EXPLORER_URI_L1 --verifier $VERIFIER_TYPE_L1" + fi + forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L1 --chain-id $CHAIN_ID_L1 --watch --guess-constructor-args --skip-is-verified-check $EXTRA_PARAMS + elif [[ "$layer" == "L2" ]]; then + if [[ "$VERIFIER_TYPE_L2" == "etherscan" ]]; then + EXTRA_PARAMS="--api-key $EXPLORER_API_KEY_L2" + elif [[ "$VERIFIER_TYPE_L2" == "blockscout" ]]; then + EXTRA_PARAMS="--verifier-url ${EXPLORER_URI_L2}/api/ --verifier $VERIFIER_TYPE_L2" + elif [[ "$VERIFIER_TYPE_L2" == "sourcify" ]]; then + EXTRA_PARAMS="--api-key $EXPLORER_API_KEY_L2 --verifier-url $EXPLORER_URI_L2 --verifier $VERIFIER_TYPE_L2" + fi + forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L2 --chain-id $CHAIN_ID_L2 --watch --guess-constructor-args --skip-is-verified-check $EXTRA_PARAMS + fi +done < ./volume/config-contracts.toml \ No newline at end of file diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 90162acd..5af7e22c 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -2,7 +2,7 @@ pragma solidity =0.8.24; import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; -import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {ProxyAdminSetOwner} from "./contracts/ProxyAdminSetOwner.sol"; import {TransparentUpgradeableProxy, ITransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; @@ -19,7 +19,7 @@ import {L1ScrollMessenger} from "../../src/L1/L1ScrollMessenger.sol"; import {L1StandardERC20Gateway} from "../../src/L1/gateways/L1StandardERC20Gateway.sol"; import {L1WETHGateway} from "../../src/L1/gateways/L1WETHGateway.sol"; import {L2GasPriceOracle} from "../../src/L1/rollup/L2GasPriceOracle.sol"; -import {MultipleVersionRollupVerifier} from "../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; +import {MultipleVersionRollupVerifierSetOwner} from "./contracts/MultipleVersionRollupVerifierSetOwner.sol"; import {ScrollChain} from "../../src/L1/rollup/ScrollChain.sol"; import {ZkEvmVerifierV2} from "../../src/libraries/verifier/ZkEvmVerifierV2.sol"; import {GasTokenExample} from "../../src/alternative-gas-token/GasTokenExample.sol"; @@ -42,7 +42,7 @@ import {L2TxFeeVaultWithGasToken} from "../../src/alternative-gas-token/L2TxFeeV import {Whitelist} from "../../src/L2/predeploys/Whitelist.sol"; import {WrappedEther} from "../../src/L2/predeploys/WrappedEther.sol"; import {ScrollStandardERC20} from "../../src/libraries/token/ScrollStandardERC20.sol"; -import {ScrollStandardERC20Factory} from "../../src/libraries/token/ScrollStandardERC20Factory.sol"; +import {ScrollStandardERC20FactorySetOwner} from "./contracts/ScrollStandardERC20FactorySetOwner.sol"; import {ScrollChainMockFinalize} from "../../src/mocks/ScrollChainMockFinalize.sol"; @@ -53,34 +53,6 @@ import "./DeterministicDeployment.sol"; /// @dev The minimum deployer account balance. uint256 constant MINIMUM_DEPLOYER_BALANCE = 0.1 ether; -contract ProxyAdminSetOwner is ProxyAdmin { - /// @dev allow setting the owner in the constructor, otherwise - /// DeterministicDeploymentProxy would become the owner. - constructor(address owner) { - _transferOwnership(owner); - } -} - -contract MultipleVersionRollupVerifierSetOwner is MultipleVersionRollupVerifier { - /// @dev allow setting the owner in the constructor, otherwise - /// DeterministicDeploymentProxy would become the owner. - constructor( - address owner, - uint256[] memory _versions, - address[] memory _verifiers - ) MultipleVersionRollupVerifier(_versions, _verifiers) { - _transferOwnership(owner); - } -} - -contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { - /// @dev allow setting the owner in the constructor, otherwise - /// DeterministicDeploymentProxy would become the owner. - constructor(address owner, address _implementation) ScrollStandardERC20Factory(_implementation) { - _transferOwnership(owner); - } -} - contract DeployScroll is DeterministicDeployment { using stdToml for string; diff --git a/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol b/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol new file mode 100644 index 00000000..21eecac3 --- /dev/null +++ b/scripts/deterministic/contracts/MultipleVersionRollupVerifierSetOwner.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {MultipleVersionRollupVerifier} from "../../../src/L1/rollup/MultipleVersionRollupVerifier.sol"; + +contract MultipleVersionRollupVerifierSetOwner is MultipleVersionRollupVerifier { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor( + address owner, + uint256[] memory _versions, + address[] memory _verifiers + ) MultipleVersionRollupVerifier(_versions, _verifiers) { + _transferOwnership(owner); + } +} diff --git a/scripts/deterministic/contracts/ProxyAdminSetOwner.sol b/scripts/deterministic/contracts/ProxyAdminSetOwner.sol new file mode 100644 index 00000000..a3283346 --- /dev/null +++ b/scripts/deterministic/contracts/ProxyAdminSetOwner.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; + +contract ProxyAdminSetOwner is ProxyAdmin { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner) { + _transferOwnership(owner); + } +} diff --git a/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol b/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol new file mode 100644 index 00000000..7b18d8cf --- /dev/null +++ b/scripts/deterministic/contracts/ScrollStandardERC20FactorySetOwner.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity =0.8.24; + +import {ScrollStandardERC20Factory} from "../../../src/libraries/token/ScrollStandardERC20Factory.sol"; + +contract ScrollStandardERC20FactorySetOwner is ScrollStandardERC20Factory { + /// @dev allow setting the owner in the constructor, otherwise + /// DeterministicDeploymentProxy would become the owner. + constructor(address owner, address _implementation) ScrollStandardERC20Factory(_implementation) { + _transferOwnership(owner); + } +} From 8ff2948aa2b9cbd24a7644b060097765a6faee10 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Tue, 19 Nov 2024 01:54:34 +0800 Subject: [PATCH 47/48] fix: contracts verification (#62) --- docker/scripts/verify.sh | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/docker/scripts/verify.sh b/docker/scripts/verify.sh index 86eb41c4..13e3323c 100755 --- a/docker/scripts/verify.sh +++ b/docker/scripts/verify.sh @@ -98,6 +98,16 @@ get_source_code_name() { fi } +function is_predeploy_contract() { + local contract_name="$1" + + if [[ "$contract_name" == "L2MessageQueue" || "$contract_name" == "L1GasPriceOracle" || "$contract_name" == "Whitelist" || "$contract_name" == "WrappedEther" || "$contract_name" == "L2TxFeeVault" ]]; then + return 0 # True + else + return 1 # False + fi +} + # read the file line by line while IFS= read -r line; do extract_contract_info "$line" @@ -105,12 +115,12 @@ while IFS= read -r line; do # get contracts deployment layer if [[ "$contract_name" =~ ^L1 ]]; then layer="L1" - elif [[ "$contract_name" =~ ^L2 ]]; then - layer="L2" # specially handle contract_name L1_GAS_PRICE_ORACLE_ADDR if [[ "$contract_name" == "L1_GAS_PRICE_ORACLE_ADDR" ]]; then - layer="L1" + layer="L2" fi + elif [[ "$contract_name" =~ ^L2 ]]; then + layer="L2" else echo "wrong contract name, not starts with L1 or L2, contract_name: $contract_name" continue @@ -120,7 +130,7 @@ while IFS= read -r line; do # skip if source_code_name or contract_addr is empty if [[ -z $source_code_name || -z $contract_addr ]]; then - echo "empty source_code_name: $source_code_name or contract_addr: $contract_addr" + echo "empty source_code_name $source_code_name or contract_addr $contract_addr" continue fi @@ -145,6 +155,9 @@ while IFS= read -r line; do elif [[ "$VERIFIER_TYPE_L2" == "sourcify" ]]; then EXTRA_PARAMS="--api-key $EXPLORER_API_KEY_L2 --verifier-url $EXPLORER_URI_L2 --verifier $VERIFIER_TYPE_L2" fi - forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L2 --chain-id $CHAIN_ID_L2 --watch --guess-constructor-args --skip-is-verified-check $EXTRA_PARAMS + if ! is_predeploy_contract "$source_code_name"; then + string="$EXTRA_PARAMS\" --guess-constructor-args\"" + fi + forge verify-contract $contract_addr $source_code_name --rpc-url $RPC_URI_L2 --chain-id $CHAIN_ID_L2 --watch --skip-is-verified-check $EXTRA_PARAMS fi done < ./volume/config-contracts.toml \ No newline at end of file From ba93025123327314045c0d508475cd9685bfee81 Mon Sep 17 00:00:00 2001 From: Morty <70688412+yiweichi@users.noreply.github.com> Date: Thu, 28 Nov 2024 15:52:42 +0800 Subject: [PATCH 48/48] fix: out-of-gas error when deploy contracts (#67) --- scripts/deterministic/DeployScroll.s.sol | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/deterministic/DeployScroll.s.sol b/scripts/deterministic/DeployScroll.s.sol index 5af7e22c..d02e0116 100644 --- a/scripts/deterministic/DeployScroll.s.sol +++ b/scripts/deterministic/DeployScroll.s.sol @@ -1368,7 +1368,8 @@ contract DeployScroll is DeterministicDeployment { if (l1MessengerBalance < amountToLock) { uint256 amountToSend = amountToLock - l1MessengerBalance; - payable(L1_SCROLL_MESSENGER_PROXY_ADDR).transfer(amountToSend); + (bool sent, bytes memory data) = payable(L1_SCROLL_MESSENGER_PROXY_ADDR).call{value: amountToSend}(""); + require(sent, "[ERROR] failed to lock tokens on layer 1"); } } else { uint256 l1GasTokenGatewayBalance = IERC20Metadata(L1_GAS_TOKEN_ADDR).balanceOf(