From 9532c1041d06dd7569910f61df6b4fba3b317581 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Tue, 6 Aug 2024 14:19:25 +0530 Subject: [PATCH 01/10] fix: amb addresses --- contracts/deploy/01-outbox/01-arb-sepolia-to-chiado-outbox.ts | 2 +- contracts/deploy/01-outbox/01-arb-to-gnosis-outbox.ts | 2 +- contracts/deploy/02-inbox/02-chiado-to-arb-sepolia-inbox.ts | 2 +- contracts/deploy/02-inbox/02-gnosis-to-arb-inbox.ts | 2 +- contracts/deploy/03-routers/03-arb-to-gnosis-router.ts | 2 +- contracts/deploy/03-routers/03-chiado-to-arb-sepolia-router.ts | 2 +- contracts/deploy/03-routers/03-gnosis-to-arb-router.ts | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/contracts/deploy/01-outbox/01-arb-sepolia-to-chiado-outbox.ts b/contracts/deploy/01-outbox/01-arb-sepolia-to-chiado-outbox.ts index 23e754b6..002a0e49 100644 --- a/contracts/deploy/01-outbox/01-arb-sepolia-to-chiado-outbox.ts +++ b/contracts/deploy/01-outbox/01-arb-sepolia-to-chiado-outbox.ts @@ -15,7 +15,7 @@ const paramsByChainId = { epochPeriod: 1800, // 30 min minChallengePeriod: 0, // 30 min numEpochTimeout: 10000000000000, // never - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0x8448E15d0e706C0298dECA99F0b4744030e59d7d", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts sequencerLimit: 86400, maxMissingBlocks: 10000000000000, routerChainId: 11155111, diff --git a/contracts/deploy/01-outbox/01-arb-to-gnosis-outbox.ts b/contracts/deploy/01-outbox/01-arb-to-gnosis-outbox.ts index 462ae688..3cad1dd3 100644 --- a/contracts/deploy/01-outbox/01-arb-to-gnosis-outbox.ts +++ b/contracts/deploy/01-outbox/01-arb-to-gnosis-outbox.ts @@ -31,7 +31,7 @@ const paramsByChainId = { numEpochTimeout: 1000000, // never maxMissingBlocks: 1000000, // any routerChainId: 11155111, - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0x8448E15d0e706C0298dECA99F0b4744030e59d7d", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts WETH: "0x8d74e5e4DA11629537C4575cB0f33b4F0Dfa42EB", sequencerLimit: 86400, // 24 hours }, diff --git a/contracts/deploy/02-inbox/02-chiado-to-arb-sepolia-inbox.ts b/contracts/deploy/02-inbox/02-chiado-to-arb-sepolia-inbox.ts index 141e7a31..59fc514e 100644 --- a/contracts/deploy/02-inbox/02-chiado-to-arb-sepolia-inbox.ts +++ b/contracts/deploy/02-inbox/02-chiado-to-arb-sepolia-inbox.ts @@ -10,7 +10,7 @@ enum SenderChains { const paramsByChainId = { GNOSIS_CHIADO: { epochPeriod: 1800, // 30 minutes - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0x8448E15d0e706C0298dECA99F0b4744030e59d7d", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts }, HARDHAT: { amb: ethers.constants.AddressZero, diff --git a/contracts/deploy/02-inbox/02-gnosis-to-arb-inbox.ts b/contracts/deploy/02-inbox/02-gnosis-to-arb-inbox.ts index f9d13042..363c1938 100644 --- a/contracts/deploy/02-inbox/02-gnosis-to-arb-inbox.ts +++ b/contracts/deploy/02-inbox/02-gnosis-to-arb-inbox.ts @@ -15,7 +15,7 @@ const paramsByChainId = { }, GNOSIS_CHIADO: { epochPeriod: 7200, // 2 hours - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0x8448E15d0e706C0298dECA99F0b4744030e59d7d", }, HARDHAT: { epochPeriod: 600, // 10 minutes diff --git a/contracts/deploy/03-routers/03-arb-to-gnosis-router.ts b/contracts/deploy/03-routers/03-arb-to-gnosis-router.ts index 1937d186..edb573ff 100644 --- a/contracts/deploy/03-routers/03-arb-to-gnosis-router.ts +++ b/contracts/deploy/03-routers/03-arb-to-gnosis-router.ts @@ -15,7 +15,7 @@ const paramsByChainId = { }, ETHEREUM_SEPOLIA: { arbitrumBridge: "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", // https://developer.arbitrum.io/useful-addresses - amb: "0x87A19d769D875964E9Cd41dDBfc397B2543764E6", + amb: "0xf2546D6648BD2af6a008A7e7C1542BB240329E11", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts }, HARDHAT: { arbitrumInbox: ethers.constants.AddressZero, diff --git a/contracts/deploy/03-routers/03-chiado-to-arb-sepolia-router.ts b/contracts/deploy/03-routers/03-chiado-to-arb-sepolia-router.ts index c792cdde..424f3611 100644 --- a/contracts/deploy/03-routers/03-chiado-to-arb-sepolia-router.ts +++ b/contracts/deploy/03-routers/03-chiado-to-arb-sepolia-router.ts @@ -10,7 +10,7 @@ enum RouterChains { const paramsByChainId = { ETHEREUM_SEPOLIA: { arbitrumBridge: "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", // https://developer.arbitrum.io/useful-addresses - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0xf2546D6648BD2af6a008A7e7C1542BB240329E11", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts }, HARDHAT: { arbitrumBridge: ethers.constants.AddressZero, diff --git a/contracts/deploy/03-routers/03-gnosis-to-arb-router.ts b/contracts/deploy/03-routers/03-gnosis-to-arb-router.ts index 3ada1e8c..72db7b30 100644 --- a/contracts/deploy/03-routers/03-gnosis-to-arb-router.ts +++ b/contracts/deploy/03-routers/03-gnosis-to-arb-router.ts @@ -15,7 +15,7 @@ const paramsByChainId = { }, ETHEREUM_SEPOLIA: { arbitrumBridge: "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", // https://developer.arbitrum.io/useful-addresses - amb: "0x99Ca51a3534785ED619f46A79C7Ad65Fa8d85e7a", + amb: "0xf2546D6648BD2af6a008A7e7C1542BB240329E11", // https://docs.gnosischain.com/bridges/About%20Token%20Bridges/amb-bridge#key-contracts }, HARDHAT: { arbitrumBridge: ethers.constants.AddressZero, From 55541e33f11eeabf9b7da7414e93effc3a394f55 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Thu, 8 Aug 2024 19:12:27 +0530 Subject: [PATCH 02/10] chore: devnet redeployments arbSep->Sep --- contracts/README.md | 4 +- .../VeaInboxArbToEthDevnet.json | 32 ++++----- .../sepolia/VeaOutboxArbToEthDevnet.json | 70 +++++++++---------- 3 files changed, 53 insertions(+), 53 deletions(-) diff --git a/contracts/README.md b/contracts/README.md index 198e5e29..5eb27e62 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -10,11 +10,11 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments #### Sepolia -- [VeaOutboxArbToEthDevnet](https://sepolia.etherscan.io/address/0x5AD255400913515C8DA7E82E6b8A109fA5c46135) +- [VeaOutboxArbToEthDevnet](https://sepolia.etherscan.io/address/0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674) #### Arbitrum Sepolia -- [VeaInboxArbToEthDevnet](https://sepolia.arbiscan.io/address/0x77e95F54032f467eC45c48C6affc203f93858783) +- [VeaInboxArbToEthDevnet](https://sepolia.arbiscan.io/address/0x0B5851fE2a931F619F73E739E5435C43976f1D68) #### Chiado diff --git a/contracts/deployments/arbitrumSepolia/VeaInboxArbToEthDevnet.json b/contracts/deployments/arbitrumSepolia/VeaInboxArbToEthDevnet.json index bbe1c3b7..2ffa6ac2 100644 --- a/contracts/deployments/arbitrumSepolia/VeaInboxArbToEthDevnet.json +++ b/contracts/deployments/arbitrumSepolia/VeaInboxArbToEthDevnet.json @@ -1,5 +1,5 @@ { - "address": "0x77e95F54032f467eC45c48C6affc203f93858783", + "address": "0x0B5851fE2a931F619F73E739E5435C43976f1D68", "abi": [ { "inputs": [ @@ -240,7 +240,7 @@ "inputs": [ { "internalType": "uint256", - "name": "", + "name": "epoch", "type": "uint256" } ], @@ -269,31 +269,31 @@ "type": "function" } ], - "transactionHash": "0x21357eab5e1d940f2909ca59ba77760fb61677fa3bd97f5831eef0209f2799f4", + "transactionHash": "0x7674d99ee55a96489ff207c6218b54bdff86c7e8cedd9090dbcd5a2299946b3d", "receipt": { "to": null, - "from": "0x7D81bD51FF105985725C2Eff263b0E46e6499577", - "contractAddress": "0x77e95F54032f467eC45c48C6affc203f93858783", + "from": "0xFa00D29d378EDC57AA1006946F0fc6230a5E3288", + "contractAddress": "0x0B5851fE2a931F619F73E739E5435C43976f1D68", "transactionIndex": 1, - "gasUsed": "683221", + "gasUsed": "1398728", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x074190afa073de2e9bc304dc3e7115d8d9eda8a257bd8dd4a0a7851a7f6e3d74", - "transactionHash": "0x21357eab5e1d940f2909ca59ba77760fb61677fa3bd97f5831eef0209f2799f4", + "blockHash": "0xdb08899e287977c6bbd5d699e8e85e0069c239368e17993a1d42cfd949b14138", + "transactionHash": "0x7674d99ee55a96489ff207c6218b54bdff86c7e8cedd9090dbcd5a2299946b3d", "logs": [], - "blockNumber": 18210847, - "cumulativeGasUsed": "683221", + "blockNumber": 69673433, + "cumulativeGasUsed": "1398728", "status": 1, "byzantium": true }, "args": [ 1800, - "0x5AD255400913515C8DA7E82E6b8A109fA5c46135" + "0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674" ], - "numDeployments": 2, - "solcInputHash": "995f432004e58df27d898b941aa741c9", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_veaOutboxArbToEth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_nodeData\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_snapshot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_count\",\"type\":\"uint64\"}],\"name\":\"SnapshotSaved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epochSent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_ticketId\",\"type\":\"bytes32\"}],\"name\":\"SnapshotSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"epochAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochFinalized\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochNow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"saveSnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_fnSelector\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"sendSnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"snapshots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaOutboxArbToEth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vea Inbox From Arbitrum to Ethereum. Note: This contract is deployed on Arbitrum.\",\"events\":{\"MessageSent(bytes)\":{\"details\":\"Relayers watch for these events to construct merkle proofs to execute transactions on Ethereum.\",\"params\":{\"_nodeData\":\"The data to create leaves in the merkle tree. abi.encodePacked(msgId, to, message), outbox relays to.call(message).\"}},\"SnapshotSaved(bytes32,uint256,uint64)\":{\"params\":{\"_count\":\"The count of messages in the merkle tree.\",\"_epoch\":\"The epoch of the snapshot.\",\"_snapshot\":\"The snapshot of the merkle tree state root.\"}},\"SnapshotSent(uint256,bytes32)\":{\"details\":\"The event is emitted when a snapshot is sent through the canonical arbitrum bridge.\",\"params\":{\"_epochSent\":\"The epoch of the snapshot.\",\"_ticketId\":\"The ticketId of the L2->L1 message.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor. Note: epochPeriod must match the VeaOutboxArbToEth contract deployment on Ethereum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\",\"params\":{\"_epochPeriod\":\"The duration in seconds between epochs.\",\"_veaOutboxArbToEth\":\"The veaOutbox on ethereum.\"}},\"epochAt(uint256)\":{\"details\":\"Get the epoch from the inbox's point of view using timestamp.\",\"params\":{\"_timestamp\":\"The timestamp to calculate the epoch from.\"},\"returns\":{\"epoch\":\"The calculated epoch.\"}},\"epochFinalized()\":{\"details\":\"Get the most recent epoch for which snapshots are finalized.\",\"returns\":{\"epoch\":\"The epoch associated with the current inbox block.timestamp\"}},\"epochNow()\":{\"details\":\"Get the current epoch from the inbox's point of view using the Arbitrum L2 clock.\",\"returns\":{\"epoch\":\"The epoch associated with the current inbox block.timestamp\"}},\"saveSnapshot()\":{\"details\":\"Saves snapshot of state root. Snapshots can be saved a maximum of once per epoch. `O(log(count))` where count number of messages in the inbox. Note: See merkle tree docs for details how inbox manages state.\"},\"sendMessage(address,bytes4,bytes)\":{\"details\":\"Sends an arbitrary message to Ethereum. `O(log(count))` where count is the number of messages already sent. Amortized cost is constant. Note: See docs for details how inbox manages merkle tree state.\",\"params\":{\"_data\":\"The message calldata, abi.encode(param1, param2, ...)\",\"_fnSelector\":\"The function selector of the receiving contract.\",\"_to\":\"The address of the contract on the receiving chain which receives the calldata.\"},\"returns\":{\"_0\":\"msgId The zero based index of the message in the inbox.\"}},\"sendSnapshot(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the state root snapshot using Arbitrum's canonical bridge.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the snapshot requested to send.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"SnapshotSaved(bytes32,uint256,uint64)\":{\"notice\":\"The bridgers can watch this event to claim the stateRoot on the veaOutbox.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitrumToEth/VeaInboxArbToEth.sol\":\"VeaInboxArbToEth\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/arbitrumToEth/VeaInboxArbToEth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../canonical/arbitrum/IArbSys.sol\\\";\\nimport \\\"../interfaces/inboxes/IVeaInbox.sol\\\";\\nimport \\\"../interfaces/outboxes/IVeaOutboxOnL1.sol\\\";\\n\\n/// @dev Vea Inbox From Arbitrum to Ethereum.\\n/// Note: This contract is deployed on Arbitrum.\\ncontract VeaInboxArbToEth is IVeaInbox {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n // Arbitrum precompile ArbSys for L2->L1 messaging: https://developer.arbitrum.io/arbos/precompiles#arbsys\\n IArbSys internal constant ARB_SYS = IArbSys(address(100));\\n\\n uint256 public immutable epochPeriod; // Epochs mark the period between potential snapshots.\\n address public immutable veaOutboxArbToEth; // The vea outbox on ethereum.\\n\\n mapping(uint256 => bytes32) public snapshots; // epoch => state root snapshot\\n\\n // Inbox represents minimum data availability to maintain incremental merkle tree.\\n // Supports a max of 2^64 - 1 messages. See merkle tree docs for details how inbox manages state.\\n\\n bytes32[64] internal inbox; // stores minimal set of complete subtree roots of the merkle tree to increment.\\n uint64 public count; // count of messages in the merkle tree\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Relayers watch for these events to construct merkle proofs to execute transactions on Ethereum.\\n /// @param _nodeData The data to create leaves in the merkle tree. abi.encodePacked(msgId, to, message), outbox relays to.call(message).\\n event MessageSent(bytes _nodeData);\\n\\n /// The bridgers can watch this event to claim the stateRoot on the veaOutbox.\\n /// @param _snapshot The snapshot of the merkle tree state root.\\n /// @param _epoch The epoch of the snapshot.\\n /// @param _count The count of messages in the merkle tree.\\n event SnapshotSaved(bytes32 _snapshot, uint256 _epoch, uint64 _count);\\n\\n /// @dev The event is emitted when a snapshot is sent through the canonical arbitrum bridge.\\n /// @param _epochSent The epoch of the snapshot.\\n /// @param _ticketId The ticketId of the L2->L1 message.\\n event SnapshotSent(uint256 indexed _epochSent, bytes32 _ticketId);\\n\\n /// @dev Constructor.\\n /// Note: epochPeriod must match the VeaOutboxArbToEth contract deployment on Ethereum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\\n /// @param _epochPeriod The duration in seconds between epochs.\\n /// @param _veaOutboxArbToEth The veaOutbox on ethereum.\\n constructor(uint256 _epochPeriod, address _veaOutboxArbToEth) {\\n epochPeriod = _epochPeriod;\\n veaOutboxArbToEth = _veaOutboxArbToEth;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sends an arbitrary message to Ethereum.\\n /// `O(log(count))` where count is the number of messages already sent.\\n /// Amortized cost is constant.\\n /// Note: See docs for details how inbox manages merkle tree state.\\n /// @param _to The address of the contract on the receiving chain which receives the calldata.\\n /// @param _fnSelector The function selector of the receiving contract.\\n /// @param _data The message calldata, abi.encode(param1, param2, ...)\\n /// @return msgId The zero based index of the message in the inbox.\\n function sendMessage(address _to, bytes4 _fnSelector, bytes memory _data) external override returns (uint64) {\\n uint64 oldCount = count;\\n\\n // Given arbitrum's speed limit of 7 million gas / second, it would take atleast 8 million years of full blocks to overflow.\\n // It *should* be impossible to overflow, but we check to be safe when appending to the tree.\\n require(oldCount < type(uint64).max, \\\"Inbox is full.\\\");\\n\\n bytes memory nodeData = abi.encodePacked(\\n oldCount,\\n _to,\\n // _data is abi.encode(param1, param2, ...), we need to encode it again to get the correct leaf data\\n abi.encodePacked( // equivalent to abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\\n _fnSelector,\\n bytes32(uint256(uint160(msg.sender))), // big endian padded encoding of msg.sender, simulating abi.encodeWithSelector\\n _data\\n )\\n );\\n\\n // single hashed leaf\\n bytes32 newInboxNode = keccak256(nodeData);\\n\\n // double hashed leaf\\n // avoids second order preimage attacks\\n // https://flawed.net.nz/2018/02/21/attacking-merkle-trees-with-a-second-preimage-attack/\\n assembly {\\n // efficient hash using EVM scratch space\\n mstore(0x00, newInboxNode)\\n newInboxNode := keccak256(0x00, 0x20)\\n }\\n\\n // increment merkle tree calculating minimal number of hashes\\n unchecked {\\n uint256 height;\\n\\n // x = oldCount + 1; acts as a bit mask to determine if a hash is needed\\n // note: x is always non-zero, and x is bit shifted to the right each loop\\n // hence this loop will always terminate in a maximum of log_2(oldCount + 1) iterations\\n for (uint64 x = oldCount + 1; x & 1 == 0; x = x >> 1) {\\n // sort sibling hashes as a convention for efficient proof validation\\n newInboxNode = sortConcatAndHash(inbox[height], newInboxNode);\\n height++;\\n }\\n\\n inbox[height] = newInboxNode;\\n\\n // finally increment count\\n count = oldCount + 1;\\n }\\n\\n emit MessageSent(nodeData);\\n\\n // old count is the zero indexed leaf position in the tree, acts as a msgId\\n // gateways should index these msgIds to later relay proofs\\n return oldCount;\\n }\\n\\n /// @dev Saves snapshot of state root. Snapshots can be saved a maximum of once per epoch.\\n /// `O(log(count))` where count number of messages in the inbox.\\n /// Note: See merkle tree docs for details how inbox manages state.\\n function saveSnapshot() external {\\n uint256 epoch;\\n bytes32 stateRoot;\\n\\n unchecked {\\n epoch = block.timestamp / epochPeriod;\\n\\n // calculate the current root of the incremental merkle tree encoded in the inbox\\n\\n uint256 height;\\n\\n // x acts as a bit mask to determine if the hash stored in the inbox contributes to the root\\n uint256 x;\\n\\n // x is bit shifted to the right each loop, hence this loop will always terminate in a maximum of log_2(count) iterations\\n for (x = uint256(count); x > 0; x = x >> 1) {\\n if ((x & 1) == 1) {\\n // first hash is special case\\n // inbox stores the root of complete subtrees\\n // eg if count = 4 = 0b100, then the first complete subtree is inbox[2]\\n // inbox = [H(3), H(1,2), H(1,4)], we read inbox[2] directly\\n\\n stateRoot = inbox[height];\\n break;\\n }\\n height++;\\n }\\n\\n // after the first hash, we can calculate the root incrementally\\n for (x = x >> 1; x > 0; x = x >> 1) {\\n height++;\\n if ((x & 1) == 1) {\\n // sort sibling hashes as a convention for efficient proof validation\\n stateRoot = sortConcatAndHash(inbox[height], stateRoot);\\n }\\n }\\n }\\n\\n snapshots[epoch] = stateRoot;\\n\\n emit SnapshotSaved(stateRoot, epoch, count);\\n }\\n\\n /// @dev Helper function to calculate merkle tree interior nodes by sorting and concatenating and hashing a pair of children nodes, left and right.\\n /// Note: EVM scratch space is used to efficiently calculate hashes.\\n /// @param _left The left hash.\\n /// @param _right The right hash.\\n /// @return parent The parent hash.\\n function sortConcatAndHash(bytes32 _left, bytes32 _right) internal pure returns (bytes32 parent) {\\n // sort sibling hashes as a convention for efficient proof validation\\n if (_left < _right) {\\n // efficient hash using EVM scratch space\\n assembly {\\n mstore(0x00, _left)\\n mstore(0x20, _right)\\n parent := keccak256(0x00, 0x40)\\n }\\n } else {\\n assembly {\\n mstore(0x00, _right)\\n mstore(0x20, _left)\\n parent := keccak256(0x00, 0x40)\\n }\\n }\\n }\\n\\n /// @dev Sends the state root snapshot using Arbitrum's canonical bridge.\\n /// @param _epoch The epoch of the snapshot requested to send.\\n /// @param _claim The claim associated with the epoch.\\n function sendSnapshot(uint256 _epoch, Claim memory _claim) external virtual {\\n unchecked {\\n require(_epoch < block.timestamp / epochPeriod, \\\"Can only send past epoch snapshot.\\\");\\n }\\n\\n bytes memory data = abi.encodeCall(IVeaOutboxOnL1.resolveDisputedClaim, (_epoch, snapshots[_epoch], _claim));\\n\\n // Arbitrum -> Ethereum message with native bridge\\n // docs: https://developer.arbitrum.io/for-devs/cross-chain-messsaging#arbitrum-to-ethereum-messaging\\n // example: https://github.com/OffchainLabs/arbitrum-tutorials/blob/2c1b7d2db8f36efa496e35b561864c0f94123a5f/packages/greeter/contracts/arbitrum/GreeterL2.sol#L25\\n bytes32 ticketID = bytes32(ARB_SYS.sendTxToL1(veaOutboxArbToEth, data));\\n\\n emit SnapshotSent(_epoch, ticketID);\\n }\\n\\n // ************************************* //\\n // * Pure / Views * //\\n // ************************************* //\\n\\n /// @dev Get the current epoch from the inbox's point of view using the Arbitrum L2 clock.\\n /// @return epoch The epoch associated with the current inbox block.timestamp\\n function epochNow() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the most recent epoch for which snapshots are finalized.\\n /// @return epoch The epoch associated with the current inbox block.timestamp\\n function epochFinalized() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod - 1;\\n }\\n\\n /// @dev Get the epoch from the inbox's point of view using timestamp.\\n /// @param _timestamp The timestamp to calculate the epoch from.\\n /// @return epoch The calculated epoch.\\n function epochAt(uint256 _timestamp) external view returns (uint256 epoch) {\\n epoch = _timestamp / epochPeriod;\\n }\\n}\\n\",\"keccak256\":\"0x33b5ac67822e209e961ff08283894a63a21504b4f72513d0252b0549e2fa8823\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IArbSys.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://developer.arbitrum.io/arbos/precompiles#arbsys\\n// https://github.com/OffchainLabs/nitro-contracts/blob/39ea5a163afc637e2706d9be29cf7a289c300d00/src/precompiles/ArbSys.sol\\n// https://arbiscan.io/address/0x0000000000000000000000000000000000000064#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.18;\\n\\n///@title System level functionality\\n///@notice For use by contracts to interact with core L2-specific functionality.\\n///Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\ninterface IArbSys {\\n /// @notice Send a transaction to L1\\n /// @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n /// to a contract address without any code (as enforced by the Bridge contract).\\n /// @param destination recipient address on L1\\n /// @param data (optional) calldata for L1 contract call\\n /// @return a unique identifier for this L2-to-L1 transaction.\\n function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\\n}\\n\",\"keccak256\":\"0x3fa882c5e22ffbecade5c5977083de1bedb8e75599c38ec22816e654173c8d6b\",\"license\":\"BUSL-1.1\"},\"src/interfaces/inboxes/IVeaInbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\ninterface IVeaInbox {\\n /// @dev Sends an arbitrary message to receiving chain.\\n /// Note: Calls authenticated by receiving gateway checking the sender argument.\\n /// @param _to The cross-domain contract address which receives the calldata.\\n /// @param _fnSelection The function selector of the receiving contract.\\n /// @param _data The message calldata, abi.encode(...)\\n /// @return msgId The index of the message in the inbox, as a message Id, needed to relay the message.\\n function sendMessage(address _to, bytes4 _fnSelection, bytes memory _data) external returns (uint64 msgId);\\n\\n /// @dev Snapshots can be saved a maximum of once per epoch.\\n /// Saves snapshot of state root.\\n /// `O(log(count))` where count number of messages in the inbox.\\n function saveSnapshot() external;\\n}\\n\",\"keccak256\":\"0x053799bf55019a7f1db4cd889ce83cbe7319e832eec0234b1d4020a2aa0026f9\",\"license\":\"MIT\"},\"src/interfaces/outboxes/IVeaOutboxOnL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Outbox on L1 chains like Ethereum, Gnosis, Polygon POS where storage is expensive.\\ninterface IVeaOutboxOnL1 {\\n /// @dev Verifies and relays the message.\\n /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication.\\n /// @param _proof The merkle proof to prove the message.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address to send the message to.\\n /// @param _message The message to relay.\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external;\\n\\n /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge.\\n /// Note: Access restricted to canonical bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0x52f714405dbb6f5953f7e59bf7139742837c2f055fc090971421d931a5289b51\",\"license\":\"MIT\"},\"src/interfaces/types/VeaClaim.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nenum Party {\\n None,\\n Claimer,\\n Challenger\\n}\\n\\nstruct Claim {\\n bytes32 stateRoot;\\n address claimer;\\n uint32 timestampClaimed;\\n uint32 timestampVerification;\\n uint32 blocknumberVerification;\\n Party honest;\\n address challenger;\\n}\\n\",\"keccak256\":\"0x1b25222d0ebdb4beed6cd844ea1f262c89e4c002e7520972e6b79083eeed6418\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x60c060405234801561001057600080fd5b50604051610c34380380610c3483398101604081905261002f91610046565b6080919091526001600160a01b031660a052610083565b6000806040838503121561005957600080fd5b825160208401519092506001600160a01b038116811461007857600080fd5b809150509250929050565b60805160a051610b626100d26000396000818161012801526105e1015260008181610167015281816101c3015281816101f60152818161022c0152818161025c01526104ee0152610b626000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80635f85896c116100665780635f85896c14610110578063744b49bf14610123578063b5b7a18414610162578063c705e41214610189578063d6565a2d1461019c57600080fd5b806306661abd146100a3578063222ae786146100d55780633ac3b6b6146100eb5780634a439cfe146100f35780635192053514610106575b600080fd5b6041546100b79067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100dd6101bc565b6040519081526020016100cc565b6100dd6101ed565b6100dd6101013660046106bd565b610225565b61010e610257565b005b6100b761011e366004610762565b61037b565b61014a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100cc565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b61010e61019736600461083b565b6104ec565b6100dd6101aa3660046106bd565b60006020819052908152604090205481565b60006101e87f000000000000000000000000000000000000000000000000000000000000000042610903565b905090565b6000600161021b7f000000000000000000000000000000000000000000000000000000000000000042610903565b6101e89190610925565b60006102517f000000000000000000000000000000000000000000000000000000000000000083610903565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000004281610289576102896108ed565b604154919004925060009067ffffffffffffffff165b80156102d857806001166001036102cc57600182604081106102c3576102c3610946565b015492506102d8565b6001918201911c61029f565b60011c5b801561031a5760019182019181811690036103125761030f6001836040811061030757610307610946565b01548461068c565b92505b60011c6102dc565b505060008281526020818152604091829020839055604154825184815291820185905267ffffffffffffffff168183015290517f592424eb1d6135501bd20833f15fd127c29d08eed4f03872f6f75182126b1e489181900360600190a15050565b60415460009067ffffffffffffffff9081169081106103d25760405162461bcd60e51b815260206004820152600e60248201526d24b73137bc1034b990333ab6361760911b60448201526064015b60405180910390fd5b604051600090829087906103ee90889033908990602001610980565b60408051601f198184030181529082905261040d9392916020016109b6565b60408051601f1981840301815291905280516020808301919091206000908152908120919250600184015b60018116600003610471576104596001836040811061030757610307610946565b92506001918201911c677fffffffffffffff16610438565b50816001826040811061048657610486610946565b0155506041805467ffffffffffffffff19166001850167ffffffffffffffff161790556040517f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036906104d9908490610a31565b60405180910390a1509095945050505050565b7f0000000000000000000000000000000000000000000000000000000000000000428161051b5761051b6108ed565b0482106105755760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c792073656e6420706173742065706f636820736e617073686f6044820152613a1760f11b60648201526084016103c9565b6000828152602081905260408082205490516105979185918590602401610a4b565b60408051601f198184030181529181526020820180516001600160e01b0316630f0adca560e01b179052516349460b4d60e11b815290915060009060649063928c169a9061060b907f0000000000000000000000000000000000000000000000000000000000000000908690600401610ae7565b6020604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e9190610b13565b60405181815290915084907f6fdd49f435101fc7b6ebdec7c8972932a926d18f6cb78a8891dfe950743b6b829060200160405180910390a250505050565b6000818310156106aa57826000528160205260406000209050610251565b5060009081526020919091526040902090565b6000602082840312156106cf57600080fd5b5035919050565b80356001600160a01b03811681146106ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561072b5761072b6106f2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561075a5761075a6106f2565b604052919050565b60008060006060848603121561077757600080fd5b610780846106d6565b92506020848101356001600160e01b03198116811461079e57600080fd5b9250604085013567ffffffffffffffff808211156107bb57600080fd5b818701915087601f8301126107cf57600080fd5b8135818111156107e1576107e16106f2565b6107f3601f8201601f19168501610731565b9150808252888482850101111561080957600080fd5b80848401858401376000848284010152508093505050509250925092565b803563ffffffff811681146106ed57600080fd5b60008082840361010081121561085057600080fd5b8335925060e0601f198201121561086657600080fd5b5061086f610708565b60208401358152610882604085016106d6565b602082015261089360608501610827565b60408201526108a460808501610827565b60608201526108b560a08501610827565b608082015260c0840135600381106108cc57600080fd5b60a08201526108dd60e085016106d6565b60c0820152809150509250929050565b634e487b7160e01b600052601260045260246000fd5b60008261092057634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561025157634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b8381101561097757818101518382015260200161095f565b50506000910152565b63ffffffff60e01b84168152826004820152600082516109a781602485016020870161095c565b91909101602401949350505050565b67ffffffffffffffff60c01b8460c01b1681526bffffffffffffffffffffffff198360601b166008820152600082516109f681601c85016020870161095c565b91909101601c01949350505050565b60008151808452610a1d81602086016020860161095c565b601f01601f19169290920160200192915050565b602081526000610a446020830184610a05565b9392505050565b6000610120820190508482528360208301528251604083015260018060a01b036020840151166060830152604083015163ffffffff80821660808501528060608601511660a08501528060808601511660c0850152505060a083015160038110610ac557634e487b7160e01b600052602160045260246000fd5b60e083015260c092909201516001600160a01b03166101009091015292915050565b6001600160a01b0383168152604060208201819052600090610b0b90830184610a05565b949350505050565b600060208284031215610b2557600080fd5b505191905056fea2646970667358221220fcebfa85c5b6f37a90499aad0c9ea8735daf80b5be5a5b008c1bd00021e79e2564736f6c63430008120033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80635f85896c116100665780635f85896c14610110578063744b49bf14610123578063b5b7a18414610162578063c705e41214610189578063d6565a2d1461019c57600080fd5b806306661abd146100a3578063222ae786146100d55780633ac3b6b6146100eb5780634a439cfe146100f35780635192053514610106575b600080fd5b6041546100b79067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100dd6101bc565b6040519081526020016100cc565b6100dd6101ed565b6100dd6101013660046106bd565b610225565b61010e610257565b005b6100b761011e366004610762565b61037b565b61014a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100cc565b6100dd7f000000000000000000000000000000000000000000000000000000000000000081565b61010e61019736600461083b565b6104ec565b6100dd6101aa3660046106bd565b60006020819052908152604090205481565b60006101e87f000000000000000000000000000000000000000000000000000000000000000042610903565b905090565b6000600161021b7f000000000000000000000000000000000000000000000000000000000000000042610903565b6101e89190610925565b60006102517f000000000000000000000000000000000000000000000000000000000000000083610903565b92915050565b6000807f00000000000000000000000000000000000000000000000000000000000000004281610289576102896108ed565b604154919004925060009067ffffffffffffffff165b80156102d857806001166001036102cc57600182604081106102c3576102c3610946565b015492506102d8565b6001918201911c61029f565b60011c5b801561031a5760019182019181811690036103125761030f6001836040811061030757610307610946565b01548461068c565b92505b60011c6102dc565b505060008281526020818152604091829020839055604154825184815291820185905267ffffffffffffffff168183015290517f592424eb1d6135501bd20833f15fd127c29d08eed4f03872f6f75182126b1e489181900360600190a15050565b60415460009067ffffffffffffffff9081169081106103d25760405162461bcd60e51b815260206004820152600e60248201526d24b73137bc1034b990333ab6361760911b60448201526064015b60405180910390fd5b604051600090829087906103ee90889033908990602001610980565b60408051601f198184030181529082905261040d9392916020016109b6565b60408051601f1981840301815291905280516020808301919091206000908152908120919250600184015b60018116600003610471576104596001836040811061030757610307610946565b92506001918201911c677fffffffffffffff16610438565b50816001826040811061048657610486610946565b0155506041805467ffffffffffffffff19166001850167ffffffffffffffff161790556040517f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036906104d9908490610a31565b60405180910390a1509095945050505050565b7f0000000000000000000000000000000000000000000000000000000000000000428161051b5761051b6108ed565b0482106105755760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c792073656e6420706173742065706f636820736e617073686f6044820152613a1760f11b60648201526084016103c9565b6000828152602081905260408082205490516105979185918590602401610a4b565b60408051601f198184030181529181526020820180516001600160e01b0316630f0adca560e01b179052516349460b4d60e11b815290915060009060649063928c169a9061060b907f0000000000000000000000000000000000000000000000000000000000000000908690600401610ae7565b6020604051808303816000875af115801561062a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061064e9190610b13565b60405181815290915084907f6fdd49f435101fc7b6ebdec7c8972932a926d18f6cb78a8891dfe950743b6b829060200160405180910390a250505050565b6000818310156106aa57826000528160205260406000209050610251565b5060009081526020919091526040902090565b6000602082840312156106cf57600080fd5b5035919050565b80356001600160a01b03811681146106ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561072b5761072b6106f2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561075a5761075a6106f2565b604052919050565b60008060006060848603121561077757600080fd5b610780846106d6565b92506020848101356001600160e01b03198116811461079e57600080fd5b9250604085013567ffffffffffffffff808211156107bb57600080fd5b818701915087601f8301126107cf57600080fd5b8135818111156107e1576107e16106f2565b6107f3601f8201601f19168501610731565b9150808252888482850101111561080957600080fd5b80848401858401376000848284010152508093505050509250925092565b803563ffffffff811681146106ed57600080fd5b60008082840361010081121561085057600080fd5b8335925060e0601f198201121561086657600080fd5b5061086f610708565b60208401358152610882604085016106d6565b602082015261089360608501610827565b60408201526108a460808501610827565b60608201526108b560a08501610827565b608082015260c0840135600381106108cc57600080fd5b60a08201526108dd60e085016106d6565b60c0820152809150509250929050565b634e487b7160e01b600052601260045260246000fd5b60008261092057634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561025157634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b8381101561097757818101518382015260200161095f565b50506000910152565b63ffffffff60e01b84168152826004820152600082516109a781602485016020870161095c565b91909101602401949350505050565b67ffffffffffffffff60c01b8460c01b1681526bffffffffffffffffffffffff198360601b166008820152600082516109f681601c85016020870161095c565b91909101601c01949350505050565b60008151808452610a1d81602086016020860161095c565b601f01601f19169290920160200192915050565b602081526000610a446020830184610a05565b9392505050565b6000610120820190508482528360208301528251604083015260018060a01b036020840151166060830152604083015163ffffffff80821660808501528060608601511660a08501528060808601511660c0850152505060a083015160038110610ac557634e487b7160e01b600052602160045260246000fd5b60e083015260c092909201516001600160a01b03166101009091015292915050565b6001600160a01b0383168152604060208201819052600090610b0b90830184610a05565b949350505050565b600060208284031215610b2557600080fd5b505191905056fea2646970667358221220fcebfa85c5b6f37a90499aad0c9ea8735daf80b5be5a5b008c1bd00021e79e2564736f6c63430008120033", + "numDeployments": 3, + "solcInputHash": "0d66bd5cfdf493ed8e081e9f7e1bf4fa", + "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_veaOutboxArbToEth\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"_nodeData\",\"type\":\"bytes\"}],\"name\":\"MessageSent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_snapshot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_count\",\"type\":\"uint64\"}],\"name\":\"SnapshotSaved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epochSent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_ticketId\",\"type\":\"bytes32\"}],\"name\":\"SnapshotSent\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"count\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"epochAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochFinalized\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochNow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"saveSnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes4\",\"name\":\"_fnSelector\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"sendSnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"snapshots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaOutboxArbToEth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vea Inbox From Arbitrum to Ethereum. Note: This contract is deployed on Arbitrum.\",\"events\":{\"MessageSent(bytes)\":{\"details\":\"Relayers watch for these events to construct merkle proofs to execute transactions on Ethereum.\",\"params\":{\"_nodeData\":\"The data to create leaves in the merkle tree. abi.encodePacked(msgId, to, message), outbox relays to.call(message).\"}},\"SnapshotSaved(bytes32,uint256,uint64)\":{\"params\":{\"_count\":\"The count of messages in the merkle tree.\",\"_epoch\":\"The epoch of the snapshot.\",\"_snapshot\":\"The snapshot of the merkle tree state root.\"}},\"SnapshotSent(uint256,bytes32)\":{\"details\":\"The event is emitted when a snapshot is sent through the canonical arbitrum bridge.\",\"params\":{\"_epochSent\":\"The epoch of the snapshot.\",\"_ticketId\":\"The ticketId of the L2->L1 message.\"}}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Constructor. Note: epochPeriod must match the VeaOutboxArbToEth contract deployment on Ethereum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\",\"params\":{\"_epochPeriod\":\"The duration in seconds between epochs.\",\"_veaOutboxArbToEth\":\"The veaOutbox on ethereum.\"}},\"epochAt(uint256)\":{\"details\":\"Get the epoch from the inbox's point of view using timestamp.\",\"params\":{\"_timestamp\":\"The timestamp to calculate the epoch from.\"},\"returns\":{\"epoch\":\"The calculated epoch.\"}},\"epochFinalized()\":{\"details\":\"Get the most recent epoch for which snapshots are finalized.\",\"returns\":{\"epoch\":\"The epoch associated with the current inbox block.timestamp\"}},\"epochNow()\":{\"details\":\"Get the current epoch from the inbox's point of view using the Arbitrum L2 clock.\",\"returns\":{\"epoch\":\"The epoch associated with the current inbox block.timestamp\"}},\"saveSnapshot()\":{\"details\":\"Saves snapshot of state root. Snapshots can be saved a maximum of once per epoch. `O(log(count))` where count number of messages in the inbox. Note: See merkle tree docs for details how inbox manages state.\"},\"sendMessage(address,bytes4,bytes)\":{\"details\":\"Sends an arbitrary message to Ethereum. `O(log(count))` where count is the number of messages already sent. Amortized cost is constant. Note: See docs for details how inbox manages merkle tree state.\",\"params\":{\"_data\":\"The message calldata, abi.encode(param1, param2, ...)\",\"_fnSelector\":\"The function selector of the receiving contract.\",\"_to\":\"The address of the contract on the receiving chain which receives the calldata.\"},\"returns\":{\"_0\":\"msgId The zero based index of the message in the inbox.\"}},\"sendSnapshot(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the state root snapshot using Arbitrum's canonical bridge.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the snapshot requested to send.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"SnapshotSaved(bytes32,uint256,uint64)\":{\"notice\":\"The bridgers can watch this event to claim the stateRoot on the veaOutbox.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/arbitrumToEth/VeaInboxArbToEth.sol\":\"VeaInboxArbToEth\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/arbitrumToEth/VeaInboxArbToEth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../canonical/arbitrum/IArbSys.sol\\\";\\nimport \\\"../interfaces/inboxes/IVeaInbox.sol\\\";\\nimport \\\"../interfaces/outboxes/IVeaOutboxOnL1.sol\\\";\\n\\n/// @dev Vea Inbox From Arbitrum to Ethereum.\\n/// Note: This contract is deployed on Arbitrum.\\ncontract VeaInboxArbToEth is IVeaInbox {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n // Arbitrum precompile ArbSys for L2->L1 messaging: https://developer.arbitrum.io/arbos/precompiles#arbsys\\n IArbSys internal constant ARB_SYS = IArbSys(address(100));\\n\\n uint256 public immutable epochPeriod; // Epochs mark the period between potential snapshots.\\n address public immutable veaOutboxArbToEth; // The vea outbox on ethereum.\\n\\n mapping(uint256 epoch => bytes32) public snapshots; // epoch => state root snapshot\\n\\n // Inbox represents minimum data availability to maintain incremental merkle tree.\\n // Supports a max of 2^64 - 1 messages. See merkle tree docs for details how inbox manages state.\\n\\n bytes32[64] internal inbox; // stores minimal set of complete subtree roots of the merkle tree to increment.\\n uint64 public count; // count of messages in the merkle tree\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Relayers watch for these events to construct merkle proofs to execute transactions on Ethereum.\\n /// @param _nodeData The data to create leaves in the merkle tree. abi.encodePacked(msgId, to, message), outbox relays to.call(message).\\n event MessageSent(bytes _nodeData);\\n\\n /// The bridgers can watch this event to claim the stateRoot on the veaOutbox.\\n /// @param _snapshot The snapshot of the merkle tree state root.\\n /// @param _epoch The epoch of the snapshot.\\n /// @param _count The count of messages in the merkle tree.\\n event SnapshotSaved(bytes32 _snapshot, uint256 _epoch, uint64 _count);\\n\\n /// @dev The event is emitted when a snapshot is sent through the canonical arbitrum bridge.\\n /// @param _epochSent The epoch of the snapshot.\\n /// @param _ticketId The ticketId of the L2->L1 message.\\n event SnapshotSent(uint256 indexed _epochSent, bytes32 _ticketId);\\n\\n /// @dev Constructor.\\n /// Note: epochPeriod must match the VeaOutboxArbToEth contract deployment on Ethereum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\\n /// @param _epochPeriod The duration in seconds between epochs.\\n /// @param _veaOutboxArbToEth The veaOutbox on ethereum.\\n constructor(uint256 _epochPeriod, address _veaOutboxArbToEth) {\\n epochPeriod = _epochPeriod;\\n veaOutboxArbToEth = _veaOutboxArbToEth;\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Sends an arbitrary message to Ethereum.\\n /// `O(log(count))` where count is the number of messages already sent.\\n /// Amortized cost is constant.\\n /// Note: See docs for details how inbox manages merkle tree state.\\n /// @param _to The address of the contract on the receiving chain which receives the calldata.\\n /// @param _fnSelector The function selector of the receiving contract.\\n /// @param _data The message calldata, abi.encode(param1, param2, ...)\\n /// @return msgId The zero based index of the message in the inbox.\\n function sendMessage(address _to, bytes4 _fnSelector, bytes memory _data) external override returns (uint64) {\\n uint64 oldCount = count;\\n\\n // Given arbitrum's speed limit of 7 million gas / second, it would take atleast 8 million years of full blocks to overflow.\\n // It *should* be impossible to overflow, but we check to be safe when appending to the tree.\\n require(oldCount < type(uint64).max, \\\"Inbox is full.\\\");\\n\\n bytes memory nodeData = abi.encodePacked(\\n oldCount,\\n _to,\\n // _data is abi.encode(param1, param2, ...), we need to encode it again to get the correct leaf data\\n abi.encodePacked( // equivalent to abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\\n _fnSelector,\\n bytes32(uint256(uint160(msg.sender))), // big endian padded encoding of msg.sender, simulating abi.encodeWithSelector\\n _data\\n )\\n );\\n\\n // single hashed leaf\\n bytes32 newInboxNode = keccak256(nodeData);\\n\\n // double hashed leaf\\n // avoids second order preimage attacks\\n // https://flawed.net.nz/2018/02/21/attacking-merkle-trees-with-a-second-preimage-attack/\\n assembly {\\n // efficient hash using EVM scratch space\\n mstore(0x00, newInboxNode)\\n newInboxNode := keccak256(0x00, 0x20)\\n }\\n\\n // increment merkle tree calculating minimal number of hashes\\n unchecked {\\n uint256 height;\\n\\n // x = oldCount + 1; acts as a bit mask to determine if a hash is needed\\n // note: x is always non-zero, and x is bit shifted to the right each loop\\n // hence this loop will always terminate in a maximum of log_2(oldCount + 1) iterations\\n for (uint64 x = oldCount + 1; x & 1 == 0; x = x >> 1) {\\n // sort sibling hashes as a convention for efficient proof validation\\n newInboxNode = sortConcatAndHash(inbox[height], newInboxNode);\\n height++;\\n }\\n\\n inbox[height] = newInboxNode;\\n\\n // finally increment count\\n count = oldCount + 1;\\n }\\n\\n emit MessageSent(nodeData);\\n\\n // old count is the zero indexed leaf position in the tree, acts as a msgId\\n // gateways should index these msgIds to later relay proofs\\n return oldCount;\\n }\\n\\n /// @dev Saves snapshot of state root. Snapshots can be saved a maximum of once per epoch.\\n /// `O(log(count))` where count number of messages in the inbox.\\n /// Note: See merkle tree docs for details how inbox manages state.\\n function saveSnapshot() external {\\n uint256 epoch;\\n bytes32 stateRoot;\\n\\n unchecked {\\n epoch = block.timestamp / epochPeriod;\\n\\n // calculate the current root of the incremental merkle tree encoded in the inbox\\n\\n uint256 height;\\n\\n // x acts as a bit mask to determine if the hash stored in the inbox contributes to the root\\n uint256 x;\\n\\n // x is bit shifted to the right each loop, hence this loop will always terminate in a maximum of log_2(count) iterations\\n for (x = uint256(count); x > 0; x = x >> 1) {\\n if ((x & 1) == 1) {\\n // first hash is special case\\n // inbox stores the root of complete subtrees\\n // eg if count = 4 = 0b100, then the first complete subtree is inbox[2]\\n // inbox = [H(3), H(1,2), H(1,4)], we read inbox[2] directly\\n\\n stateRoot = inbox[height];\\n break;\\n }\\n height++;\\n }\\n\\n // after the first hash, we can calculate the root incrementally\\n for (x = x >> 1; x > 0; x = x >> 1) {\\n height++;\\n if ((x & 1) == 1) {\\n // sort sibling hashes as a convention for efficient proof validation\\n stateRoot = sortConcatAndHash(inbox[height], stateRoot);\\n }\\n }\\n }\\n\\n snapshots[epoch] = stateRoot;\\n\\n emit SnapshotSaved(stateRoot, epoch, count);\\n }\\n\\n /// @dev Helper function to calculate merkle tree interior nodes by sorting and concatenating and hashing a pair of children nodes, left and right.\\n /// Note: EVM scratch space is used to efficiently calculate hashes.\\n /// @param _left The left hash.\\n /// @param _right The right hash.\\n /// @return parent The parent hash.\\n function sortConcatAndHash(bytes32 _left, bytes32 _right) internal pure returns (bytes32 parent) {\\n // sort sibling hashes as a convention for efficient proof validation\\n if (_left < _right) {\\n // efficient hash using EVM scratch space\\n assembly {\\n mstore(0x00, _left)\\n mstore(0x20, _right)\\n parent := keccak256(0x00, 0x40)\\n }\\n } else {\\n assembly {\\n mstore(0x00, _right)\\n mstore(0x20, _left)\\n parent := keccak256(0x00, 0x40)\\n }\\n }\\n }\\n\\n /// @dev Sends the state root snapshot using Arbitrum's canonical bridge.\\n /// @param _epoch The epoch of the snapshot requested to send.\\n /// @param _claim The claim associated with the epoch.\\n function sendSnapshot(uint256 _epoch, Claim memory _claim) external virtual {\\n unchecked {\\n require(_epoch < block.timestamp / epochPeriod, \\\"Can only send past epoch snapshot.\\\");\\n }\\n\\n bytes memory data = abi.encodeCall(IVeaOutboxOnL1.resolveDisputedClaim, (_epoch, snapshots[_epoch], _claim));\\n\\n // Arbitrum -> Ethereum message with native bridge\\n // docs: https://developer.arbitrum.io/for-devs/cross-chain-messsaging#arbitrum-to-ethereum-messaging\\n // example: https://github.com/OffchainLabs/arbitrum-tutorials/blob/2c1b7d2db8f36efa496e35b561864c0f94123a5f/packages/greeter/contracts/arbitrum/GreeterL2.sol#L25\\n bytes32 ticketID = bytes32(ARB_SYS.sendTxToL1(veaOutboxArbToEth, data));\\n\\n emit SnapshotSent(_epoch, ticketID);\\n }\\n\\n // ************************************* //\\n // * Pure / Views * //\\n // ************************************* //\\n\\n /// @dev Get the current epoch from the inbox's point of view using the Arbitrum L2 clock.\\n /// @return epoch The epoch associated with the current inbox block.timestamp\\n function epochNow() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the most recent epoch for which snapshots are finalized.\\n /// @return epoch The epoch associated with the current inbox block.timestamp\\n function epochFinalized() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod - 1;\\n }\\n\\n /// @dev Get the epoch from the inbox's point of view using timestamp.\\n /// @param _timestamp The timestamp to calculate the epoch from.\\n /// @return epoch The calculated epoch.\\n function epochAt(uint256 _timestamp) external view returns (uint256 epoch) {\\n epoch = _timestamp / epochPeriod;\\n }\\n}\\n\",\"keccak256\":\"0xe3fdd0cc51b541482e72b8cf37981499dc301556f77b78666c5b3b22237dd05e\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IArbSys.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://developer.arbitrum.io/arbos/precompiles#arbsys\\n// https://github.com/OffchainLabs/nitro-contracts/blob/39ea5a163afc637e2706d9be29cf7a289c300d00/src/precompiles/ArbSys.sol\\n// https://arbiscan.io/address/0x0000000000000000000000000000000000000064#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\n///@title System level functionality\\n///@notice For use by contracts to interact with core L2-specific functionality.\\n///Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\ninterface IArbSys {\\n /// @notice Send a transaction to L1\\n /// @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n /// to a contract address without any code (as enforced by the Bridge contract).\\n /// @param destination recipient address on L1\\n /// @param data (optional) calldata for L1 contract call\\n /// @return a unique identifier for this L2-to-L1 transaction.\\n function sendTxToL1(address destination, bytes calldata data) external payable returns (uint256);\\n}\\n\",\"keccak256\":\"0x5ae1fd0267552160821402b9bc50b2551b086904436e5abe838599179b279420\",\"license\":\"BUSL-1.1\"},\"src/interfaces/inboxes/IVeaInbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\ninterface IVeaInbox {\\n /// @dev Sends an arbitrary message to receiving chain.\\n /// Note: Calls authenticated by receiving gateway checking the sender argument.\\n /// @param _to The cross-domain contract address which receives the calldata.\\n /// @param _fnSelection The function selector of the receiving contract.\\n /// @param _data The message calldata, abi.encode(...)\\n /// @return msgId The index of the message in the inbox, as a message Id, needed to relay the message.\\n function sendMessage(address _to, bytes4 _fnSelection, bytes memory _data) external returns (uint64 msgId);\\n\\n /// @dev Snapshots can be saved a maximum of once per epoch.\\n /// Saves snapshot of state root.\\n /// `O(log(count))` where count number of messages in the inbox.\\n function saveSnapshot() external;\\n}\\n\",\"keccak256\":\"0xa8e2f65b7596235422f39933af80f02473493d2b15b398d7e34b81c82bd24a29\",\"license\":\"MIT\"},\"src/interfaces/outboxes/IVeaOutboxOnL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Outbox on L1 chains like Ethereum, Gnosis, Polygon POS where storage is expensive.\\ninterface IVeaOutboxOnL1 {\\n /// @dev Verifies and relays the message.\\n /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication.\\n /// @param _proof The merkle proof to prove the message.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address to send the message to.\\n /// @param _message The message to relay.\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external;\\n\\n /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge.\\n /// Note: Access restricted to canonical bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0xf1d52e289e790088502b7909f11f47bc33ddd3fc545636b7fb29c01ed00d3ff3\",\"license\":\"MIT\"},\"src/interfaces/types/VeaClaim.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nenum Party {\\n None,\\n Claimer,\\n Challenger\\n}\\n\\nstruct Claim {\\n bytes32 stateRoot;\\n address claimer;\\n uint32 timestampClaimed;\\n uint32 timestampVerification;\\n uint32 blocknumberVerification;\\n Party honest;\\n address challenger;\\n}\\n\",\"keccak256\":\"0xfef781e359c97aebbe8dbfcb75edb7cb962139fd9ea538b8b89a3f2e13a05bfe\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60c060405234801561000f575f80fd5b50604051610bed380380610bed83398101604081905261002e91610045565b6080919091526001600160a01b031660a05261007f565b5f8060408385031215610056575f80fd5b825160208401519092506001600160a01b0381168114610074575f80fd5b809150509250929050565b60805160a051610b236100ca5f395f818161012401526105d001525f8181610163015281816101bd015281816101ef015281816102240152818161025301526104df0152610b235ff3fe608060405234801561000f575f80fd5b506004361061009b575f3560e01c80635f85896c116100635780635f85896c1461010c578063744b49bf1461011f578063b5b7a1841461015e578063c705e41214610185578063d6565a2d14610198575f80fd5b806306661abd1461009f578063222ae786146100d15780633ac3b6b6146100e75780634a439cfe146100ef5780635192053514610102575b5f80fd5b6041546100b39067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100d96101b7565b6040519081526020016100c8565b6100d96101e7565b6100d96100fd3660046106a5565b61021e565b61010a61024f565b005b6100b361011a366004610745565b610370565b6101467f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c8565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b61010a610193366004610815565b6104dd565b6100d96101a63660046106a5565b5f6020819052908152604090205481565b5f6101e27f0000000000000000000000000000000000000000000000000000000000000000426108d7565b905090565b5f60016102147f0000000000000000000000000000000000000000000000000000000000000000426108d7565b6101e291906108f6565b5f6102497f0000000000000000000000000000000000000000000000000000000000000000836108d7565b92915050565b5f807f00000000000000000000000000000000000000000000000000000000000000004281610280576102806108c3565b60415491900492505f9067ffffffffffffffff165b80156102ce57806001166001036102c257600182604081106102b9576102b9610915565b015492506102ce565b6001918201911c610295565b60011c5b801561031057600191820191818116900361030857610305600183604081106102fd576102fd610915565b015484610678565b92505b60011c6102d2565b50505f8281526020818152604091829020839055604154825184815291820185905267ffffffffffffffff168183015290517f592424eb1d6135501bd20833f15fd127c29d08eed4f03872f6f75182126b1e489181900360600190a15050565b6041545f9067ffffffffffffffff9081169081106103c65760405162461bcd60e51b815260206004820152600e60248201526d24b73137bc1034b990333ab6361760911b60448201526064015b60405180910390fd5b6040515f90829087906103e19088903390899060200161094b565b60408051601f1981840301815290829052610400939291602001610980565b60408051601f1981840301815291905280516020808301919091205f908152908120919250600184015b600181165f036104625761044a600183604081106102fd576102fd610915565b92506001918201911c677fffffffffffffff1661042a565b50816001826040811061047757610477610915565b0155506041805467ffffffffffffffff19166001850167ffffffffffffffff161790556040517f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036906104ca9084906109f9565b60405180910390a1509095945050505050565b7f0000000000000000000000000000000000000000000000000000000000000000428161050c5761050c6108c3565b0482106105665760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c792073656e6420706173742065706f636820736e617073686f6044820152613a1760f11b60648201526084016103bd565b5f828152602081905260408082205490516105879185918590602401610a12565b60408051601f198184030181529181526020820180516001600160e01b0316630f0adca560e01b179052516349460b4d60e11b81529091505f9060649063928c169a906105fa907f0000000000000000000000000000000000000000000000000000000000000000908690600401610aab565b6020604051808303815f875af1158015610616573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a9190610ad6565b60405181815290915084907f6fdd49f435101fc7b6ebdec7c8972932a926d18f6cb78a8891dfe950743b6b829060200160405180910390a250505050565b5f8183101561069357825f528160205260405f209050610249565b505f9081526020919091526040902090565b5f602082840312156106b5575f80fd5b5035919050565b80356001600160a01b03811681146106d2575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561070e5761070e6106d7565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561073d5761073d6106d7565b604052919050565b5f805f60608486031215610757575f80fd5b610760846106bc565b92506020848101356001600160e01b03198116811461077d575f80fd5b9250604085013567ffffffffffffffff80821115610799575f80fd5b818701915087601f8301126107ac575f80fd5b8135818111156107be576107be6106d7565b6107d0601f8201601f19168501610714565b915080825288848285010111156107e5575f80fd5b80848401858401375f848284010152508093505050509250925092565b803563ffffffff811681146106d2575f80fd5b5f80828403610100811215610828575f80fd5b8335925060e0601f198201121561083d575f80fd5b506108466106eb565b60208401358152610859604085016106bc565b602082015261086a60608501610802565b604082015261087b60808501610802565b606082015261088c60a08501610802565b608082015260c0840135600381106108a2575f80fd5b60a08201526108b360e085016106bc565b60c0820152809150509250929050565b634e487b7160e01b5f52601260045260245ffd5b5f826108f157634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561024957634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f5b8381101561094357818101518382015260200161092b565b50505f910152565b63ffffffff60e01b841681528260048201525f8251610971816024850160208701610929565b91909101602401949350505050565b67ffffffffffffffff60c01b8460c01b1681526bffffffffffffffffffffffff198360601b1660088201525f82516109bf81601c850160208701610929565b91909101601c01949350505050565b5f81518084526109e5816020860160208601610929565b601f01601f19169290920160200192915050565b602081525f610a0b60208301846109ce565b9392505050565b5f610120820190508482528360208301528251604083015260018060a01b036020840151166060830152604083015163ffffffff80821660808501528060608601511660a08501528060808601511660c0850152505060a083015160038110610a8957634e487b7160e01b5f52602160045260245ffd5b60e083015260c092909201516001600160a01b03166101009091015292915050565b6001600160a01b03831681526040602082018190525f90610ace908301846109ce565b949350505050565b5f60208284031215610ae6575f80fd5b505191905056fea2646970667358221220e0d777b7e1a2c210f6fdf79122d58020ed70e6c9bd569102148c7b15915e21a764736f6c63430008180033", + "deployedBytecode": "0x608060405234801561000f575f80fd5b506004361061009b575f3560e01c80635f85896c116100635780635f85896c1461010c578063744b49bf1461011f578063b5b7a1841461015e578063c705e41214610185578063d6565a2d14610198575f80fd5b806306661abd1461009f578063222ae786146100d15780633ac3b6b6146100e75780634a439cfe146100ef5780635192053514610102575b5f80fd5b6041546100b39067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b6100d96101b7565b6040519081526020016100c8565b6100d96101e7565b6100d96100fd3660046106a5565b61021e565b61010a61024f565b005b6100b361011a366004610745565b610370565b6101467f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100c8565b6100d97f000000000000000000000000000000000000000000000000000000000000000081565b61010a610193366004610815565b6104dd565b6100d96101a63660046106a5565b5f6020819052908152604090205481565b5f6101e27f0000000000000000000000000000000000000000000000000000000000000000426108d7565b905090565b5f60016102147f0000000000000000000000000000000000000000000000000000000000000000426108d7565b6101e291906108f6565b5f6102497f0000000000000000000000000000000000000000000000000000000000000000836108d7565b92915050565b5f807f00000000000000000000000000000000000000000000000000000000000000004281610280576102806108c3565b60415491900492505f9067ffffffffffffffff165b80156102ce57806001166001036102c257600182604081106102b9576102b9610915565b015492506102ce565b6001918201911c610295565b60011c5b801561031057600191820191818116900361030857610305600183604081106102fd576102fd610915565b015484610678565b92505b60011c6102d2565b50505f8281526020818152604091829020839055604154825184815291820185905267ffffffffffffffff168183015290517f592424eb1d6135501bd20833f15fd127c29d08eed4f03872f6f75182126b1e489181900360600190a15050565b6041545f9067ffffffffffffffff9081169081106103c65760405162461bcd60e51b815260206004820152600e60248201526d24b73137bc1034b990333ab6361760911b60448201526064015b60405180910390fd5b6040515f90829087906103e19088903390899060200161094b565b60408051601f1981840301815290829052610400939291602001610980565b60408051601f1981840301815291905280516020808301919091205f908152908120919250600184015b600181165f036104625761044a600183604081106102fd576102fd610915565b92506001918201911c677fffffffffffffff1661042a565b50816001826040811061047757610477610915565b0155506041805467ffffffffffffffff19166001850167ffffffffffffffff161790556040517f8c5261668696ce22758910d05bab8f186d6eb247ceac2af2e82c7dc17669b036906104ca9084906109f9565b60405180910390a1509095945050505050565b7f0000000000000000000000000000000000000000000000000000000000000000428161050c5761050c6108c3565b0482106105665760405162461bcd60e51b815260206004820152602260248201527f43616e206f6e6c792073656e6420706173742065706f636820736e617073686f6044820152613a1760f11b60648201526084016103bd565b5f828152602081905260408082205490516105879185918590602401610a12565b60408051601f198184030181529181526020820180516001600160e01b0316630f0adca560e01b179052516349460b4d60e11b81529091505f9060649063928c169a906105fa907f0000000000000000000000000000000000000000000000000000000000000000908690600401610aab565b6020604051808303815f875af1158015610616573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a9190610ad6565b60405181815290915084907f6fdd49f435101fc7b6ebdec7c8972932a926d18f6cb78a8891dfe950743b6b829060200160405180910390a250505050565b5f8183101561069357825f528160205260405f209050610249565b505f9081526020919091526040902090565b5f602082840312156106b5575f80fd5b5035919050565b80356001600160a01b03811681146106d2575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e0810167ffffffffffffffff8111828210171561070e5761070e6106d7565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561073d5761073d6106d7565b604052919050565b5f805f60608486031215610757575f80fd5b610760846106bc565b92506020848101356001600160e01b03198116811461077d575f80fd5b9250604085013567ffffffffffffffff80821115610799575f80fd5b818701915087601f8301126107ac575f80fd5b8135818111156107be576107be6106d7565b6107d0601f8201601f19168501610714565b915080825288848285010111156107e5575f80fd5b80848401858401375f848284010152508093505050509250925092565b803563ffffffff811681146106d2575f80fd5b5f80828403610100811215610828575f80fd5b8335925060e0601f198201121561083d575f80fd5b506108466106eb565b60208401358152610859604085016106bc565b602082015261086a60608501610802565b604082015261087b60808501610802565b606082015261088c60a08501610802565b608082015260c0840135600381106108a2575f80fd5b60a08201526108b360e085016106bc565b60c0820152809150509250929050565b634e487b7160e01b5f52601260045260245ffd5b5f826108f157634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561024957634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f5b8381101561094357818101518382015260200161092b565b50505f910152565b63ffffffff60e01b841681528260048201525f8251610971816024850160208701610929565b91909101602401949350505050565b67ffffffffffffffff60c01b8460c01b1681526bffffffffffffffffffffffff198360601b1660088201525f82516109bf81601c850160208701610929565b91909101601c01949350505050565b5f81518084526109e5816020860160208601610929565b601f01601f19169290920160200192915050565b602081525f610a0b60208301846109ce565b9392505050565b5f610120820190508482528360208301528251604083015260018060a01b036020840151166060830152604083015163ffffffff80821660808501528060608601511660a08501528060808601511660c0850152505060a083015160038110610a8957634e487b7160e01b5f52602160045260245ffd5b60e083015260c092909201516001600160a01b03166101009091015292915050565b6001600160a01b03831681526040602082018190525f90610ace908301846109ce565b949350505050565b5f60208284031215610ae6575f80fd5b505191905056fea2646970667358221220e0d777b7e1a2c210f6fdf79122d58020ed70e6c9bd569102148c7b15915e21a764736f6c63430008180033", "devdoc": { "details": "Vea Inbox From Arbitrum to Ethereum. Note: This contract is deployed on Arbitrum.", "events": { diff --git a/contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json b/contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json index bde7532d..de4eb991 100644 --- a/contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json +++ b/contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json @@ -1,5 +1,5 @@ { - "address": "0x5AD255400913515C8DA7E82E6b8A109fA5c46135", + "address": "0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674", "abi": [ { "inputs": [ @@ -396,7 +396,7 @@ "inputs": [ { "internalType": "uint256", - "name": "", + "name": "epoch", "type": "uint256" } ], @@ -1130,32 +1130,32 @@ "type": "function" } ], - "transactionHash": "0xe42ef9632243f7805fb7ddb1162f1cb179c7a7175fd6315c2af37896d955cffc", + "transactionHash": "0xcf7a0b07025d0e2bdcbbb68fa613e26d11e794977e1b6d6238c056c7dd6dceea", "receipt": { "to": null, - "from": "0x7D81bD51FF105985725C2Eff263b0E46e6499577", - "contractAddress": "0x5AD255400913515C8DA7E82E6b8A109fA5c46135", - "transactionIndex": 65, - "gasUsed": "2318236", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000400200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb34e05214b16e58181451411592d1ea888afb0bced2b2f794a2c6d07dae181e5", - "transactionHash": "0xe42ef9632243f7805fb7ddb1162f1cb179c7a7175fd6315c2af37896d955cffc", + "from": "0xFa00D29d378EDC57AA1006946F0fc6230a5E3288", + "contractAddress": "0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674", + "transactionIndex": 67, + "gasUsed": "2274416", + "logsBloom": "0x00000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000200000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb17dc65e55d1ee5293f975a0a018ad58ba764df2539538d104bc33c699ae8e8a", + "transactionHash": "0xcf7a0b07025d0e2bdcbbb68fa613e26d11e794977e1b6d6238c056c7dd6dceea", "logs": [ { - "transactionIndex": 65, - "blockNumber": 5379614, - "transactionHash": "0xe42ef9632243f7805fb7ddb1162f1cb179c7a7175fd6315c2af37896d955cffc", - "address": "0x5AD255400913515C8DA7E82E6b8A109fA5c46135", + "transactionIndex": 67, + "blockNumber": 6458841, + "transactionHash": "0xcf7a0b07025d0e2bdcbbb68fa613e26d11e794977e1b6d6238c056c7dd6dceea", + "address": "0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674", "topics": [ "0x611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b" ], "data": "0x0000000000000000000000000000000000000000000000000000000000015180", - "logIndex": 101, - "blockHash": "0xb34e05214b16e58181451411592d1ea888afb0bced2b2f794a2c6d07dae181e5" + "logIndex": 102, + "blockHash": "0xb17dc65e55d1ee5293f975a0a018ad58ba764df2539538d104bc33c699ae8e8a" } ], - "blockNumber": 5379614, - "cumulativeGasUsed": "9295404", + "blockNumber": 6458841, + "cumulativeGasUsed": "12082036", "status": 1, "byzantium": true }, @@ -1164,15 +1164,15 @@ 1800, 0, 10000000000000, - "0x77e95F54032f467eC45c48C6affc203f93858783", + "0x0B5851fE2a931F619F73E739E5435C43976f1D68", "0x38f918D0E9F1b721EDaA41302E399fa1B79333a9", 10000000000000 ], - "numDeployments": 2, - "solcInputHash": "7b45a9f9dbde1d7a0346ad3f0c7f7efe", - "metadata": "{\"compiler\":{\"version\":\"0.8.18+commit.87f61d96\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minChallengePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutEpochs\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_veaInboxArbToEthDevnet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxMissingBlocks\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"}],\"name\":\"Challenged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_msgId\",\"type\":\"uint64\"}],\"name\":\"MessageRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"VerificationStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"Verified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_requestedSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"sequencerDelayLimitDecreaseRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"sequencerDelayLimitUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"censorshipTestStatus\",\"outputs\":[{\"internalType\":\"enum VeaOutboxArbToEth.CensorshipTestStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"challenge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_withdrawalAddress\",\"type\":\"address\"}],\"name\":\"challenge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_devnetOperator\",\"type\":\"address\"}],\"name\":\"changeDevnetOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositPlusReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateroot\",\"type\":\"bytes32\"}],\"name\":\"devnetAdvanceState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"devnetOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"epochAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochNow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeSequencerDelayLimitDecreaseRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"hashClaim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_msgId\",\"type\":\"uint256\"}],\"name\":\"isMsgRelayed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRelayed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVerifiedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxMissingBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minChallengePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"resolveDisputedClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"_msgId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimitDecreaseRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requestedsequencerDelayLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"startVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timeoutEpochs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateSequencerDelayLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaInboxArbToEth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"verifySnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawChallengeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawChallengerEscapeHatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawClaimDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawClaimerEscapeHatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vea Outbox From arbitrumSepolia to Sepolia. Note: This contract is deployed on Sepolia. Note: This contract is permissioned for developer testing (devnet).\",\"events\":{\"Challenged(uint256,address)\":{\"details\":\"This event indicates that `sendSnapshot(epoch)` should be called in the inbox.\",\"params\":{\"_challenger\":\"The address of the challenger.\",\"_epoch\":\"The epoch associated with the challenged claim.\"}},\"Claimed(address,uint256,bytes32)\":{\"details\":\"Watchers check this event to challenge fraud.\",\"params\":{\"_claimer\":\"The address of the claimer.\",\"_epoch\":\"The epoch associated with the claim.\",\"_stateRoot\":\"The state root of the claim.\"}},\"MessageRelayed(uint64)\":{\"details\":\"This event indicates that a message has been relayed.\",\"params\":{\"_msgId\":\"The msgId of the message that was relayed.\"}},\"VerificationStarted(uint256)\":{\"details\":\"This event indicates that the censorship test started and all challengers are ready even in the worst case scenario of a malicious sequencer.\",\"params\":{\"_epoch\":\"The epoch that started verification.\"}},\"Verified(uint256)\":{\"details\":\"This events indicates that verification has succeeded. The messages are ready to be relayed.\",\"params\":{\"_epoch\":\"The epoch that was verified.\"}},\"sequencerDelayLimitDecreaseRequested(uint256)\":{\"details\":\"This event indicates that a request to decrease the sequencer limit has been made.\",\"params\":{\"_requestedSequencerDelayLimit\":\"The new sequencer delay limit requested.\"}},\"sequencerDelayLimitUpdated(uint256)\":{\"details\":\"This event indicates the sequencer limit updated.\",\"params\":{\"_newSequencerDelayLimit\":\"The new sequencer delay limit.\"}}},\"kind\":\"dev\",\"methods\":{\"censorshipTestStatus((bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Gets the status of the censorship test for claim.\",\"params\":{\"_claim\":\"The claim to test.\"},\"returns\":{\"status\":\"True if the claim passed the censorship test.\"}},\"challenge(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\"}},\"challenge(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address),address)\":{\"details\":\"Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.Allows proxy contracts to batch challenges.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\",\"_withdrawalAddress\":\"The address to withdraw the deposit + reward to.\"}},\"changeDevnetOperator(address)\":{\"details\":\"Changes the devnet operator.\",\"params\":{\"_devnetOperator\":\"The new testnet operator.\"}},\"claim(uint256,bytes32)\":{\"details\":\"Submit a claim about the _stateRoot at _epoch and submit a deposit.\",\"params\":{\"_epoch\":\"The epoch for which the claim is made.\",\"_stateRoot\":\"The state root to claim.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_deposit\":\"The deposit amount to submit a claim in wei.\",\"_epochPeriod\":\"The duration of each epoch.\",\"_maxMissingBlocks\":\"The maximum number of blocks that can be missing in a challenge period.\",\"_minChallengePeriod\":\"The minimum time window to challenge a claim.\",\"_timeoutEpochs\":\"The epochs before the bridge is considered shutdown.\",\"_veaInboxArbToEthDevnet\":\"The address of the inbox contract on Arbitrum.\"}},\"devnetAdvanceState(uint256,bytes32)\":{\"details\":\"Testnet operator utility function to claim, validate and withdraw.\",\"params\":{\"_epoch\":\"The epoch for which the claim is made.\",\"_stateroot\":\"The state root to claim.\"}},\"epochAt(uint256)\":{\"details\":\"Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\",\"returns\":{\"epoch\":\"The hash of the claim.\"}},\"epochNow()\":{\"details\":\"Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\",\"returns\":{\"epoch\":\"The hash of the claim.\"}},\"executeSequencerDelayLimitDecreaseRequest()\":{\"details\":\"execute sequencerDelayLimitDecreaseRequest\"},\"hashClaim((bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Hashes the claim.\",\"params\":{\"_claim\":\"The claim to hash.\"},\"returns\":{\"hashedClaim\":\"The hash of the claim.\"}},\"isMsgRelayed(uint256)\":{\"details\":\"Get the msg relayed status.\",\"params\":{\"_msgId\":\"The msgId to check.\"},\"returns\":{\"isRelayed\":\"True if the msg was relayed.\"}},\"resolveDisputedClaim(uint256,bytes32,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Resolves any challenge of the optimistic claim for '_epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch to verify.\",\"_stateRoot\":\"The true state root for the epoch.\"}},\"sendMessage(bytes32[],uint64,address,bytes)\":{\"details\":\"Verifies and relays the message. UNTRUSTED.\",\"params\":{\"_message\":\"The message encoded in the vea inbox as abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\",\"_msgId\":\"The zero based index of the message in the inbox.\",\"_proof\":\"The merkle proof to prove the message inclusion in the inbox state root.\",\"_to\":\"The address of the contract on Ethereum to call.\"}},\"startVerification(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Start verification for claim for 'epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\"}},\"updateSequencerDelayLimit()\":{\"details\":\"Request to decrease the sequencerDelayLimit.\"},\"verifySnapshot(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Resolves the optimistic claim for '_epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the optimistic claim.\"}},\"withdrawChallengeDeposit(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the deposit back to the Challenger if successful. Includes a portion of the Bridger's deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the challenge deposit to withraw.\"}},\"withdrawChallengerEscapeHatch(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"When bridge is shutdown, no claim disputes can be resolved. This allows the challenger to withdraw their deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}},\"withdrawClaimDeposit(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the deposit back to the Bridger if their claim is not successfully challenged. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}},\"withdrawClaimerEscapeHatch(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"When bridge is shutdown, no claim disputes can be resolved. This allows the claimer to withdraw their deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"resolveDisputedClaim(uint256,bytes32,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"notice\":\"Note: Access restricted to arbitrum bridge.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol\":\"VeaOutboxArbToEthDevnet\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/arbitrumToEth/VeaOutboxArbToEth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../canonical/arbitrum/ISequencerInbox.sol\\\";\\nimport \\\"../canonical/arbitrum/IBridge.sol\\\";\\nimport \\\"../canonical/arbitrum/IOutbox.sol\\\";\\nimport \\\"../interfaces/outboxes/IVeaOutboxOnL1.sol\\\";\\n\\n/// @dev Vea Outbox From Arbitrum to Ethereum.\\n/// Note: This contract is deployed on Ethereum.\\ncontract VeaOutboxArbToEth is IVeaOutboxOnL1 {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IBridge public immutable bridge; // The address of the Arbitrum bridge contract.\\n address public immutable veaInboxArbToEth; // The address of the vea inbox on arbitrum.\\n\\n uint256 public immutable deposit; // The deposit in wei required to submit a claim or challenge\\n uint256 public immutable burn; // The amount of wei to burn. deposit / 2\\n uint256 public immutable depositPlusReward; // 2 * deposit - burn\\n\\n address public constant BURN_ADDRESS = address(0); // Address to send burned eth\\n uint256 internal constant SLOT_TIME = 12; // Ethereum 12 second slot time\\n\\n uint256 public immutable epochPeriod; // Epochs mark the period between potential snapshots.\\n uint256 public immutable minChallengePeriod; // Minimum time window to challenge a claim, even with a malicious sequencer.\\n\\n uint256 public immutable timeoutEpochs; // The number of epochs without forward progress before the bridge is considered shutdown.\\n uint256 public immutable maxMissingBlocks; // The maximum number of blocks that can be missing in a challenge period.\\n\\n bytes32 public stateRoot; // merkle root of the outbox state\\n uint256 public latestVerifiedEpoch; // The latest epoch that has been verified.\\n\\n mapping(uint256 => bytes32) public claimHashes; // epoch => claim\\n mapping(uint256 => bytes32) internal relayed; // msgId/256 => packed replay bitmap, preferred over a simple boolean mapping to save 15k gas per message\\n\\n uint256 public sequencerDelayLimit; // This is MaxTimeVariation.delaySeconds from the arbitrum sequencer inbox, it is the maximum seconds the sequencer can backdate L2 txns relative to the L1 clock.\\n SequencerDelayLimitDecreaseRequest public sequencerDelayLimitDecreaseRequest; // Decreasing the sequencerDelayLimit requires a delay to avoid griefing by sequencer, so we keep track of the request here.\\n\\n struct SequencerDelayLimitDecreaseRequest {\\n uint256 requestedsequencerDelayLimit;\\n uint256 timestamp;\\n }\\n\\n enum CensorshipTestStatus {\\n Failed,\\n Passed,\\n NotStarted,\\n InProgress\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Watchers check this event to challenge fraud.\\n /// @param _claimer The address of the claimer.\\n /// @param _epoch The epoch associated with the claim.\\n /// @param _stateRoot The state root of the claim.\\n event Claimed(address indexed _claimer, uint256 indexed _epoch, bytes32 _stateRoot);\\n\\n /// @dev This event indicates that `sendSnapshot(epoch)` should be called in the inbox.\\n /// @param _epoch The epoch associated with the challenged claim.\\n /// @param _challenger The address of the challenger.\\n event Challenged(uint256 indexed _epoch, address indexed _challenger);\\n\\n /// @dev This event indicates that a message has been relayed.\\n /// @param _msgId The msgId of the message that was relayed.\\n event MessageRelayed(uint64 _msgId);\\n\\n /// @dev This event indicates that the censorship test started and all challengers are ready even in the worst case scenario of a malicious sequencer.\\n /// @param _epoch The epoch that started verification.\\n event VerificationStarted(uint256 indexed _epoch);\\n\\n /// @dev This events indicates that verification has succeeded. The messages are ready to be relayed.\\n /// @param _epoch The epoch that was verified.\\n event Verified(uint256 _epoch);\\n\\n /// @dev This event indicates the sequencer limit updated.\\n /// @param _newSequencerDelayLimit The new sequencer delay limit.\\n event sequencerDelayLimitUpdated(uint256 _newSequencerDelayLimit);\\n\\n /// @dev This event indicates that a request to decrease the sequencer limit has been made.\\n /// @param _requestedSequencerDelayLimit The new sequencer delay limit requested.\\n event sequencerDelayLimitDecreaseRequested(uint256 _requestedSequencerDelayLimit);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier OnlyBridgeRunning() {\\n unchecked {\\n require(block.timestamp / epochPeriod - latestVerifiedEpoch <= timeoutEpochs, \\\"Bridge Shutdown.\\\");\\n }\\n _;\\n }\\n\\n modifier OnlyBridgeShutdown() {\\n unchecked {\\n require(block.timestamp / epochPeriod - latestVerifiedEpoch > timeoutEpochs, \\\"Bridge Running.\\\");\\n }\\n _;\\n }\\n\\n /// @dev Constructor.\\n /// Note: epochPeriod must match the VeaInboxArbToEth contract deployment on Arbitrum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\\n /// @param _deposit The deposit amount to submit a claim in wei.\\n /// @param _epochPeriod The duration of each epoch.\\n /// @param _minChallengePeriod The minimum time window to challenge a claim.\\n /// @param _timeoutEpochs The epochs before the bridge is considered shutdown.\\n /// @param _veaInboxArbToEth The address of the inbox contract on Arbitrum.\\n /// @param _maxMissingBlocks The maximum number of blocks that can be missing in a challenge period.\\n constructor(\\n uint256 _deposit,\\n uint256 _epochPeriod,\\n uint256 _minChallengePeriod,\\n uint256 _timeoutEpochs,\\n address _veaInboxArbToEth,\\n address _bridge,\\n uint256 _maxMissingBlocks\\n ) {\\n deposit = _deposit;\\n // epochPeriod must match the VeaInboxArbToEth contract deployment epochPeriod value.\\n epochPeriod = _epochPeriod;\\n minChallengePeriod = _minChallengePeriod;\\n timeoutEpochs = _timeoutEpochs;\\n veaInboxArbToEth = _veaInboxArbToEth;\\n bridge = IBridge(_bridge);\\n maxMissingBlocks = _maxMissingBlocks;\\n\\n updateSequencerDelayLimit();\\n\\n // claimant and challenger are not sybil resistant\\n // must burn half deposit to prevent zero cost griefing\\n burn = _deposit / 2;\\n depositPlusReward = 2 * _deposit - burn;\\n\\n latestVerifiedEpoch = block.timestamp / epochPeriod - 1;\\n }\\n\\n // ************************************* //\\n // * Parameter Updates * //\\n // ************************************* //\\n\\n /// @dev Request to decrease the sequencerDelayLimit.\\n function updateSequencerDelayLimit() public {\\n // the maximum asynchronous lag between the L2 and L1 clocks\\n (, , uint256 newSequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n if (newSequencerDelayLimit > sequencerDelayLimit) {\\n // For sequencerDelayLimit / epochPeriod > timeoutEpochs, claims cannot be verified by the timeout period and the bridge will shutdown.\\n sequencerDelayLimit = newSequencerDelayLimit;\\n emit sequencerDelayLimitUpdated(newSequencerDelayLimit);\\n } else if (newSequencerDelayLimit < sequencerDelayLimit) {\\n require(\\n sequencerDelayLimitDecreaseRequest.timestamp == 0,\\n \\\"Sequencer limit decrease request already pending.\\\"\\n );\\n\\n sequencerDelayLimitDecreaseRequest = SequencerDelayLimitDecreaseRequest({\\n requestedsequencerDelayLimit: newSequencerDelayLimit,\\n timestamp: block.timestamp\\n });\\n\\n emit sequencerDelayLimitDecreaseRequested(newSequencerDelayLimit);\\n }\\n }\\n\\n /// @dev execute sequencerDelayLimitDecreaseRequest\\n function executeSequencerDelayLimitDecreaseRequest() external {\\n require(sequencerDelayLimitDecreaseRequest.timestamp != 0, \\\"No pending sequencer limit decrease request.\\\");\\n require(\\n block.timestamp > sequencerDelayLimitDecreaseRequest.timestamp + sequencerDelayLimit,\\n \\\"Sequencer limit decrease request is still pending.\\\"\\n );\\n\\n uint256 requestedsequencerDelayLimit = sequencerDelayLimitDecreaseRequest.requestedsequencerDelayLimit;\\n delete sequencerDelayLimitDecreaseRequest;\\n\\n (, , uint256 currentsequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n // check the request is still consistent with the arbiturm bridge\\n if (currentsequencerDelayLimit == requestedsequencerDelayLimit) {\\n sequencerDelayLimit = requestedsequencerDelayLimit;\\n emit sequencerDelayLimitUpdated(requestedsequencerDelayLimit);\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Submit a claim about the _stateRoot at _epoch and submit a deposit.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateRoot The state root to claim.\\n function claim(uint256 _epoch, bytes32 _stateRoot) external payable virtual {\\n require(msg.value >= deposit, \\\"Insufficient claim deposit.\\\");\\n unchecked {\\n require(_epoch == block.timestamp / epochPeriod - 1, \\\"Invalid epoch.\\\");\\n }\\n require(_stateRoot != bytes32(0), \\\"Invalid claim.\\\");\\n require(claimHashes[_epoch] == bytes32(0), \\\"Claim already made.\\\");\\n\\n claimHashes[_epoch] = hashClaim(\\n Claim({\\n stateRoot: _stateRoot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n })\\n );\\n\\n emit Claimed(msg.sender, _epoch, _stateRoot);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function challenge(uint256 _epoch, Claim memory _claim) external payable {\\n _challenge(_epoch, _claim, msg.sender);\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @dev Allows proxy contracts to batch challenges.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _withdrawalAddress The address to withdraw the deposit + reward to.\\n function challenge(uint256 _epoch, Claim memory _claim, address _withdrawalAddress) external payable {\\n _challenge(_epoch, _claim, _withdrawalAddress);\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _withdrawAddress The address to withdraw the deposit + reward to.\\n function _challenge(uint256 _epoch, Claim memory _claim, address _withdrawAddress) internal {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(msg.value >= deposit, \\\"Insufficient challenge deposit.\\\");\\n require(_claim.challenger == address(0), \\\"Claim already challenged.\\\");\\n require(_claim.honest == Party.None, \\\"Claim already verified.\\\");\\n\\n _claim.challenger = _withdrawAddress;\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit Challenged(_epoch, _withdrawAddress);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Start verification for claim for 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function startVerification(uint256 _epoch, Claim memory _claim) external virtual {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n\\n // sequencerDelayLimit + epochPeriod is the worst case time to sync the L2 state compared to L1 clock.\\n // using checked arithmetic incase arbitrum governance sets sequencerDelayLimit to a large value\\n require(\\n block.timestamp - uint256(_claim.timestampClaimed) >= sequencerDelayLimit + epochPeriod,\\n \\\"Claim must wait atleast maxL2StateSyncDelay.\\\"\\n );\\n\\n CensorshipTestStatus _censorshipTestStatus = censorshipTestStatus(_claim);\\n require(\\n _censorshipTestStatus == CensorshipTestStatus.NotStarted ||\\n _censorshipTestStatus == CensorshipTestStatus.Failed,\\n \\\"Claim verification in progress or already completed.\\\"\\n );\\n\\n _claim.timestampVerification = uint32(block.timestamp);\\n _claim.blocknumberVerification = uint32(block.number);\\n\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit VerificationStarted(_epoch);\\n }\\n\\n /// @dev Resolves the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch of the optimistic claim.\\n /// @param _claim The claim associated with the epoch.\\n function verifySnapshot(uint256 _epoch, Claim memory _claim) external virtual OnlyBridgeRunning {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.challenger == address(0), \\\"Claim is challenged.\\\");\\n require(censorshipTestStatus(_claim) == CensorshipTestStatus.Passed, \\\"Censorship test not passed.\\\");\\n\\n if (_epoch > latestVerifiedEpoch) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _claim.stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n _claim.honest = Party.Claimer;\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n\\n /// Note: Access restricted to arbitrum bridge.\\n /// @dev Resolves any challenge of the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(\\n uint256 _epoch,\\n bytes32 _stateRoot,\\n Claim memory _claim\\n ) external virtual OnlyBridgeRunning {\\n // Arbitrum -> Ethereum message sender authentication\\n // docs: https://developer.arbitrum.io/arbos/l2-to-l1-messaging/\\n // example: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/dfef6a68ee18dbd2e1f5a099061a3b8a0e404485/contracts/crosschain/arbitrum/LibArbitrumL1.sol#L34\\n // example: https://github.com/OffchainLabs/arbitrum-tutorials/blob/2c1b7d2db8f36efa496e35b561864c0f94123a5f/packages/greeter/contracts/ethereum/GreeterL1.sol#L50\\n // note: we call the bridge for the activeOutbox address\\n\\n require(msg.sender == address(bridge), \\\"Not from native arbitrum bridge.\\\");\\n require(IOutbox(bridge.activeOutbox()).l2ToL1Sender() == veaInboxArbToEth, \\\"veaInboxArbToEth only.\\\");\\n\\n if (_epoch > latestVerifiedEpoch && _stateRoot != bytes32(0)) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n if (claimHashes[_epoch] == hashClaim(_claim)) {\\n if (_claim.stateRoot == _stateRoot) {\\n _claim.honest = Party.Claimer;\\n } else if (_claim.challenger != address(0)) {\\n _claim.honest = Party.Challenger;\\n }\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n }\\n\\n /// @dev Verifies and relays the message. UNTRUSTED.\\n /// @param _proof The merkle proof to prove the message inclusion in the inbox state root.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address of the contract on Ethereum to call.\\n /// @param _message The message encoded in the vea inbox as abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external {\\n require(_proof.length < 64, \\\"Proof too long.\\\");\\n\\n bytes32 nodeHash = keccak256(abi.encodePacked(_msgId, _to, _message));\\n\\n // double hashed leaf\\n // avoids second order preimage attacks\\n // https://flawed.net.nz/2018/02/21/attacking-merkle-trees-with-a-second-preimage-attack/\\n assembly {\\n mstore(0x00, nodeHash)\\n nodeHash := keccak256(0x00, 0x20)\\n }\\n\\n unchecked {\\n for (uint256 i = 0; i < _proof.length; i++) {\\n bytes32 proofElement = _proof[i];\\n // sort sibling hashes as a convention for efficient proof validation\\n if (proofElement > nodeHash)\\n assembly {\\n mstore(0x00, nodeHash)\\n mstore(0x20, proofElement)\\n nodeHash := keccak256(0x00, 0x40)\\n }\\n else\\n assembly {\\n mstore(0x00, proofElement)\\n mstore(0x20, nodeHash)\\n nodeHash := keccak256(0x00, 0x40)\\n }\\n }\\n }\\n\\n require(stateRoot == nodeHash, \\\"Invalid proof.\\\");\\n\\n // msgId is the zero-based index of the message in the inbox.\\n // msgId is also used as an index in the relayed bitmap to prevent replay.\\n // Note: a bitmap is used instead of a simple boolean mapping to save 15k gas per message.\\n\\n uint256 relayIndex = _msgId >> 8;\\n uint256 offset;\\n\\n unchecked {\\n offset = _msgId % 256;\\n }\\n\\n bytes32 replay = relayed[relayIndex];\\n\\n require(((replay >> offset) & bytes32(uint256(1))) == bytes32(0), \\\"Message already relayed\\\");\\n relayed[relayIndex] = replay | bytes32(1 << offset);\\n\\n // UNTRUSTED.\\n (bool success, ) = _to.call(_message);\\n require(success, \\\"Failed to call contract\\\");\\n\\n emit MessageRelayed(_msgId);\\n }\\n\\n /// @dev Sends the deposit back to the Claimer if successful. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawClaimDeposit(uint256 _epoch, Claim calldata _claim) external virtual {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Claimer, \\\"Claim failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n if (_claim.challenger != address(0)) {\\n payable(BURN_ADDRESS).send(burn);\\n payable(_claim.claimer).send(depositPlusReward); // User is responsible for accepting ETH.\\n } else {\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Sends the deposit back to the Challenger if successful. Includes a portion of the Bridger's deposit.\\n /// @param _epoch The epoch associated with the challenge deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawChallengeDeposit(uint256 _epoch, Claim calldata _claim) external {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Challenger, \\\"Challenge failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n payable(BURN_ADDRESS).send(burn); // half burnt\\n payable(_claim.challenger).send(depositPlusReward); // User is responsible for accepting ETH.\\n }\\n\\n /// @dev When bridge is shutdown, no claim disputes can be resolved. This allows the claimer to withdraw their deposit.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawClaimerEscapeHatch(uint256 _epoch, Claim memory _claim) external OnlyBridgeShutdown {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.None, \\\"Claim resolved.\\\");\\n\\n if (_claim.claimer != address(0)) {\\n if (_claim.challenger == address(0)) {\\n delete claimHashes[_epoch];\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n } else {\\n address claimer = _claim.claimer;\\n _claim.claimer = address(0);\\n claimHashes[_epoch] = hashClaim(_claim);\\n payable(claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n }\\n\\n /// @dev When bridge is shutdown, no claim disputes can be resolved. This allows the challenger to withdraw their deposit.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawChallengerEscapeHatch(uint256 _epoch, Claim memory _claim) external OnlyBridgeShutdown {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.None, \\\"Claim resolved.\\\");\\n\\n if (_claim.challenger != address(0)) {\\n if (_claim.claimer == address(0)) {\\n delete claimHashes[_epoch];\\n payable(_claim.challenger).send(deposit); // User is responsible for accepting ETH.\\n } else {\\n address challenger = _claim.challenger;\\n _claim.challenger = address(0);\\n claimHashes[_epoch] == hashClaim(_claim);\\n payable(challenger).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Pure / Views * //\\n // ************************************* //\\n\\n /// @dev Hashes the claim.\\n /// @param _claim The claim to hash.\\n /// @return hashedClaim The hash of the claim.\\n function hashClaim(Claim memory _claim) public pure returns (bytes32 hashedClaim) {\\n return\\n hashedClaim = keccak256(\\n abi.encodePacked(\\n _claim.stateRoot,\\n _claim.claimer,\\n _claim.timestampClaimed,\\n _claim.timestampVerification,\\n _claim.blocknumberVerification,\\n _claim.honest,\\n _claim.challenger\\n )\\n );\\n }\\n\\n /// @dev Gets the status of the censorship test for claim.\\n /// @param _claim The claim to test.\\n /// @return status True if the claim passed the censorship test.\\n function censorshipTestStatus(Claim memory _claim) public view returns (CensorshipTestStatus status) {\\n unchecked {\\n if (uint256(_claim.timestampVerification) == 0) {\\n status = CensorshipTestStatus.NotStarted;\\n } else if (block.timestamp - uint256(_claim.timestampVerification) < minChallengePeriod) {\\n status = CensorshipTestStatus.InProgress;\\n } else {\\n uint256 expectedBlocks = uint256(_claim.blocknumberVerification) +\\n (block.timestamp - uint256(_claim.timestampVerification)) /\\n SLOT_TIME;\\n uint256 actualBlocks = block.number;\\n if (expectedBlocks - actualBlocks <= maxMissingBlocks) {\\n status = CensorshipTestStatus.Passed;\\n } else {\\n status = CensorshipTestStatus.Failed;\\n }\\n }\\n }\\n }\\n\\n /// @dev Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\\n /// @return epoch The hash of the claim.\\n function epochNow() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\\n /// @return epoch The hash of the claim.\\n function epochAt(uint256 timestamp) external view returns (uint256 epoch) {\\n epoch = timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the msg relayed status.\\n /// @param _msgId The msgId to check.\\n /// @return isRelayed True if the msg was relayed.\\n function isMsgRelayed(uint256 _msgId) external view returns (bool isRelayed) {\\n uint256 relayIndex = _msgId >> 8;\\n uint256 offset;\\n\\n unchecked {\\n offset = _msgId % 256;\\n }\\n\\n bytes32 replay = relayed[relayIndex];\\n\\n isRelayed = (replay >> offset) & bytes32(uint256(1)) == bytes32(uint256(1));\\n }\\n}\\n\",\"keccak256\":\"0xc75046b084bbbc164ce0ff84a7a6091d6cd31aef9329f31f3137b1206f214f69\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a\\n// implementation: https://etherscan.io/address/0x1066cecc8880948fe55e427e94f1ff221d626591#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.18;\\n\\ninterface IBridge {\\n function activeOutbox() external view returns (address);\\n\\n function sequencerInbox() external view returns (address);\\n\\n function allowedDelayedInboxList(uint256) external returns (address);\\n}\\n\",\"keccak256\":\"0x4ae55bd0aaa3633ba027e3b9dccfe64dbca2c44219e53831b7308a4aebb6c83d\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840#code\\n// implementation: https://etherscan.io/address/0x0ea7372338a589e7f0b00e463a53aa464ef04e17#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.18;\\n\\ninterface IOutbox {\\n /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n /// When the return value is zero, that means this is a system message\\n /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n function l2ToL1Sender() external view returns (address);\\n}\\n\",\"keccak256\":\"0x951eb1a9a67bbd56579cafa1424660d02565aa908a5b4397face5ac6559ce91c\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/ISequencerInbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/ISequencerInbox.sol\\n// proxy: https://etherscan.io/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6#code\\n// implementation: https://etherscan.io/address/0xD03bFe2CE83632F4E618a97299cc91B1335BB2d9#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface ISequencerInbox {\\n struct MaxTimeVariation {\\n uint256 delayBlocks;\\n uint256 futureBlocks;\\n uint256 delaySeconds;\\n uint256 futureSeconds;\\n }\\n\\n function maxTimeVariation() external view returns (uint256, uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0xe8db6941df1f303771990646eae52e8d5bfe46326457dc9d19588dd443281b39\",\"license\":\"BUSL-1.1\"},\"src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../../arbitrumToEth/VeaOutboxArbToEth.sol\\\";\\n\\n/// @dev Vea Outbox From arbitrumSepolia to Sepolia.\\n/// Note: This contract is deployed on Sepolia.\\n/// Note: This contract is permissioned for developer testing (devnet).\\ncontract VeaOutboxArbToEthDevnet is VeaOutboxArbToEth {\\n address public devnetOperator; // permissioned devnet operator\\n\\n /// @dev Requires that the sender is the devnet operator.\\n modifier onlyByDevnetOperator() {\\n require(devnetOperator == msg.sender);\\n _;\\n }\\n\\n /// @dev Changes the devnet operator.\\n /// @param _devnetOperator The new testnet operator.\\n function changeDevnetOperator(address _devnetOperator) external onlyByDevnetOperator {\\n require(msg.sender == devnetOperator, \\\"Invalid Testnet Operator\\\");\\n devnetOperator = _devnetOperator;\\n }\\n\\n /// @dev Submit a claim about the _stateRoot at _epoch and submit a deposit.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateRoot The state root to claim.\\n function claim(uint256 _epoch, bytes32 _stateRoot) public payable override onlyByDevnetOperator {\\n require(msg.value >= deposit, \\\"Insufficient claim deposit.\\\");\\n require(_stateRoot != bytes32(0), \\\"Invalid claim.\\\");\\n require(claimHashes[_epoch] == bytes32(0), \\\"Claim already made.\\\");\\n\\n claimHashes[_epoch] = hashClaim(\\n Claim({\\n stateRoot: _stateRoot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n })\\n );\\n\\n emit Claimed(msg.sender, _epoch, _stateRoot);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Start verification for claim for 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function startVerification(uint256 _epoch, Claim memory _claim) public override onlyByDevnetOperator {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n\\n _claim.timestampVerification = uint32(block.timestamp);\\n _claim.blocknumberVerification = uint32(block.number);\\n\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit VerificationStarted(_epoch);\\n }\\n\\n /// @dev Sends the deposit back to the Bridger if their claim is not successfully challenged. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n function withdrawClaimDeposit(uint256 _epoch, Claim memory _claim) public override {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Claimer, \\\"Claim failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n if (_claim.challenger != address(0)) {\\n payable(BURN_ADDRESS).send(burn);\\n payable(_claim.claimer).send(depositPlusReward); // User is responsible for accepting ETH.\\n } else {\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Resolves the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch of the optimistic claim.\\n /// @param _claim The claim associated with the epoch.\\n function verifySnapshot(uint256 _epoch, Claim memory _claim) public override OnlyBridgeRunning {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.challenger == address(0), \\\"Claim is challenged.\\\");\\n\\n if (_epoch > latestVerifiedEpoch) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _claim.stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n _claim.honest = Party.Claimer;\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n\\n /// @dev Testnet operator utility function to claim, validate and withdraw.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateroot The state root to claim.\\n function devnetAdvanceState(uint256 _epoch, bytes32 _stateroot) external payable {\\n claim(_epoch, _stateroot);\\n Claim memory claim = Claim({\\n stateRoot: _stateroot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n });\\n claim.timestampClaimed = uint32(block.timestamp);\\n startVerification(_epoch, claim);\\n claim.timestampVerification = uint32(block.timestamp);\\n claim.blocknumberVerification = uint32(block.number);\\n verifySnapshot(_epoch, claim);\\n claim.honest = Party.Claimer;\\n withdrawClaimDeposit(_epoch, claim);\\n }\\n\\n /// @dev Constructor.\\n /// @param _deposit The deposit amount to submit a claim in wei.\\n /// @param _epochPeriod The duration of each epoch.\\n /// @param _minChallengePeriod The minimum time window to challenge a claim.\\n /// @param _timeoutEpochs The epochs before the bridge is considered shutdown.\\n /// @param _veaInboxArbToEthDevnet The address of the inbox contract on Arbitrum.\\n /// @param _maxMissingBlocks The maximum number of blocks that can be missing in a challenge period.\\n constructor(\\n uint256 _deposit,\\n uint256 _epochPeriod,\\n uint256 _minChallengePeriod,\\n uint256 _timeoutEpochs,\\n address _veaInboxArbToEthDevnet,\\n address _bridge,\\n uint256 _maxMissingBlocks\\n )\\n VeaOutboxArbToEth(\\n _deposit,\\n _epochPeriod,\\n _minChallengePeriod,\\n _timeoutEpochs,\\n _veaInboxArbToEthDevnet,\\n _bridge,\\n _maxMissingBlocks\\n )\\n {\\n devnetOperator = msg.sender;\\n }\\n}\\n\",\"keccak256\":\"0xe20fb148f8d18f49e64dbd5df03cecf95d25a74b39d7051848ca24368152e940\",\"license\":\"MIT\"},\"src/interfaces/outboxes/IVeaOutboxOnL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Outbox on L1 chains like Ethereum, Gnosis, Polygon POS where storage is expensive.\\ninterface IVeaOutboxOnL1 {\\n /// @dev Verifies and relays the message.\\n /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication.\\n /// @param _proof The merkle proof to prove the message.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address to send the message to.\\n /// @param _message The message to relay.\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external;\\n\\n /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge.\\n /// Note: Access restricted to canonical bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0x52f714405dbb6f5953f7e59bf7139742837c2f055fc090971421d931a5289b51\",\"license\":\"MIT\"},\"src/interfaces/types/VeaClaim.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.18;\\n\\nenum Party {\\n None,\\n Claimer,\\n Challenger\\n}\\n\\nstruct Claim {\\n bytes32 stateRoot;\\n address claimer;\\n uint32 timestampClaimed;\\n uint32 timestampVerification;\\n uint32 blocknumberVerification;\\n Party honest;\\n address challenger;\\n}\\n\",\"keccak256\":\"0x1b25222d0ebdb4beed6cd844ea1f262c89e4c002e7520972e6b79083eeed6418\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101a06040523480156200001257600080fd5b5060405162002c7638038062002c768339810160408190526200003591620002ee565b60c08790526101208690526101408590526101608490526001600160a01b0380841660a05282166080526101808190528686868686868662000076620000ee565b620000836002886200036c565b60e0819052620000958860026200038f565b620000a19190620003af565b6101005261012051600190620000b890426200036c565b620000c49190620003af565b6001555050600780546001600160a01b0319163317905550620004219a5050505050505050505050565b60006080516001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001579190620003c5565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801562000195573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001bb9190620003ea565b5092505050600454811115620002065760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b600454811015620002ce5760065415620002805760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b606482015260840160405180910390fd5b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b80516001600160a01b0381168114620002e957600080fd5b919050565b600080600080600080600060e0888a0312156200030a57600080fd5b875196506020880151955060408801519450606088015193506200033160808901620002d1565b92506200034160a08901620002d1565b915060c0880151905092959891949750929550565b634e487b7160e01b600052601160045260246000fd5b6000826200038a57634e487b7160e01b600052601260045260246000fd5b500490565b8082028115828204841417620003a957620003a962000356565b92915050565b81810381811115620003a957620003a962000356565b600060208284031215620003d857600080fd5b620003e382620002d1565b9392505050565b600080600080608085870312156200040157600080fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e0516101005161012051610140516101605161018051612704620005726000396000818161057d0152611e390152600081816105b10152818161098801528181611806015281816119910152611b9d0152600081816106390152611dcd0152600081816105e5015281816109ac01528181610cb5015281816114f50152818161182a015281816119b50152611bc10152600081816104c00152818161128601526113bf0152600081816103ab01528181611233015261137701526000818161066d01528181610cf801528181610e6601528181610e930152818161140f01528181611afb01528181611b6201528181611d0801528181611d7601528181611f2d015281816120bb01526120e80152600081816104740152610a960152600081816106ee0152818161086e01528181610a2701528181610ac0015261157601526127046000f3fe60806040526004361061020f5760003560e01c8063836e344b11610118578063b633b944116100a0578063df19e6ff1161006f578063df19e6ff146106af578063e78cea92146106dc578063e813a75514610710578063eedcf2a914610726578063fccc28131461073957600080fd5b8063b633b94414610607578063c2114a1614610627578063d0e30db01461065b578063da2b7bc41461068f57600080fd5b8063930f28af116100e7578063930f28af146105355780639588eca214610555578063aa22a1c61461056b578063b044397e1461059f578063b5b7a184146105d357600080fd5b8063836e344b146104ae5780638830dfbd146104e25780638a619a71146104f55780638ad3a8f71461051557600080fd5b80633ce43cfd1161019b57806349b4299e1161016a57806349b4299e146103ed5780634a439cfe1461040d578063541adcca1461042d5780635f43a47f1461044d57806369cd250d1461046257600080fd5b80633ce43cfd1461032c57806343b066d51461034c57806344df8e70146103995780634788cb38146103cd57600080fd5b8063222ae786116101e2578063222ae786146102935780632639c060146102b657806327ee6bdd146102e357806331d14457146102f957806331ddf7431461030c57600080fd5b806301139b6814610214578063051d1970146102295780630c63fa841461025e5780630f0adca514610273575b600080fd5b61022761022236600461222f565b61074e565b005b34801561023557600080fd5b50600554600654610244919082565b604080519283526020830191909152015b60405180910390f35b34801561026a57600080fd5b5061022761075d565b34801561027f57600080fd5b5061022761028e36600461225d565b610986565b34801561029f57600080fd5b506102a8610cae565b604051908152602001610255565b3480156102c257600080fd5b506102a86102d1366004612294565b60026020526000908152604090205481565b3480156102ef57600080fd5b506102a860015481565b6102276103073660046122ad565b610cdf565b34801561031857600080fd5b50610227610327366004612330565b610edc565b34801561033857600080fd5b506102276103473660046123f2565b61117c565b34801561035857600080fd5b50610389610367366004612294565b600881901c600090815260036020526040902054600160ff9092161c81161490565b6040519015158152602001610255565b3480156103a557600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d957600080fd5b506102276103e836600461222f565b6112c3565b3480156103f957600080fd5b5061022761040836600461222f565b611447565b34801561041957600080fd5b506102a8610428366004612294565b6114ee565b34801561043957600080fd5b506102a861044836600461242b565b611520565b34801561045957600080fd5b50610227611572565b34801561046e57600080fd5b506104967f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610255565b3480156104ba57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b6102276104f036600461244e565b611766565b34801561050157600080fd5b50610227610510366004612491565b611771565b34801561052157600080fd5b50600754610496906001600160a01b031681565b34801561054157600080fd5b5061022761055036600461222f565b611804565b34801561056157600080fd5b506102a860005481565b34801561057757600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ab57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561061357600080fd5b5061022761062236600461222f565b61198f565b34801561063357600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561066757600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561069b57600080fd5b506102276106aa36600461222f565b611b9b565b3480156106bb57600080fd5b506106cf6106ca36600461242b565b611daf565b60405161025591906124c4565b3480156106e857600080fd5b506104967f000000000000000000000000000000000000000000000000000000000000000081565b34801561071c57600080fd5b506102a860045481565b6102276107343660046122ad565b611e76565b34801561074557600080fd5b50610496600081565b610759828233611ef6565b5050565b6006546000036107c95760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b6004546006546107d991906124f4565b42116108425760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b60648201526084016107c0565b6005805460009182905560068290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa1580156108b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dd9190612507565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093e9190612524565b50925050508181036107595760048290556040518281527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a15050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816109d9576109d961255a565b04031115610a1c5760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b60448201526064016107c0565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a945760405162461bcd60e51b815260206004820181905260248201527f4e6f742066726f6d206e617469766520617262697472756d206272696467652e60448201526064016107c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612507565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba19190612507565b6001600160a01b031614610bf05760405162461bcd60e51b81526020600482015260166024820152753b32b0a4b73137bc20b9312a37a2ba341037b7363c9760511b60448201526064016107c0565b60015483118015610c0057508115155b15610c4357600183905560008290556040518381527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b610c4c81611520565b60008481526002602052604090205403610ca9578051829003610c7557600160a0820152610c90565b60c08101516001600160a01b031615610c9057600260a08201525b610c9981611520565b6000848152600260205260409020555b505050565b6000610cda7f000000000000000000000000000000000000000000000000000000000000000042612570565b905090565b6007546001600160a01b03163314610cf657600080fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015610d665760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420636c61696d206465706f7369742e000000000060448201526064016107c0565b80610d835760405162461bcd60e51b81526004016107c090612592565b60008281526002602052604090205415610dd55760405162461bcd60e51b815260206004820152601360248201527221b630b4b69030b63932b0b23c9036b0b2329760691b60448201526064016107c0565b6040805160e0810182528281523360208201524263ffffffff16918101919091526000606082018190526080820181905260a0820181905260c0820152610e1b90611520565b6000838152600260209081526040918290209290925551828152839133917fd95107f4584744c6c893a04c43058aadd1ce8aac8ca5d64140eaf277de6c1d57910160405180910390a37f0000000000000000000000000000000000000000000000000000000000000000341115610759576000610eb87f0000000000000000000000000000000000000000000000000000000000000000346125ba565b604051909150339082156108fc029083906000818181858888f15050505050505050565b60408510610f1e5760405162461bcd60e51b815260206004820152600f60248201526e283937b7b3103a37b7903637b7339760891b60448201526064016107c0565b600084848484604051602001610f3794939291906125cd565b604051602081830303815290604052805190602001209050806000526020600020905060005b86811015610fb7576000888883818110610f7957610f7961260f565b90506020020135905082811115610f9e57826000528060205260406000209250610fae565b8060005282602052604060002092505b50600101610f5d565b508060005414610ffa5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016107c0565b600885901c66ffffffffffffff1660008181526003602052604090205460ff87169080821c6001161561106f5760405162461bcd60e51b815260206004820152601760248201527f4d65737361676520616c72656164792072656c6179656400000000000000000060448201526064016107c0565b6000838152600360205260408082206001851b84179055516001600160a01b0389169061109f9089908990612625565b6000604051808303816000865af19150503d80600081146110dc576040519150601f19603f3d011682016040523d82523d6000602084013e6110e1565b606091505b50509050806111325760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2063616c6c20636f6e747261637400000000000000000060448201526064016107c0565b60405167ffffffffffffffff8a1681527f54303fab361bc52c2f1f56ace7351189582264f74ce47a6e7c3f478d64c429439060200160405180910390a15050505050505050505050565b61118e6104483683900383018361242b565b600083815260026020526040902054146111ba5760405162461bcd60e51b81526004016107c090612592565b60026111cc60c0830160a08401612635565b60028111156111dd576111dd6124ae565b1461121e5760405162461bcd60e51b815260206004820152601160248201527021b430b63632b733b2903330b4b632b21760791b60448201526064016107c0565b600082815260026020526040808220829055517f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f15061127893505060e0840191505060c08301612491565b6001600160a01b03166108fc7f00000000000000000000000000000000000000000000000000000000000000009081150290604051600060405180830381858888f150505050505050565b6112cc81611520565b600083815260026020526040902054146112f85760405162461bcd60e51b81526004016107c090612592565b60018160a001516002811115611310576113106124ae565b1461134d5760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b60448201526064016107c0565b60008281526002602052604081205560c08101516001600160a01b0316156113f9576040516000907f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f150505060208301516040516001600160a01b0390911692507f000000000000000000000000000000000000000000000000000000000000000080156108fc029250906000818181858888f150505050505050565b60208101516040516001600160a01b03909116907f000000000000000000000000000000000000000000000000000000000000000080156108fc02916000818181858888f150505050505050565b6007546001600160a01b0316331461145e57600080fd5b61146781611520565b600083815260026020526040902054146114935760405162461bcd60e51b81526004016107c090612592565b63ffffffff4281166060830152431660808201526114b081611520565b60008381526002602052604080822092909255905183917f37b700b61b9b4710dddb0c3316b2be7ef6088ed4b1d7bfe0fb98be8f9a163e1691a25050565b600061151a7f000000000000000000000000000000000000000000000000000000000000000083612570565b92915050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098611555989097969101612650565b604051602081830303815290604052805190602001209050919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190612507565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116579190612524565b50925050506004548111156116a15760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b60045481101561176357600654156117155760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b60648201526084016107c0565b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b610ca9838383611ef6565b6007546001600160a01b0316331461178857600080fd5b6007546001600160a01b031633146117e25760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420546573746e6574204f70657261746f72000000000000000060448201526064016107c0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816118575761185761255a565b0403111561189a5760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b60448201526064016107c0565b6118a381611520565b600083815260026020526040902054146118cf5760405162461bcd60e51b81526004016107c090612592565b60c08101516001600160a01b0316156119215760405162461bcd60e51b815260206004820152601460248201527321b630b4b69034b99031b430b63632b733b2b21760611b60448201526064016107c0565b60015482111561196957600182905580516000556040518281527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b600160a082015261197981611520565b6000928352600260205260409092209190915550565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816119e2576119e261255a565b040311611a235760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b60448201526064016107c0565b611a2c81611520565b60008381526002602052604090205414611a585760405162461bcd60e51b81526004016107c090612592565b60008160a001516002811115611a7057611a706124ae565b14611aaf5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b60448201526064016107c0565b60c08101516001600160a01b0316156107595760208101516001600160a01b0316611b335760008281526002602052604080822082905560c083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b60c0810180516000909152611b4782611520565b50600083815260026020526040516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f00000000000000000000000000000000000000000000000000000000000000004281611bee57611bee61255a565b040311611c2f5760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b60448201526064016107c0565b611c3881611520565b60008381526002602052604090205414611c645760405162461bcd60e51b81526004016107c090612592565b60008160a001516002811115611c7c57611c7c6124ae565b14611cbb5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b60448201526064016107c0565b60208101516001600160a01b0316156107595760c08101516001600160a01b0316611d405760008281526002602090815260408083208390559083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b6020810180516000909152611d5482611520565b6000848152600260205260408082209290925590516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b6000816060015163ffffffff16600003611dcb57506002919050565b7f0000000000000000000000000000000000000000000000000000000000000000826060015163ffffffff1642031015611e0757506003919050565b6000600c836060015163ffffffff16420381611e2557611e2561255a565b608085015163ffffffff16919004019050437f000000000000000000000000000000000000000000000000000000000000000081830311611e695760019250611e6e565b600092505b50505b919050565b611e808282610cdf565b6040805160e0810182528281523360208201524263ffffffff16918101919091526000606082018190526080820181905260a0820181905260c0820152611ec78382611447565b63ffffffff428116606083015243166080820152611ee58382611804565b600160a0820152610ca983826112c3565b611eff82611520565b60008481526002602052604090205414611f2b5760405162461bcd60e51b81526004016107c090612592565b7f0000000000000000000000000000000000000000000000000000000000000000341015611f9b5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74206368616c6c656e6765206465706f7369742e0060448201526064016107c0565b60c08201516001600160a01b031615611ff65760405162461bcd60e51b815260206004820152601960248201527f436c61696d20616c7265616479206368616c6c656e6765642e0000000000000060448201526064016107c0565b60008260a00151600281111561200e5761200e6124ae565b1461205b5760405162461bcd60e51b815260206004820152601760248201527f436c61696d20616c72656164792076657269666965642e00000000000000000060448201526064016107c0565b6001600160a01b03811660c083015261207382611520565b6000848152600260205260408082209290925590516001600160a01b0383169185917fcfe09ca25f55d949baba5e280f5750c9ba4b9048fca5532f916067d433afe4d79190a37f0000000000000000000000000000000000000000000000000000000000000000341115610ca957600061210d7f0000000000000000000000000000000000000000000000000000000000000000346125ba565b604051909150339082156108fc029083906000818181858888f1505050505050505050565b6001600160a01b038116811461176357600080fd5b8035611e7181612132565b803563ffffffff81168114611e7157600080fd5b803560038110611e7157600080fd5b600060e0828403121561218757600080fd5b60405160e0810181811067ffffffffffffffff821117156121b857634e487b7160e01b600052604160045260246000fd5b604052823581529050806121ce60208401612147565b60208201526121df60408401612152565b60408201526121f060608401612152565b606082015261220160808401612152565b608082015261221260a08401612166565b60a082015261222360c08401612147565b60c08201525092915050565b600080610100838503121561224357600080fd5b823591506122548460208501612175565b90509250929050565b6000806000610120848603121561227357600080fd5b833592506020840135915061228b8560408601612175565b90509250925092565b6000602082840312156122a657600080fd5b5035919050565b600080604083850312156122c057600080fd5b50508035926020909101359150565b803567ffffffffffffffff81168114611e7157600080fd5b60008083601f8401126122f957600080fd5b50813567ffffffffffffffff81111561231157600080fd5b60208301915083602082850101111561232957600080fd5b9250929050565b6000806000806000806080878903121561234957600080fd5b863567ffffffffffffffff8082111561236157600080fd5b818901915089601f83011261237557600080fd5b81358181111561238457600080fd5b8a60208260051b850101111561239957600080fd5b602083019850809750506123af60208a016122cf565b95506123bd60408a01612147565b945060608901359150808211156123d357600080fd5b506123e089828a016122e7565b979a9699509497509295939492505050565b60008082840361010081121561240757600080fd5b8335925060e0601f198201121561241d57600080fd5b506020830190509250929050565b600060e0828403121561243d57600080fd5b6124478383612175565b9392505050565b6000806000610120848603121561246457600080fd5b833592506124758560208601612175565b915061010084013561248681612132565b809150509250925092565b6000602082840312156124a357600080fd5b813561244781612132565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124d8576124d86124ae565b91905290565b634e487b7160e01b600052601160045260246000fd5b8082018082111561151a5761151a6124de565b60006020828403121561251957600080fd5b815161244781612132565b6000806000806080858703121561253a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601260045260246000fd5b60008261258d57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600e908201526d24b73b30b634b21031b630b4b69760911b604082015260600190565b8181038181111561151a5761151a6124de565b60c085901b6001600160c01b0319168152606084901b6bffffffffffffffffffffffff191660088201528183601c83013760009101601c019081529392505050565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b60006020828403121561264757600080fd5b61244782612166565b87815260006bffffffffffffffffffffffff19808960601b16602084015263ffffffff60e01b808960e01b166034850152808860e01b166038850152808760e01b16603c85015250600385106126a8576126a86124ae565b60f89490941b60408301525060609190911b90911660418201526055019594505050505056fea264697066735822122037ead742b791048bba506490278dcde993ac7e6269dc2e35fffc17e30104970664736f6c63430008120033", - "deployedBytecode": "0x60806040526004361061020f5760003560e01c8063836e344b11610118578063b633b944116100a0578063df19e6ff1161006f578063df19e6ff146106af578063e78cea92146106dc578063e813a75514610710578063eedcf2a914610726578063fccc28131461073957600080fd5b8063b633b94414610607578063c2114a1614610627578063d0e30db01461065b578063da2b7bc41461068f57600080fd5b8063930f28af116100e7578063930f28af146105355780639588eca214610555578063aa22a1c61461056b578063b044397e1461059f578063b5b7a184146105d357600080fd5b8063836e344b146104ae5780638830dfbd146104e25780638a619a71146104f55780638ad3a8f71461051557600080fd5b80633ce43cfd1161019b57806349b4299e1161016a57806349b4299e146103ed5780634a439cfe1461040d578063541adcca1461042d5780635f43a47f1461044d57806369cd250d1461046257600080fd5b80633ce43cfd1461032c57806343b066d51461034c57806344df8e70146103995780634788cb38146103cd57600080fd5b8063222ae786116101e2578063222ae786146102935780632639c060146102b657806327ee6bdd146102e357806331d14457146102f957806331ddf7431461030c57600080fd5b806301139b6814610214578063051d1970146102295780630c63fa841461025e5780630f0adca514610273575b600080fd5b61022761022236600461222f565b61074e565b005b34801561023557600080fd5b50600554600654610244919082565b604080519283526020830191909152015b60405180910390f35b34801561026a57600080fd5b5061022761075d565b34801561027f57600080fd5b5061022761028e36600461225d565b610986565b34801561029f57600080fd5b506102a8610cae565b604051908152602001610255565b3480156102c257600080fd5b506102a86102d1366004612294565b60026020526000908152604090205481565b3480156102ef57600080fd5b506102a860015481565b6102276103073660046122ad565b610cdf565b34801561031857600080fd5b50610227610327366004612330565b610edc565b34801561033857600080fd5b506102276103473660046123f2565b61117c565b34801561035857600080fd5b50610389610367366004612294565b600881901c600090815260036020526040902054600160ff9092161c81161490565b6040519015158152602001610255565b3480156103a557600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156103d957600080fd5b506102276103e836600461222f565b6112c3565b3480156103f957600080fd5b5061022761040836600461222f565b611447565b34801561041957600080fd5b506102a8610428366004612294565b6114ee565b34801561043957600080fd5b506102a861044836600461242b565b611520565b34801561045957600080fd5b50610227611572565b34801561046e57600080fd5b506104967f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610255565b3480156104ba57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b6102276104f036600461244e565b611766565b34801561050157600080fd5b50610227610510366004612491565b611771565b34801561052157600080fd5b50600754610496906001600160a01b031681565b34801561054157600080fd5b5061022761055036600461222f565b611804565b34801561056157600080fd5b506102a860005481565b34801561057757600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ab57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b3480156105df57600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561061357600080fd5b5061022761062236600461222f565b61198f565b34801561063357600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561066757600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b34801561069b57600080fd5b506102276106aa36600461222f565b611b9b565b3480156106bb57600080fd5b506106cf6106ca36600461242b565b611daf565b60405161025591906124c4565b3480156106e857600080fd5b506104967f000000000000000000000000000000000000000000000000000000000000000081565b34801561071c57600080fd5b506102a860045481565b6102276107343660046122ad565b611e76565b34801561074557600080fd5b50610496600081565b610759828233611ef6565b5050565b6006546000036107c95760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b6004546006546107d991906124f4565b42116108425760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b60648201526084016107c0565b6005805460009182905560068290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa1580156108b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dd9190612507565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561091a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093e9190612524565b50925050508181036107595760048290556040518281527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a15050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816109d9576109d961255a565b04031115610a1c5760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b60448201526064016107c0565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a945760405162461bcd60e51b815260206004820181905260248201527f4e6f742066726f6d206e617469766520617262697472756d206272696467652e60448201526064016107c0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612507565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba19190612507565b6001600160a01b031614610bf05760405162461bcd60e51b81526020600482015260166024820152753b32b0a4b73137bc20b9312a37a2ba341037b7363c9760511b60448201526064016107c0565b60015483118015610c0057508115155b15610c4357600183905560008290556040518381527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b610c4c81611520565b60008481526002602052604090205403610ca9578051829003610c7557600160a0820152610c90565b60c08101516001600160a01b031615610c9057600260a08201525b610c9981611520565b6000848152600260205260409020555b505050565b6000610cda7f000000000000000000000000000000000000000000000000000000000000000042612570565b905090565b6007546001600160a01b03163314610cf657600080fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015610d665760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420636c61696d206465706f7369742e000000000060448201526064016107c0565b80610d835760405162461bcd60e51b81526004016107c090612592565b60008281526002602052604090205415610dd55760405162461bcd60e51b815260206004820152601360248201527221b630b4b69030b63932b0b23c9036b0b2329760691b60448201526064016107c0565b6040805160e0810182528281523360208201524263ffffffff16918101919091526000606082018190526080820181905260a0820181905260c0820152610e1b90611520565b6000838152600260209081526040918290209290925551828152839133917fd95107f4584744c6c893a04c43058aadd1ce8aac8ca5d64140eaf277de6c1d57910160405180910390a37f0000000000000000000000000000000000000000000000000000000000000000341115610759576000610eb87f0000000000000000000000000000000000000000000000000000000000000000346125ba565b604051909150339082156108fc029083906000818181858888f15050505050505050565b60408510610f1e5760405162461bcd60e51b815260206004820152600f60248201526e283937b7b3103a37b7903637b7339760891b60448201526064016107c0565b600084848484604051602001610f3794939291906125cd565b604051602081830303815290604052805190602001209050806000526020600020905060005b86811015610fb7576000888883818110610f7957610f7961260f565b90506020020135905082811115610f9e57826000528060205260406000209250610fae565b8060005282602052604060002092505b50600101610f5d565b508060005414610ffa5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b60448201526064016107c0565b600885901c66ffffffffffffff1660008181526003602052604090205460ff87169080821c6001161561106f5760405162461bcd60e51b815260206004820152601760248201527f4d65737361676520616c72656164792072656c6179656400000000000000000060448201526064016107c0565b6000838152600360205260408082206001851b84179055516001600160a01b0389169061109f9089908990612625565b6000604051808303816000865af19150503d80600081146110dc576040519150601f19603f3d011682016040523d82523d6000602084013e6110e1565b606091505b50509050806111325760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2063616c6c20636f6e747261637400000000000000000060448201526064016107c0565b60405167ffffffffffffffff8a1681527f54303fab361bc52c2f1f56ace7351189582264f74ce47a6e7c3f478d64c429439060200160405180910390a15050505050505050505050565b61118e6104483683900383018361242b565b600083815260026020526040902054146111ba5760405162461bcd60e51b81526004016107c090612592565b60026111cc60c0830160a08401612635565b60028111156111dd576111dd6124ae565b1461121e5760405162461bcd60e51b815260206004820152601160248201527021b430b63632b733b2903330b4b632b21760791b60448201526064016107c0565b600082815260026020526040808220829055517f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f15061127893505060e0840191505060c08301612491565b6001600160a01b03166108fc7f00000000000000000000000000000000000000000000000000000000000000009081150290604051600060405180830381858888f150505050505050565b6112cc81611520565b600083815260026020526040902054146112f85760405162461bcd60e51b81526004016107c090612592565b60018160a001516002811115611310576113106124ae565b1461134d5760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b60448201526064016107c0565b60008281526002602052604081205560c08101516001600160a01b0316156113f9576040516000907f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f150505060208301516040516001600160a01b0390911692507f000000000000000000000000000000000000000000000000000000000000000080156108fc029250906000818181858888f150505050505050565b60208101516040516001600160a01b03909116907f000000000000000000000000000000000000000000000000000000000000000080156108fc02916000818181858888f150505050505050565b6007546001600160a01b0316331461145e57600080fd5b61146781611520565b600083815260026020526040902054146114935760405162461bcd60e51b81526004016107c090612592565b63ffffffff4281166060830152431660808201526114b081611520565b60008381526002602052604080822092909255905183917f37b700b61b9b4710dddb0c3316b2be7ef6088ed4b1d7bfe0fb98be8f9a163e1691a25050565b600061151a7f000000000000000000000000000000000000000000000000000000000000000083612570565b92915050565b80516020808301516040808501516060860151608087015160a088015160c08901519451600098611555989097969101612650565b604051602081830303815290604052805190602001209050919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f69190612507565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116579190612524565b50925050506004548111156116a15760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b60045481101561176357600654156117155760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b60648201526084016107c0565b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b610ca9838383611ef6565b6007546001600160a01b0316331461178857600080fd5b6007546001600160a01b031633146117e25760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420546573746e6574204f70657261746f72000000000000000060448201526064016107c0565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816118575761185761255a565b0403111561189a5760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b60448201526064016107c0565b6118a381611520565b600083815260026020526040902054146118cf5760405162461bcd60e51b81526004016107c090612592565b60c08101516001600160a01b0316156119215760405162461bcd60e51b815260206004820152601460248201527321b630b4b69034b99031b430b63632b733b2b21760611b60448201526064016107c0565b60015482111561196957600182905580516000556040518281527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b600160a082015261197981611520565b6000928352600260205260409092209190915550565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816119e2576119e261255a565b040311611a235760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b60448201526064016107c0565b611a2c81611520565b60008381526002602052604090205414611a585760405162461bcd60e51b81526004016107c090612592565b60008160a001516002811115611a7057611a706124ae565b14611aaf5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b60448201526064016107c0565b60c08101516001600160a01b0316156107595760208101516001600160a01b0316611b335760008281526002602052604080822082905560c083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b60c0810180516000909152611b4782611520565b50600083815260026020526040516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f00000000000000000000000000000000000000000000000000000000000000004281611bee57611bee61255a565b040311611c2f5760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b60448201526064016107c0565b611c3881611520565b60008381526002602052604090205414611c645760405162461bcd60e51b81526004016107c090612592565b60008160a001516002811115611c7c57611c7c6124ae565b14611cbb5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b60448201526064016107c0565b60208101516001600160a01b0316156107595760c08101516001600160a01b0316611d405760008281526002602090815260408083208390559083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b6020810180516000909152611d5482611520565b6000848152600260205260408082209290925590516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b6000816060015163ffffffff16600003611dcb57506002919050565b7f0000000000000000000000000000000000000000000000000000000000000000826060015163ffffffff1642031015611e0757506003919050565b6000600c836060015163ffffffff16420381611e2557611e2561255a565b608085015163ffffffff16919004019050437f000000000000000000000000000000000000000000000000000000000000000081830311611e695760019250611e6e565b600092505b50505b919050565b611e808282610cdf565b6040805160e0810182528281523360208201524263ffffffff16918101919091526000606082018190526080820181905260a0820181905260c0820152611ec78382611447565b63ffffffff428116606083015243166080820152611ee58382611804565b600160a0820152610ca983826112c3565b611eff82611520565b60008481526002602052604090205414611f2b5760405162461bcd60e51b81526004016107c090612592565b7f0000000000000000000000000000000000000000000000000000000000000000341015611f9b5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74206368616c6c656e6765206465706f7369742e0060448201526064016107c0565b60c08201516001600160a01b031615611ff65760405162461bcd60e51b815260206004820152601960248201527f436c61696d20616c7265616479206368616c6c656e6765642e0000000000000060448201526064016107c0565b60008260a00151600281111561200e5761200e6124ae565b1461205b5760405162461bcd60e51b815260206004820152601760248201527f436c61696d20616c72656164792076657269666965642e00000000000000000060448201526064016107c0565b6001600160a01b03811660c083015261207382611520565b6000848152600260205260408082209290925590516001600160a01b0383169185917fcfe09ca25f55d949baba5e280f5750c9ba4b9048fca5532f916067d433afe4d79190a37f0000000000000000000000000000000000000000000000000000000000000000341115610ca957600061210d7f0000000000000000000000000000000000000000000000000000000000000000346125ba565b604051909150339082156108fc029083906000818181858888f1505050505050505050565b6001600160a01b038116811461176357600080fd5b8035611e7181612132565b803563ffffffff81168114611e7157600080fd5b803560038110611e7157600080fd5b600060e0828403121561218757600080fd5b60405160e0810181811067ffffffffffffffff821117156121b857634e487b7160e01b600052604160045260246000fd5b604052823581529050806121ce60208401612147565b60208201526121df60408401612152565b60408201526121f060608401612152565b606082015261220160808401612152565b608082015261221260a08401612166565b60a082015261222360c08401612147565b60c08201525092915050565b600080610100838503121561224357600080fd5b823591506122548460208501612175565b90509250929050565b6000806000610120848603121561227357600080fd5b833592506020840135915061228b8560408601612175565b90509250925092565b6000602082840312156122a657600080fd5b5035919050565b600080604083850312156122c057600080fd5b50508035926020909101359150565b803567ffffffffffffffff81168114611e7157600080fd5b60008083601f8401126122f957600080fd5b50813567ffffffffffffffff81111561231157600080fd5b60208301915083602082850101111561232957600080fd5b9250929050565b6000806000806000806080878903121561234957600080fd5b863567ffffffffffffffff8082111561236157600080fd5b818901915089601f83011261237557600080fd5b81358181111561238457600080fd5b8a60208260051b850101111561239957600080fd5b602083019850809750506123af60208a016122cf565b95506123bd60408a01612147565b945060608901359150808211156123d357600080fd5b506123e089828a016122e7565b979a9699509497509295939492505050565b60008082840361010081121561240757600080fd5b8335925060e0601f198201121561241d57600080fd5b506020830190509250929050565b600060e0828403121561243d57600080fd5b6124478383612175565b9392505050565b6000806000610120848603121561246457600080fd5b833592506124758560208601612175565b915061010084013561248681612132565b809150509250925092565b6000602082840312156124a357600080fd5b813561244781612132565b634e487b7160e01b600052602160045260246000fd5b60208101600483106124d8576124d86124ae565b91905290565b634e487b7160e01b600052601160045260246000fd5b8082018082111561151a5761151a6124de565b60006020828403121561251957600080fd5b815161244781612132565b6000806000806080858703121561253a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601260045260246000fd5b60008261258d57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252600e908201526d24b73b30b634b21031b630b4b69760911b604082015260600190565b8181038181111561151a5761151a6124de565b60c085901b6001600160c01b0319168152606084901b6bffffffffffffffffffffffff191660088201528183601c83013760009101601c019081529392505050565b634e487b7160e01b600052603260045260246000fd5b8183823760009101908152919050565b60006020828403121561264757600080fd5b61244782612166565b87815260006bffffffffffffffffffffffff19808960601b16602084015263ffffffff60e01b808960e01b166034850152808860e01b166038850152808760e01b16603c85015250600385106126a8576126a86124ae565b60f89490941b60408301525060609190911b90911660418201526055019594505050505056fea264697066735822122037ead742b791048bba506490278dcde993ac7e6269dc2e35fffc17e30104970664736f6c63430008120033", + "numDeployments": 3, + "solcInputHash": "0d66bd5cfdf493ed8e081e9f7e1bf4fa", + "metadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_deposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochPeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_minChallengePeriod\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_timeoutEpochs\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_veaInboxArbToEthDevnet\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_bridge\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxMissingBlocks\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_challenger\",\"type\":\"address\"}],\"name\":\"Challenged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"}],\"name\":\"Claimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"_msgId\",\"type\":\"uint64\"}],\"name\":\"MessageRelayed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"VerificationStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"}],\"name\":\"Verified\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_requestedSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"sequencerDelayLimitDecreaseRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSequencerDelayLimit\",\"type\":\"uint256\"}],\"name\":\"sequencerDelayLimitUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BURN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bridge\",\"outputs\":[{\"internalType\":\"contract IBridge\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"censorshipTestStatus\",\"outputs\":[{\"internalType\":\"enum VeaOutboxArbToEth.CensorshipTestStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"challenge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_withdrawalAddress\",\"type\":\"address\"}],\"name\":\"challenge\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_devnetOperator\",\"type\":\"address\"}],\"name\":\"changeDevnetOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"}],\"name\":\"claim\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"claimHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositPlusReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateroot\",\"type\":\"bytes32\"}],\"name\":\"devnetAdvanceState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"devnetOperator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"epochAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochNow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"epochPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"executeSequencerDelayLimitDecreaseRequest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"hashClaim\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedClaim\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_msgId\",\"type\":\"uint256\"}],\"name\":\"isMsgRelayed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isRelayed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestVerifiedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxMissingBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minChallengePeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_stateRoot\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"resolveDisputedClaim\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint64\",\"name\":\"_msgId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencerDelayLimitDecreaseRequest\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"requestedsequencerDelayLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"startVerification\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stateRoot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timeoutEpochs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateSequencerDelayLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"veaInboxArbToEth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"verifySnapshot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawChallengeDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawChallengerEscapeHatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawClaimDeposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_epoch\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"claimer\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"timestampClaimed\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"timestampVerification\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blocknumberVerification\",\"type\":\"uint32\"},{\"internalType\":\"enum Party\",\"name\":\"honest\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"}],\"internalType\":\"struct Claim\",\"name\":\"_claim\",\"type\":\"tuple\"}],\"name\":\"withdrawClaimerEscapeHatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Vea Outbox From arbitrumSepolia to Sepolia. Note: This contract is deployed on Sepolia. Note: This contract is permissioned for developer testing (devnet).\",\"events\":{\"Challenged(uint256,address)\":{\"details\":\"This event indicates that `sendSnapshot(epoch)` should be called in the inbox.\",\"params\":{\"_challenger\":\"The address of the challenger.\",\"_epoch\":\"The epoch associated with the challenged claim.\"}},\"Claimed(address,uint256,bytes32)\":{\"details\":\"Watchers check this event to challenge fraud.\",\"params\":{\"_claimer\":\"The address of the claimer.\",\"_epoch\":\"The epoch associated with the claim.\",\"_stateRoot\":\"The state root of the claim.\"}},\"MessageRelayed(uint64)\":{\"details\":\"This event indicates that a message has been relayed.\",\"params\":{\"_msgId\":\"The msgId of the message that was relayed.\"}},\"VerificationStarted(uint256)\":{\"details\":\"This event indicates that the censorship test started and all challengers are ready even in the worst case scenario of a malicious sequencer.\",\"params\":{\"_epoch\":\"The epoch that started verification.\"}},\"Verified(uint256)\":{\"details\":\"This events indicates that verification has succeeded. The messages are ready to be relayed.\",\"params\":{\"_epoch\":\"The epoch that was verified.\"}},\"sequencerDelayLimitDecreaseRequested(uint256)\":{\"details\":\"This event indicates that a request to decrease the sequencer limit has been made.\",\"params\":{\"_requestedSequencerDelayLimit\":\"The new sequencer delay limit requested.\"}},\"sequencerDelayLimitUpdated(uint256)\":{\"details\":\"This event indicates the sequencer limit updated.\",\"params\":{\"_newSequencerDelayLimit\":\"The new sequencer delay limit.\"}}},\"kind\":\"dev\",\"methods\":{\"censorshipTestStatus((bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Gets the status of the censorship test for claim.\",\"params\":{\"_claim\":\"The claim to test.\"},\"returns\":{\"status\":\"True if the claim passed the censorship test.\"}},\"challenge(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\"}},\"challenge(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address),address)\":{\"details\":\"Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.Allows proxy contracts to batch challenges.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\",\"_withdrawalAddress\":\"The address to withdraw the deposit + reward to.\"}},\"changeDevnetOperator(address)\":{\"details\":\"Changes the devnet operator.\",\"params\":{\"_devnetOperator\":\"The new testnet operator.\"}},\"claim(uint256,bytes32)\":{\"details\":\"Submit a claim about the _stateRoot at _epoch and submit a deposit.\",\"params\":{\"_epoch\":\"The epoch for which the claim is made.\",\"_stateRoot\":\"The state root to claim.\"}},\"constructor\":{\"details\":\"Constructor.\",\"params\":{\"_deposit\":\"The deposit amount to submit a claim in wei.\",\"_epochPeriod\":\"The duration of each epoch.\",\"_maxMissingBlocks\":\"The maximum number of blocks that can be missing in a challenge period.\",\"_minChallengePeriod\":\"The minimum time window to challenge a claim.\",\"_timeoutEpochs\":\"The epochs before the bridge is considered shutdown.\",\"_veaInboxArbToEthDevnet\":\"The address of the inbox contract on Arbitrum.\"}},\"devnetAdvanceState(uint256,bytes32)\":{\"details\":\"Testnet operator utility function to claim, validate and withdraw.\",\"params\":{\"_epoch\":\"The epoch for which the claim is made.\",\"_stateroot\":\"The state root to claim.\"}},\"epochAt(uint256)\":{\"details\":\"Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\",\"returns\":{\"epoch\":\"The hash of the claim.\"}},\"epochNow()\":{\"details\":\"Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\",\"returns\":{\"epoch\":\"The hash of the claim.\"}},\"executeSequencerDelayLimitDecreaseRequest()\":{\"details\":\"execute sequencerDelayLimitDecreaseRequest\"},\"hashClaim((bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Hashes the claim.\",\"params\":{\"_claim\":\"The claim to hash.\"},\"returns\":{\"hashedClaim\":\"The hash of the claim.\"}},\"isMsgRelayed(uint256)\":{\"details\":\"Get the msg relayed status.\",\"params\":{\"_msgId\":\"The msgId to check.\"},\"returns\":{\"isRelayed\":\"True if the msg was relayed.\"}},\"resolveDisputedClaim(uint256,bytes32,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Resolves any challenge of the optimistic claim for '_epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch to verify.\",\"_stateRoot\":\"The true state root for the epoch.\"}},\"sendMessage(bytes32[],uint64,address,bytes)\":{\"details\":\"Verifies and relays the message. UNTRUSTED.\",\"params\":{\"_message\":\"The message encoded in the vea inbox as abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\",\"_msgId\":\"The zero based index of the message in the inbox.\",\"_proof\":\"The merkle proof to prove the message inclusion in the inbox state root.\",\"_to\":\"The address of the contract on Ethereum to call.\"}},\"startVerification(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Start verification for claim for 'epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the claim to challenge.\"}},\"updateSequencerDelayLimit()\":{\"details\":\"Request to decrease the sequencerDelayLimit.\"},\"verifySnapshot(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Resolves the optimistic claim for '_epoch'.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch of the optimistic claim.\"}},\"withdrawChallengeDeposit(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the deposit back to the Challenger if successful. Includes a portion of the Bridger's deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the challenge deposit to withraw.\"}},\"withdrawChallengerEscapeHatch(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"When bridge is shutdown, no claim disputes can be resolved. This allows the challenger to withdraw their deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}},\"withdrawClaimDeposit(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"Sends the deposit back to the Bridger if their claim is not successfully challenged. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}},\"withdrawClaimerEscapeHatch(uint256,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"details\":\"When bridge is shutdown, no claim disputes can be resolved. This allows the claimer to withdraw their deposit.\",\"params\":{\"_claim\":\"The claim associated with the epoch.\",\"_epoch\":\"The epoch associated with the claim deposit to withraw.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"resolveDisputedClaim(uint256,bytes32,(bytes32,address,uint32,uint32,uint32,uint8,address))\":{\"notice\":\"Note: Access restricted to arbitrum bridge.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol\":\"VeaOutboxArbToEthDevnet\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/arbitrumToEth/VeaOutboxArbToEth.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../canonical/arbitrum/ISequencerInbox.sol\\\";\\nimport \\\"../canonical/arbitrum/IBridge.sol\\\";\\nimport \\\"../canonical/arbitrum/IOutbox.sol\\\";\\nimport \\\"../interfaces/outboxes/IVeaOutboxOnL1.sol\\\";\\n\\n/// @dev Vea Outbox From Arbitrum to Ethereum.\\n/// Note: This contract is deployed on Ethereum.\\ncontract VeaOutboxArbToEth is IVeaOutboxOnL1 {\\n // ************************************* //\\n // * Storage * //\\n // ************************************* //\\n\\n IBridge public immutable bridge; // The address of the Arbitrum bridge contract.\\n address public immutable veaInboxArbToEth; // The address of the vea inbox on arbitrum.\\n\\n uint256 public immutable deposit; // The deposit in wei required to submit a claim or challenge\\n uint256 public immutable burn; // The amount of wei to burn. deposit / 2\\n uint256 public immutable depositPlusReward; // 2 * deposit - burn\\n\\n address public constant BURN_ADDRESS = address(0); // Address to send burned eth\\n uint256 internal constant SLOT_TIME = 12; // Ethereum 12 second slot time\\n\\n uint256 public immutable epochPeriod; // Epochs mark the period between potential snapshots.\\n uint256 public immutable minChallengePeriod; // Minimum time window to challenge a claim, even with a malicious sequencer.\\n\\n uint256 public immutable timeoutEpochs; // The number of epochs without forward progress before the bridge is considered shutdown.\\n uint256 public immutable maxMissingBlocks; // The maximum number of blocks that can be missing in a challenge period.\\n\\n bytes32 public stateRoot; // merkle root of the outbox state\\n uint256 public latestVerifiedEpoch; // The latest epoch that has been verified.\\n\\n mapping(uint256 epoch => bytes32) public claimHashes; // epoch => claim\\n mapping(uint256 messageId => bytes32) internal relayed; // msgId/256 => packed replay bitmap, preferred over a simple boolean mapping to save 15k gas per message\\n\\n uint256 public sequencerDelayLimit; // This is MaxTimeVariation.delaySeconds from the arbitrum sequencer inbox, it is the maximum seconds the sequencer can backdate L2 txns relative to the L1 clock.\\n SequencerDelayLimitDecreaseRequest public sequencerDelayLimitDecreaseRequest; // Decreasing the sequencerDelayLimit requires a delay to avoid griefing by sequencer, so we keep track of the request here.\\n\\n struct SequencerDelayLimitDecreaseRequest {\\n uint256 requestedsequencerDelayLimit;\\n uint256 timestamp;\\n }\\n\\n enum CensorshipTestStatus {\\n Failed,\\n Passed,\\n NotStarted,\\n InProgress\\n }\\n\\n // ************************************* //\\n // * Events * //\\n // ************************************* //\\n\\n /// @dev Watchers check this event to challenge fraud.\\n /// @param _claimer The address of the claimer.\\n /// @param _epoch The epoch associated with the claim.\\n /// @param _stateRoot The state root of the claim.\\n event Claimed(address indexed _claimer, uint256 indexed _epoch, bytes32 _stateRoot);\\n\\n /// @dev This event indicates that `sendSnapshot(epoch)` should be called in the inbox.\\n /// @param _epoch The epoch associated with the challenged claim.\\n /// @param _challenger The address of the challenger.\\n event Challenged(uint256 indexed _epoch, address indexed _challenger);\\n\\n /// @dev This event indicates that a message has been relayed.\\n /// @param _msgId The msgId of the message that was relayed.\\n event MessageRelayed(uint64 _msgId);\\n\\n /// @dev This event indicates that the censorship test started and all challengers are ready even in the worst case scenario of a malicious sequencer.\\n /// @param _epoch The epoch that started verification.\\n event VerificationStarted(uint256 indexed _epoch);\\n\\n /// @dev This events indicates that verification has succeeded. The messages are ready to be relayed.\\n /// @param _epoch The epoch that was verified.\\n event Verified(uint256 _epoch);\\n\\n /// @dev This event indicates the sequencer limit updated.\\n /// @param _newSequencerDelayLimit The new sequencer delay limit.\\n event sequencerDelayLimitUpdated(uint256 _newSequencerDelayLimit);\\n\\n /// @dev This event indicates that a request to decrease the sequencer limit has been made.\\n /// @param _requestedSequencerDelayLimit The new sequencer delay limit requested.\\n event sequencerDelayLimitDecreaseRequested(uint256 _requestedSequencerDelayLimit);\\n\\n // ************************************* //\\n // * Function Modifiers * //\\n // ************************************* //\\n\\n modifier OnlyBridgeRunning() {\\n unchecked {\\n require(block.timestamp / epochPeriod - latestVerifiedEpoch <= timeoutEpochs, \\\"Bridge Shutdown.\\\");\\n }\\n _;\\n }\\n\\n modifier OnlyBridgeShutdown() {\\n unchecked {\\n require(block.timestamp / epochPeriod - latestVerifiedEpoch > timeoutEpochs, \\\"Bridge Running.\\\");\\n }\\n _;\\n }\\n\\n /// @dev Constructor.\\n /// Note: epochPeriod must match the VeaInboxArbToEth contract deployment on Arbitrum, since it's on a different chain, we can't read it and trust the deployer to set a correct value\\n /// @param _deposit The deposit amount to submit a claim in wei.\\n /// @param _epochPeriod The duration of each epoch.\\n /// @param _minChallengePeriod The minimum time window to challenge a claim.\\n /// @param _timeoutEpochs The epochs before the bridge is considered shutdown.\\n /// @param _veaInboxArbToEth The address of the inbox contract on Arbitrum.\\n /// @param _maxMissingBlocks The maximum number of blocks that can be missing in a challenge period.\\n constructor(\\n uint256 _deposit,\\n uint256 _epochPeriod,\\n uint256 _minChallengePeriod,\\n uint256 _timeoutEpochs,\\n address _veaInboxArbToEth,\\n address _bridge,\\n uint256 _maxMissingBlocks\\n ) {\\n deposit = _deposit;\\n // epochPeriod must match the VeaInboxArbToEth contract deployment epochPeriod value.\\n epochPeriod = _epochPeriod;\\n minChallengePeriod = _minChallengePeriod;\\n timeoutEpochs = _timeoutEpochs;\\n veaInboxArbToEth = _veaInboxArbToEth;\\n bridge = IBridge(_bridge);\\n maxMissingBlocks = _maxMissingBlocks;\\n\\n updateSequencerDelayLimit();\\n\\n // claimant and challenger are not sybil resistant\\n // must burn half deposit to prevent zero cost griefing\\n burn = _deposit / 2;\\n depositPlusReward = 2 * _deposit - burn;\\n\\n latestVerifiedEpoch = block.timestamp / epochPeriod - 1;\\n }\\n\\n // ************************************* //\\n // * Parameter Updates * //\\n // ************************************* //\\n\\n /// @dev Request to decrease the sequencerDelayLimit.\\n function updateSequencerDelayLimit() public {\\n // the maximum asynchronous lag between the L2 and L1 clocks\\n (, , uint256 newSequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n if (newSequencerDelayLimit > sequencerDelayLimit) {\\n // For sequencerDelayLimit / epochPeriod > timeoutEpochs, claims cannot be verified by the timeout period and the bridge will shutdown.\\n sequencerDelayLimit = newSequencerDelayLimit;\\n emit sequencerDelayLimitUpdated(newSequencerDelayLimit);\\n } else if (newSequencerDelayLimit < sequencerDelayLimit) {\\n require(\\n sequencerDelayLimitDecreaseRequest.timestamp == 0,\\n \\\"Sequencer limit decrease request already pending.\\\"\\n );\\n\\n sequencerDelayLimitDecreaseRequest = SequencerDelayLimitDecreaseRequest({\\n requestedsequencerDelayLimit: newSequencerDelayLimit,\\n timestamp: block.timestamp\\n });\\n\\n emit sequencerDelayLimitDecreaseRequested(newSequencerDelayLimit);\\n }\\n }\\n\\n /// @dev execute sequencerDelayLimitDecreaseRequest\\n function executeSequencerDelayLimitDecreaseRequest() external {\\n require(sequencerDelayLimitDecreaseRequest.timestamp != 0, \\\"No pending sequencer limit decrease request.\\\");\\n require(\\n block.timestamp > sequencerDelayLimitDecreaseRequest.timestamp + sequencerDelayLimit,\\n \\\"Sequencer limit decrease request is still pending.\\\"\\n );\\n\\n uint256 requestedsequencerDelayLimit = sequencerDelayLimitDecreaseRequest.requestedsequencerDelayLimit;\\n delete sequencerDelayLimitDecreaseRequest;\\n\\n (, , uint256 currentsequencerDelayLimit, ) = ISequencerInbox(bridge.sequencerInbox()).maxTimeVariation();\\n\\n // check the request is still consistent with the arbiturm bridge\\n if (currentsequencerDelayLimit == requestedsequencerDelayLimit) {\\n sequencerDelayLimit = requestedsequencerDelayLimit;\\n emit sequencerDelayLimitUpdated(requestedsequencerDelayLimit);\\n }\\n }\\n\\n // ************************************* //\\n // * State Modifiers * //\\n // ************************************* //\\n\\n /// @dev Submit a claim about the _stateRoot at _epoch and submit a deposit.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateRoot The state root to claim.\\n function claim(uint256 _epoch, bytes32 _stateRoot) external payable virtual {\\n require(msg.value >= deposit, \\\"Insufficient claim deposit.\\\");\\n unchecked {\\n require(_epoch == block.timestamp / epochPeriod - 1, \\\"Invalid epoch.\\\");\\n }\\n require(_stateRoot != bytes32(0), \\\"Invalid claim.\\\");\\n require(claimHashes[_epoch] == bytes32(0), \\\"Claim already made.\\\");\\n\\n claimHashes[_epoch] = hashClaim(\\n Claim({\\n stateRoot: _stateRoot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n })\\n );\\n\\n emit Claimed(msg.sender, _epoch, _stateRoot);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function challenge(uint256 _epoch, Claim memory _claim) external payable {\\n _challenge(_epoch, _claim, msg.sender);\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @dev Allows proxy contracts to batch challenges.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _withdrawalAddress The address to withdraw the deposit + reward to.\\n function challenge(uint256 _epoch, Claim memory _claim, address _withdrawalAddress) external payable {\\n _challenge(_epoch, _claim, _withdrawalAddress);\\n }\\n\\n /// @dev Submit a challenge for the claim of the inbox state root snapshot taken at 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _withdrawAddress The address to withdraw the deposit + reward to.\\n function _challenge(uint256 _epoch, Claim memory _claim, address _withdrawAddress) internal {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(msg.value >= deposit, \\\"Insufficient challenge deposit.\\\");\\n require(_claim.challenger == address(0), \\\"Claim already challenged.\\\");\\n require(_claim.honest == Party.None, \\\"Claim already verified.\\\");\\n\\n _claim.challenger = _withdrawAddress;\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit Challenged(_epoch, _withdrawAddress);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Start verification for claim for 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function startVerification(uint256 _epoch, Claim memory _claim) external virtual {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n\\n // sequencerDelayLimit + epochPeriod is the worst case time to sync the L2 state compared to L1 clock.\\n // using checked arithmetic incase arbitrum governance sets sequencerDelayLimit to a large value\\n require(\\n block.timestamp - uint256(_claim.timestampClaimed) >= sequencerDelayLimit + epochPeriod,\\n \\\"Claim must wait atleast maxL2StateSyncDelay.\\\"\\n );\\n\\n CensorshipTestStatus _censorshipTestStatus = censorshipTestStatus(_claim);\\n require(\\n _censorshipTestStatus == CensorshipTestStatus.NotStarted ||\\n _censorshipTestStatus == CensorshipTestStatus.Failed,\\n \\\"Claim verification in progress or already completed.\\\"\\n );\\n\\n _claim.timestampVerification = uint32(block.timestamp);\\n _claim.blocknumberVerification = uint32(block.number);\\n\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit VerificationStarted(_epoch);\\n }\\n\\n /// @dev Resolves the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch of the optimistic claim.\\n /// @param _claim The claim associated with the epoch.\\n function verifySnapshot(uint256 _epoch, Claim memory _claim) external virtual OnlyBridgeRunning {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.challenger == address(0), \\\"Claim is challenged.\\\");\\n require(censorshipTestStatus(_claim) == CensorshipTestStatus.Passed, \\\"Censorship test not passed.\\\");\\n\\n if (_epoch > latestVerifiedEpoch) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _claim.stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n _claim.honest = Party.Claimer;\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n\\n /// Note: Access restricted to arbitrum bridge.\\n /// @dev Resolves any challenge of the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(\\n uint256 _epoch,\\n bytes32 _stateRoot,\\n Claim memory _claim\\n ) external virtual OnlyBridgeRunning {\\n // Arbitrum -> Ethereum message sender authentication\\n // docs: https://developer.arbitrum.io/arbos/l2-to-l1-messaging/\\n // example: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/dfef6a68ee18dbd2e1f5a099061a3b8a0e404485/contracts/crosschain/arbitrum/LibArbitrumL1.sol#L34\\n // example: https://github.com/OffchainLabs/arbitrum-tutorials/blob/2c1b7d2db8f36efa496e35b561864c0f94123a5f/packages/greeter/contracts/ethereum/GreeterL1.sol#L50\\n // note: we call the bridge for the activeOutbox address\\n\\n require(msg.sender == address(bridge), \\\"Not from native arbitrum bridge.\\\");\\n require(IOutbox(bridge.activeOutbox()).l2ToL1Sender() == veaInboxArbToEth, \\\"veaInboxArbToEth only.\\\");\\n\\n if (_epoch > latestVerifiedEpoch && _stateRoot != bytes32(0)) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n if (claimHashes[_epoch] == hashClaim(_claim)) {\\n if (_claim.stateRoot == _stateRoot) {\\n _claim.honest = Party.Claimer;\\n } else if (_claim.challenger != address(0)) {\\n _claim.honest = Party.Challenger;\\n }\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n }\\n\\n /// @dev Verifies and relays the message. UNTRUSTED.\\n /// @param _proof The merkle proof to prove the message inclusion in the inbox state root.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address of the contract on Ethereum to call.\\n /// @param _message The message encoded in the vea inbox as abi.encodeWithSelector(fnSelector, msg.sender, param1, param2, ...)\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external {\\n require(_proof.length < 64, \\\"Proof too long.\\\");\\n\\n bytes32 nodeHash = keccak256(abi.encodePacked(_msgId, _to, _message));\\n\\n // double hashed leaf\\n // avoids second order preimage attacks\\n // https://flawed.net.nz/2018/02/21/attacking-merkle-trees-with-a-second-preimage-attack/\\n assembly {\\n mstore(0x00, nodeHash)\\n nodeHash := keccak256(0x00, 0x20)\\n }\\n\\n unchecked {\\n for (uint256 i = 0; i < _proof.length; i++) {\\n bytes32 proofElement = _proof[i];\\n // sort sibling hashes as a convention for efficient proof validation\\n if (proofElement > nodeHash)\\n assembly {\\n mstore(0x00, nodeHash)\\n mstore(0x20, proofElement)\\n nodeHash := keccak256(0x00, 0x40)\\n }\\n else\\n assembly {\\n mstore(0x00, proofElement)\\n mstore(0x20, nodeHash)\\n nodeHash := keccak256(0x00, 0x40)\\n }\\n }\\n }\\n\\n require(stateRoot == nodeHash, \\\"Invalid proof.\\\");\\n\\n // msgId is the zero-based index of the message in the inbox.\\n // msgId is also used as an index in the relayed bitmap to prevent replay.\\n // Note: a bitmap is used instead of a simple boolean mapping to save 15k gas per message.\\n\\n uint256 relayIndex = _msgId >> 8;\\n uint256 offset;\\n\\n unchecked {\\n offset = _msgId % 256;\\n }\\n\\n bytes32 replay = relayed[relayIndex];\\n\\n require(((replay >> offset) & bytes32(uint256(1))) == bytes32(0), \\\"Message already relayed\\\");\\n relayed[relayIndex] = replay | bytes32(1 << offset);\\n\\n // UNTRUSTED.\\n (bool success, ) = _to.call(_message);\\n require(success, \\\"Failed to call contract\\\");\\n\\n emit MessageRelayed(_msgId);\\n }\\n\\n /// @dev Sends the deposit back to the Claimer if successful. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawClaimDeposit(uint256 _epoch, Claim calldata _claim) external virtual {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Claimer, \\\"Claim failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n if (_claim.challenger != address(0)) {\\n payable(BURN_ADDRESS).send(burn);\\n payable(_claim.claimer).send(depositPlusReward); // User is responsible for accepting ETH.\\n } else {\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Sends the deposit back to the Challenger if successful. Includes a portion of the Bridger's deposit.\\n /// @param _epoch The epoch associated with the challenge deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawChallengeDeposit(uint256 _epoch, Claim calldata _claim) external {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Challenger, \\\"Challenge failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n payable(BURN_ADDRESS).send(burn); // half burnt\\n payable(_claim.challenger).send(depositPlusReward); // User is responsible for accepting ETH.\\n }\\n\\n /// @dev When bridge is shutdown, no claim disputes can be resolved. This allows the claimer to withdraw their deposit.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawClaimerEscapeHatch(uint256 _epoch, Claim memory _claim) external OnlyBridgeShutdown {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.None, \\\"Claim resolved.\\\");\\n\\n if (_claim.claimer != address(0)) {\\n if (_claim.challenger == address(0)) {\\n delete claimHashes[_epoch];\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n } else {\\n address claimer = _claim.claimer;\\n _claim.claimer = address(0);\\n claimHashes[_epoch] = hashClaim(_claim);\\n payable(claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n }\\n\\n /// @dev When bridge is shutdown, no claim disputes can be resolved. This allows the challenger to withdraw their deposit.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n /// @param _claim The claim associated with the epoch.\\n function withdrawChallengerEscapeHatch(uint256 _epoch, Claim memory _claim) external OnlyBridgeShutdown {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.None, \\\"Claim resolved.\\\");\\n\\n if (_claim.challenger != address(0)) {\\n if (_claim.claimer == address(0)) {\\n delete claimHashes[_epoch];\\n payable(_claim.challenger).send(deposit); // User is responsible for accepting ETH.\\n } else {\\n address challenger = _claim.challenger;\\n _claim.challenger = address(0);\\n claimHashes[_epoch] == hashClaim(_claim);\\n payable(challenger).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n }\\n\\n // ************************************* //\\n // * Pure / Views * //\\n // ************************************* //\\n\\n /// @dev Hashes the claim.\\n /// @param _claim The claim to hash.\\n /// @return hashedClaim The hash of the claim.\\n function hashClaim(Claim memory _claim) public pure returns (bytes32 hashedClaim) {\\n return\\n hashedClaim = keccak256(\\n abi.encodePacked(\\n _claim.stateRoot,\\n _claim.claimer,\\n _claim.timestampClaimed,\\n _claim.timestampVerification,\\n _claim.blocknumberVerification,\\n _claim.honest,\\n _claim.challenger\\n )\\n );\\n }\\n\\n /// @dev Gets the status of the censorship test for claim.\\n /// @param _claim The claim to test.\\n /// @return status True if the claim passed the censorship test.\\n function censorshipTestStatus(Claim memory _claim) public view returns (CensorshipTestStatus status) {\\n unchecked {\\n if (uint256(_claim.timestampVerification) == 0) {\\n status = CensorshipTestStatus.NotStarted;\\n } else if (block.timestamp - uint256(_claim.timestampVerification) < minChallengePeriod) {\\n status = CensorshipTestStatus.InProgress;\\n } else {\\n uint256 expectedBlocks = uint256(_claim.blocknumberVerification) +\\n (block.timestamp - uint256(_claim.timestampVerification)) /\\n SLOT_TIME;\\n uint256 actualBlocks = block.number;\\n if (expectedBlocks - actualBlocks <= maxMissingBlocks) {\\n status = CensorshipTestStatus.Passed;\\n } else {\\n status = CensorshipTestStatus.Failed;\\n }\\n }\\n }\\n }\\n\\n /// @dev Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\\n /// @return epoch The hash of the claim.\\n function epochNow() external view returns (uint256 epoch) {\\n epoch = block.timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the current epoch from the outbox's point of view using the Ethereum L1 clock.\\n /// @return epoch The hash of the claim.\\n function epochAt(uint256 timestamp) external view returns (uint256 epoch) {\\n epoch = timestamp / epochPeriod;\\n }\\n\\n /// @dev Get the msg relayed status.\\n /// @param _msgId The msgId to check.\\n /// @return isRelayed True if the msg was relayed.\\n function isMsgRelayed(uint256 _msgId) external view returns (bool isRelayed) {\\n uint256 relayIndex = _msgId >> 8;\\n uint256 offset;\\n\\n unchecked {\\n offset = _msgId % 256;\\n }\\n\\n bytes32 replay = relayed[relayIndex];\\n\\n isRelayed = (replay >> offset) & bytes32(uint256(1)) == bytes32(uint256(1));\\n }\\n}\\n\",\"keccak256\":\"0xa6739700d8449f0432d0de255bc73dc6f2d9ef10e0a16b800519762a796bc7bc\",\"license\":\"MIT\"},\"src/canonical/arbitrum/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x8315177aB297bA92A06054cE80a67Ed4DBd7ed3a\\n// implementation: https://etherscan.io/address/0x1066cecc8880948fe55e427e94f1ff221d626591#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\ninterface IBridge {\\n function activeOutbox() external view returns (address);\\n\\n function sequencerInbox() external view returns (address);\\n\\n function allowedDelayedInboxList(uint256) external returns (address);\\n}\\n\",\"keccak256\":\"0x0e7981b3e9b179caa0085d1ad900b19e88e29fec65923f41fde0315773fa9a3c\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/IOutbox.sol\":{\"content\":\"// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/IBridge.sol\\n// proxy: https://etherscan.io/address/0x0B9857ae2D4A3DBe74ffE1d7DF045bb7F96E4840#code\\n// implementation: https://etherscan.io/address/0x0ea7372338a589e7f0b00e463a53aa464ef04e17#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\ninterface IOutbox {\\n /// @notice When l2ToL1Sender returns a nonzero address, the message was originated by an L2 account\\n /// When the return value is zero, that means this is a system message\\n /// @dev the l2ToL1Sender behaves as the tx.origin, the msg.sender should be validated to protect against reentrancies\\n function l2ToL1Sender() external view returns (address);\\n}\\n\",\"keccak256\":\"0x4d815542262727a2a3182332a7c16b0b1d33c031997de91c12e67e87e748b8ca\",\"license\":\"BUSL-1.1\"},\"src/canonical/arbitrum/ISequencerInbox.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n// https://github.com/OffchainLabs/nitro-contracts/blob/08ac127e966fa87a4d5ba3d23cd3132b57701132/src/bridge/ISequencerInbox.sol\\n// proxy: https://etherscan.io/address/0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6#code\\n// implementation: https://etherscan.io/address/0xD03bFe2CE83632F4E618a97299cc91B1335BB2d9#code\\n// interface is pruned for relevant function stubs\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"./IBridge.sol\\\";\\n\\ninterface ISequencerInbox {\\n struct MaxTimeVariation {\\n uint256 delayBlocks;\\n uint256 futureBlocks;\\n uint256 delaySeconds;\\n uint256 futureSeconds;\\n }\\n\\n function maxTimeVariation() external view returns (uint256, uint256, uint256, uint256);\\n}\\n\",\"keccak256\":\"0xf972282dbad5eae92a352e0de6b588000bf4c58f45d90a30ef8863d5878313bc\",\"license\":\"BUSL-1.1\"},\"src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../../arbitrumToEth/VeaOutboxArbToEth.sol\\\";\\n\\n/// @dev Vea Outbox From arbitrumSepolia to Sepolia.\\n/// Note: This contract is deployed on Sepolia.\\n/// Note: This contract is permissioned for developer testing (devnet).\\ncontract VeaOutboxArbToEthDevnet is VeaOutboxArbToEth {\\n address public devnetOperator; // permissioned devnet operator\\n\\n /// @dev Requires that the sender is the devnet operator.\\n modifier onlyByDevnetOperator() {\\n require(devnetOperator == msg.sender);\\n _;\\n }\\n\\n /// @dev Changes the devnet operator.\\n /// @param _devnetOperator The new testnet operator.\\n function changeDevnetOperator(address _devnetOperator) external onlyByDevnetOperator {\\n require(msg.sender == devnetOperator, \\\"Invalid Testnet Operator\\\");\\n devnetOperator = _devnetOperator;\\n }\\n\\n /// @dev Submit a claim about the _stateRoot at _epoch and submit a deposit.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateRoot The state root to claim.\\n function claim(uint256 _epoch, bytes32 _stateRoot) public payable override onlyByDevnetOperator {\\n require(msg.value >= deposit, \\\"Insufficient claim deposit.\\\");\\n require(_stateRoot != bytes32(0), \\\"Invalid claim.\\\");\\n require(claimHashes[_epoch] == bytes32(0), \\\"Claim already made.\\\");\\n\\n claimHashes[_epoch] = hashClaim(\\n Claim({\\n stateRoot: _stateRoot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n })\\n );\\n\\n emit Claimed(msg.sender, _epoch, _stateRoot);\\n\\n // Refund overpayment.\\n if (msg.value > deposit) {\\n uint256 refund = msg.value - deposit;\\n payable(msg.sender).send(refund); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Start verification for claim for 'epoch'.\\n /// @param _epoch The epoch of the claim to challenge.\\n /// @param _claim The claim associated with the epoch.\\n function startVerification(uint256 _epoch, Claim memory _claim) public override onlyByDevnetOperator {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n\\n _claim.timestampVerification = uint32(block.timestamp);\\n _claim.blocknumberVerification = uint32(block.number);\\n\\n claimHashes[_epoch] = hashClaim(_claim);\\n\\n emit VerificationStarted(_epoch);\\n }\\n\\n /// @dev Sends the deposit back to the Bridger if their claim is not successfully challenged. Includes a portion of the Challenger's deposit if unsuccessfully challenged.\\n /// @param _claim The claim associated with the epoch.\\n /// @param _epoch The epoch associated with the claim deposit to withraw.\\n function withdrawClaimDeposit(uint256 _epoch, Claim memory _claim) public override {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.honest == Party.Claimer, \\\"Claim failed.\\\");\\n\\n delete claimHashes[_epoch];\\n\\n if (_claim.challenger != address(0)) {\\n payable(BURN_ADDRESS).send(burn);\\n payable(_claim.claimer).send(depositPlusReward); // User is responsible for accepting ETH.\\n } else {\\n payable(_claim.claimer).send(deposit); // User is responsible for accepting ETH.\\n }\\n }\\n\\n /// @dev Resolves the optimistic claim for '_epoch'.\\n /// @param _epoch The epoch of the optimistic claim.\\n /// @param _claim The claim associated with the epoch.\\n function verifySnapshot(uint256 _epoch, Claim memory _claim) public override OnlyBridgeRunning {\\n require(claimHashes[_epoch] == hashClaim(_claim), \\\"Invalid claim.\\\");\\n require(_claim.challenger == address(0), \\\"Claim is challenged.\\\");\\n\\n if (_epoch > latestVerifiedEpoch) {\\n latestVerifiedEpoch = _epoch;\\n stateRoot = _claim.stateRoot;\\n emit Verified(_epoch);\\n }\\n\\n _claim.honest = Party.Claimer;\\n claimHashes[_epoch] = hashClaim(_claim);\\n }\\n\\n /// @dev Testnet operator utility function to claim, validate and withdraw.\\n /// @param _epoch The epoch for which the claim is made.\\n /// @param _stateroot The state root to claim.\\n function devnetAdvanceState(uint256 _epoch, bytes32 _stateroot) external payable {\\n claim(_epoch, _stateroot);\\n Claim memory claim = Claim({\\n stateRoot: _stateroot,\\n claimer: msg.sender,\\n timestampClaimed: uint32(block.timestamp),\\n timestampVerification: uint32(0),\\n blocknumberVerification: uint32(0),\\n honest: Party.None,\\n challenger: address(0)\\n });\\n claim.timestampClaimed = uint32(block.timestamp);\\n startVerification(_epoch, claim);\\n claim.timestampVerification = uint32(block.timestamp);\\n claim.blocknumberVerification = uint32(block.number);\\n verifySnapshot(_epoch, claim);\\n claim.honest = Party.Claimer;\\n withdrawClaimDeposit(_epoch, claim);\\n }\\n\\n /// @dev Constructor.\\n /// @param _deposit The deposit amount to submit a claim in wei.\\n /// @param _epochPeriod The duration of each epoch.\\n /// @param _minChallengePeriod The minimum time window to challenge a claim.\\n /// @param _timeoutEpochs The epochs before the bridge is considered shutdown.\\n /// @param _veaInboxArbToEthDevnet The address of the inbox contract on Arbitrum.\\n /// @param _maxMissingBlocks The maximum number of blocks that can be missing in a challenge period.\\n constructor(\\n uint256 _deposit,\\n uint256 _epochPeriod,\\n uint256 _minChallengePeriod,\\n uint256 _timeoutEpochs,\\n address _veaInboxArbToEthDevnet,\\n address _bridge,\\n uint256 _maxMissingBlocks\\n )\\n VeaOutboxArbToEth(\\n _deposit,\\n _epochPeriod,\\n _minChallengePeriod,\\n _timeoutEpochs,\\n _veaInboxArbToEthDevnet,\\n _bridge,\\n _maxMissingBlocks\\n )\\n {\\n devnetOperator = msg.sender;\\n }\\n}\\n\",\"keccak256\":\"0x3bac524e52a5dbe43b9fbde21620bffc4568145e43cc7f3295af4d4ab04332ee\",\"license\":\"MIT\"},\"src/interfaces/outboxes/IVeaOutboxOnL1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nimport \\\"../types/VeaClaim.sol\\\";\\n\\n/// @dev Interface of the Vea Outbox on L1 chains like Ethereum, Gnosis, Polygon POS where storage is expensive.\\ninterface IVeaOutboxOnL1 {\\n /// @dev Verifies and relays the message.\\n /// Note: Gateways expect first argument of message call to be the arbitrum message sender, used for authentication.\\n /// @param _proof The merkle proof to prove the message.\\n /// @param _msgId The zero based index of the message in the inbox.\\n /// @param _to The address to send the message to.\\n /// @param _message The message to relay.\\n function sendMessage(bytes32[] calldata _proof, uint64 _msgId, address _to, bytes calldata _message) external;\\n\\n /// @dev Resolves any challenge of the optimistic claim for 'epoch' using the canonical bridge.\\n /// Note: Access restricted to canonical bridge.\\n /// @param _epoch The epoch to verify.\\n /// @param _stateRoot The true state root for the epoch.\\n /// @param _claim The claim associated with the epoch.\\n function resolveDisputedClaim(uint256 _epoch, bytes32 _stateRoot, Claim memory _claim) external;\\n}\\n\",\"keccak256\":\"0xf1d52e289e790088502b7909f11f47bc33ddd3fc545636b7fb29c01ed00d3ff3\",\"license\":\"MIT\"},\"src/interfaces/types/VeaClaim.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n/// @custom:authors: [@jaybuidl, @shotaronowhere]\\n/// @custom:reviewers: []\\n/// @custom:auditors: []\\n/// @custom:bounties: []\\n/// @custom:deployments: []\\n\\npragma solidity 0.8.24;\\n\\nenum Party {\\n None,\\n Claimer,\\n Challenger\\n}\\n\\nstruct Claim {\\n bytes32 stateRoot;\\n address claimer;\\n uint32 timestampClaimed;\\n uint32 timestampVerification;\\n uint32 blocknumberVerification;\\n Party honest;\\n address challenger;\\n}\\n\",\"keccak256\":\"0xfef781e359c97aebbe8dbfcb75edb7cb962139fd9ea538b8b89a3f2e13a05bfe\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6101a060405234801562000011575f80fd5b5060405162002b9d38038062002b9d8339810160408190526200003491620002e7565b60c08790526101208690526101408590526101608490526001600160a01b0380841660a05282166080526101808190528686868686868662000075620000ed565b620000826002886200035e565b60e0819052620000948860026200037e565b620000a091906200039e565b6101005261012051600190620000b790426200035e565b620000c391906200039e565b6001555050600780546001600160a01b03191633179055506200040b9a5050505050505050505050565b5f6080516001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001539190620003b4565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156200018f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001b59190620003d7565b5092505050600454811115620002005760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b600454811015620002c857600654156200027a5760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b606482015260840160405180910390fd5b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b80516001600160a01b0381168114620002e2575f80fd5b919050565b5f805f805f805f60e0888a031215620002fe575f80fd5b875196506020880151955060408801519450606088015193506200032560808901620002cb565b92506200033560a08901620002cb565b915060c0880151905092959891949750929550565b634e487b7160e01b5f52601160045260245ffd5b5f826200037957634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176200039857620003986200034a565b92915050565b818103818111156200039857620003986200034a565b5f60208284031215620003c5575f80fd5b620003d082620002cb565b9392505050565b5f805f8060808587031215620003eb575f80fd5b505082516020840151604085015160609095015191969095509092509050565b60805160a05160c05160e051610100516101205161014051610160516101805161264c620005515f395f818161055b0152611dc501525f818161058e01528181610955015281816117a20152818161192a0152611b3101525f81816106130152611d5a01525f81816105c10152818161097901528181610c7a01528181611498015281816117c60152818161194e0152611b5501525f81816104a401528181611233015261136801525f8181610396015281816111e0015261132001525f818161064601528181610cbc01528181610e2701528181610e53015281816113b701528181611a9101528181611af601528181611c9901528181611d0501528181611eb601528181612042015261206e01525f81816104590152610a6301525f81816106c40152818161083f015281816109f401528181610a8d0152611517015261264c5ff3fe608060405260043610610207575f3560e01c8063836e344b11610113578063b633b9441161009d578063df19e6ff1161006d578063df19e6ff14610687578063e78cea92146106b3578063e813a755146106e6578063eedcf2a9146106fb578063fccc28131461070e575f80fd5b8063b633b944146105e3578063c2114a1614610602578063d0e30db014610635578063da2b7bc414610668575f80fd5b8063930f28af116100e3578063930f28af146105175780639588eca214610536578063aa22a1c61461054a578063b044397e1461057d578063b5b7a184146105b0575f80fd5b8063836e344b146104935780638830dfbd146104c65780638a619a71146104d95780638ad3a8f7146104f8575f80fd5b80633ce43cfd1161019457806349b4299e1161016457806349b4299e146103d75780634a439cfe146103f6578063541adcca146104155780635f43a47f1461043457806369cd250d14610448575f80fd5b80633ce43cfd1461031b57806343b066d51461033a57806344df8e70146103855780634788cb38146103b8575f80fd5b8063222ae786116101da578063222ae786146102875780632639c060146102a957806327ee6bdd146102d457806331d14457146102e957806331ddf743146102fc575f80fd5b806301139b681461020b578063051d1970146102205780630c63fa84146102545780630f0adca514610268575b5f80fd5b61021e6102193660046121ad565b610721565b005b34801561022b575f80fd5b5060055460065461023a919082565b604080519283526020830191909152015b60405180910390f35b34801561025f575f80fd5b5061021e610730565b348015610273575f80fd5b5061021e6102823660046121d9565b610953565b348015610292575f80fd5b5061029b610c74565b60405190815260200161024b565b3480156102b4575f80fd5b5061029b6102c336600461220d565b60026020525f908152604090205481565b3480156102df575f80fd5b5061029b60015481565b61021e6102f7366004612224565b610ca4565b348015610307575f80fd5b5061021e6103163660046122a0565b610e9b565b348015610326575f80fd5b5061021e610335366004612359565b61112b565b348015610345575f80fd5b5061037561035436600461220d565b600881901c5f90815260036020526040902054600160ff9092161c81161490565b604051901515815260200161024b565b348015610390575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c3575f80fd5b5061021e6103d23660046121ad565b61126f565b3480156103e2575f80fd5b5061021e6103f13660046121ad565b6113ee565b348015610401575f80fd5b5061029b61041036600461220d565b611492565b348015610420575f80fd5b5061029b61042f36600461238f565b6114c3565b34801561043f575f80fd5b5061021e611514565b348015610453575f80fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161024b565b34801561049e575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b61021e6104d43660046123b0565b611703565b3480156104e4575f80fd5b5061021e6104f33660046123f0565b61170e565b348015610503575f80fd5b5060075461047b906001600160a01b031681565b348015610522575f80fd5b5061021e6105313660046121ad565b6117a0565b348015610541575f80fd5b5061029b5f5481565b348015610555575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610588575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bb575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ee575f80fd5b5061021e6105fd3660046121ad565b611928565b34801561060d575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610640575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610673575f80fd5b5061021e6106823660046121ad565b611b2f565b348015610692575f80fd5b506106a66106a136600461238f565b611d3e565b60405161024b919061241f565b3480156106be575f80fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f1575f80fd5b5061029b60045481565b61021e610709366004612224565b611e01565b348015610719575f80fd5b5061047b5f81565b61072c828233611e80565b5050565b6006545f0361079b5760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b6004546006546107ab919061244d565b42116108145760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b6064820152608401610792565b600580545f9182905560068290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa158015610888573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ac9190612460565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090b919061247b565b509250505081810361072c5760048290556040518281527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a15050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816109a6576109a66124ae565b040311156109e95760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b6044820152606401610792565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a615760405162461bcd60e51b815260206004820181905260248201527f4e6f742066726f6d206e617469766520617262697472756d206272696467652e6044820152606401610792565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0b9190612460565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612460565b6001600160a01b031614610bb95760405162461bcd60e51b81526020600482015260166024820152753b32b0a4b73137bc20b9312a37a2ba341037b7363c9760511b6044820152606401610792565b60015483118015610bc957508115155b15610c0b5760018390555f8290556040518381527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b610c14816114c3565b5f8481526002602052604090205403610c6f578051829003610c3c57600160a0820152610c57565b60c08101516001600160a01b031615610c5757600260a08201525b610c60816114c3565b5f848152600260205260409020555b505050565b5f610c9f7f0000000000000000000000000000000000000000000000000000000000000000426124c2565b905090565b6007546001600160a01b03163314610cba575f80fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015610d2a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420636c61696d206465706f7369742e00000000006044820152606401610792565b80610d475760405162461bcd60e51b8152600401610792906124e1565b5f8281526002602052604090205415610d985760405162461bcd60e51b815260206004820152601360248201527221b630b4b69030b63932b0b23c9036b0b2329760691b6044820152606401610792565b6040805160e0810182528281523360208201524263ffffffff16918101919091525f606082018190526080820181905260a0820181905260c0820152610ddd906114c3565b5f838152600260209081526040918290209290925551828152839133917fd95107f4584744c6c893a04c43058aadd1ce8aac8ca5d64140eaf277de6c1d57910160405180910390a37f000000000000000000000000000000000000000000000000000000000000000034111561072c575f610e787f000000000000000000000000000000000000000000000000000000000000000034612509565b604051909150339082156108fc029083905f818181858888f15050505050505050565b60408510610edd5760405162461bcd60e51b815260206004820152600f60248201526e283937b7b3103a37b7903637b7339760891b6044820152606401610792565b5f84848484604051602001610ef5949392919061251c565b604051602081830303815290604052805190602001209050805f5260205f2090505f5b86811015610f6d575f888883818110610f3357610f3361255d565b90506020020135905082811115610f5657825f528060205260405f209250610f64565b805f528260205260405f2092505b50600101610f18565b50805f5414610faf5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b6044820152606401610792565b600885901c66ffffffffffffff165f8181526003602052604090205460ff87169080821c600116156110235760405162461bcd60e51b815260206004820152601760248201527f4d65737361676520616c72656164792072656c617965640000000000000000006044820152606401610792565b5f838152600360205260408082206001851b84179055516001600160a01b038916906110529089908990612571565b5f604051808303815f865af19150503d805f811461108b576040519150601f19603f3d011682016040523d82523d5f602084013e611090565b606091505b50509050806110e15760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2063616c6c20636f6e74726163740000000000000000006044820152606401610792565b60405167ffffffffffffffff8a1681527f54303fab361bc52c2f1f56ace7351189582264f74ce47a6e7c3f478d64c429439060200160405180910390a15050505050505050505050565b61113d61042f3683900383018361238f565b5f83815260026020526040902054146111685760405162461bcd60e51b8152600401610792906124e1565b600261117a60c0830160a08401612580565b600281111561118b5761118b61240b565b146111cc5760405162461bcd60e51b815260206004820152601160248201527021b430b63632b733b2903330b4b632b21760791b6044820152606401610792565b5f82815260026020526040808220829055517f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f15061122593505060e0840191505060c083016123f0565b6001600160a01b03166108fc7f000000000000000000000000000000000000000000000000000000000000000090811502906040515f60405180830381858888f150505050505050565b611278816114c3565b5f83815260026020526040902054146112a35760405162461bcd60e51b8152600401610792906124e1565b60018160a0015160028111156112bb576112bb61240b565b146112f85760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b6044820152606401610792565b5f8281526002602052604081205560c08101516001600160a01b0316156113a1576040515f907f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f150505060208301516040516001600160a01b0390911692507f000000000000000000000000000000000000000000000000000000000000000080156108fc029250905f818181858888f150505050505050565b60208101516040516001600160a01b03909116907f000000000000000000000000000000000000000000000000000000000000000080156108fc02915f818181858888f150505050505050565b6007546001600160a01b03163314611404575f80fd5b61140d816114c3565b5f83815260026020526040902054146114385760405162461bcd60e51b8152600401610792906124e1565b63ffffffff428116606083015243166080820152611455816114c3565b5f8381526002602052604080822092909255905183917f37b700b61b9b4710dddb0c3316b2be7ef6088ed4b1d7bfe0fb98be8f9a163e1691a25050565b5f6114bd7f0000000000000000000000000000000000000000000000000000000000000000836124c2565b92915050565b80516020808301516040808501516060860151608087015160a088015160c089015194515f986114f7989097969101612599565b604051602081830303815290604052805190602001209050919050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa158015611571573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115959190612460565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061247b565b509250505060045481111561163e5760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b60045481101561170057600654156116b25760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b6064820152608401610792565b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b610c6f838383611e80565b6007546001600160a01b03163314611724575f80fd5b6007546001600160a01b0316331461177e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420546573746e6574204f70657261746f7200000000000000006044820152606401610792565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816117f3576117f36124ae565b040311156118365760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b6044820152606401610792565b61183f816114c3565b5f838152600260205260409020541461186a5760405162461bcd60e51b8152600401610792906124e1565b60c08101516001600160a01b0316156118bc5760405162461bcd60e51b815260206004820152601460248201527321b630b4b69034b99031b430b63632b733b2b21760611b6044820152606401610792565b60015482111561190357600182905580515f556040518281527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b600160a0820152611913816114c3565b5f928352600260205260409092209190915550565b7f00000000000000000000000000000000000000000000000000000000000000006001547f0000000000000000000000000000000000000000000000000000000000000000428161197b5761197b6124ae565b0403116119bc5760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b6044820152606401610792565b6119c5816114c3565b5f83815260026020526040902054146119f05760405162461bcd60e51b8152600401610792906124e1565b5f8160a001516002811115611a0757611a0761240b565b14611a465760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b6044820152606401610792565b60c08101516001600160a01b03161561072c5760208101516001600160a01b0316611ac9575f8281526002602052604080822082905560c083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b60c0810180515f909152611adc826114c3565b505f83815260026020526040516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f00000000000000000000000000000000000000000000000000000000000000004281611b8257611b826124ae565b040311611bc35760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b6044820152606401610792565b611bcc816114c3565b5f8381526002602052604090205414611bf75760405162461bcd60e51b8152600401610792906124e1565b5f8160a001516002811115611c0e57611c0e61240b565b14611c4d5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b6044820152606401610792565b60208101516001600160a01b03161561072c5760c08101516001600160a01b0316611cd1575f8281526002602090815260408083208390559083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b6020810180515f909152611ce4826114c3565b5f848152600260205260408082209290925590516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b5f816060015163ffffffff165f03611d5857506002919050565b7f0000000000000000000000000000000000000000000000000000000000000000826060015163ffffffff1642031015611d9457506003919050565b5f600c836060015163ffffffff16420381611db157611db16124ae565b608085015163ffffffff16919004019050437f000000000000000000000000000000000000000000000000000000000000000081830311611df55760019250611df9565b5f92505b50505b919050565b611e0b8282610ca4565b6040805160e0810182528281523360208201524263ffffffff16918101919091525f606082018190526080820181905260a0820181905260c0820152611e5183826113ee565b63ffffffff428116606083015243166080820152611e6f83826117a0565b600160a0820152610c6f838261126f565b611e89826114c3565b5f8481526002602052604090205414611eb45760405162461bcd60e51b8152600401610792906124e1565b7f0000000000000000000000000000000000000000000000000000000000000000341015611f245760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74206368616c6c656e6765206465706f7369742e006044820152606401610792565b60c08201516001600160a01b031615611f7f5760405162461bcd60e51b815260206004820152601960248201527f436c61696d20616c7265616479206368616c6c656e6765642e000000000000006044820152606401610792565b5f8260a001516002811115611f9657611f9661240b565b14611fe35760405162461bcd60e51b815260206004820152601760248201527f436c61696d20616c72656164792076657269666965642e0000000000000000006044820152606401610792565b6001600160a01b03811660c0830152611ffb826114c3565b5f848152600260205260408082209290925590516001600160a01b0383169185917fcfe09ca25f55d949baba5e280f5750c9ba4b9048fca5532f916067d433afe4d79190a37f0000000000000000000000000000000000000000000000000000000000000000341115610c6f575f6120937f000000000000000000000000000000000000000000000000000000000000000034612509565b604051909150339082156108fc029083905f818181858888f1505050505050505050565b6001600160a01b0381168114611700575f80fd5b8035611dfc816120b7565b803563ffffffff81168114611dfc575f80fd5b803560038110611dfc575f80fd5b5f60e08284031215612107575f80fd5b60405160e0810181811067ffffffffffffffff8211171561213657634e487b7160e01b5f52604160045260245ffd5b6040528235815290508061214c602084016120cb565b602082015261215d604084016120d6565b604082015261216e606084016120d6565b606082015261217f608084016120d6565b608082015261219060a084016120e9565b60a08201526121a160c084016120cb565b60c08201525092915050565b5f8061010083850312156121bf575f80fd5b823591506121d084602085016120f7565b90509250929050565b5f805f61012084860312156121ec575f80fd5b833592506020840135915061220485604086016120f7565b90509250925092565b5f6020828403121561221d575f80fd5b5035919050565b5f8060408385031215612235575f80fd5b50508035926020909101359150565b803567ffffffffffffffff81168114611dfc575f80fd5b5f8083601f84011261226b575f80fd5b50813567ffffffffffffffff811115612282575f80fd5b602083019150836020828501011115612299575f80fd5b9250929050565b5f805f805f80608087890312156122b5575f80fd5b863567ffffffffffffffff808211156122cc575f80fd5b818901915089601f8301126122df575f80fd5b8135818111156122ed575f80fd5b8a60208260051b8501011115612301575f80fd5b6020830198508097505061231760208a01612244565b955061232560408a016120cb565b9450606089013591508082111561233a575f80fd5b5061234789828a0161225b565b979a9699509497509295939492505050565b5f8082840361010081121561236c575f80fd5b8335925060e0601f1982011215612381575f80fd5b506020830190509250929050565b5f60e0828403121561239f575f80fd5b6123a983836120f7565b9392505050565b5f805f61012084860312156123c3575f80fd5b833592506123d485602086016120f7565b91506101008401356123e5816120b7565b809150509250925092565b5f60208284031215612400575f80fd5b81356123a9816120b7565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106124335761243361240b565b91905290565b634e487b7160e01b5f52601160045260245ffd5b808201808211156114bd576114bd612439565b5f60208284031215612470575f80fd5b81516123a9816120b7565b5f805f806080858703121561248e575f80fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b5f52601260045260245ffd5b5f826124dc57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600e908201526d24b73b30b634b21031b630b4b69760911b604082015260600190565b818103818111156114bd576114bd612439565b60c085901b6001600160c01b0319168152606084901b6bffffffffffffffffffffffff191660088201528183601c8301375f9101601c019081529392505050565b634e487b7160e01b5f52603260045260245ffd5b818382375f9101908152919050565b5f60208284031215612590575f80fd5b6123a9826120e9565b8781525f6bffffffffffffffffffffffff19808960601b16602084015263ffffffff60e01b808960e01b166034850152808860e01b166038850152808760e01b16603c85015250600385106125f0576125f061240b565b60f89490941b60408301525060609190911b90911660418201526055019594505050505056fea2646970667358221220eb4b6a33e134826f8849734c57ec356151a29a7be52c4f63c56667d0af5233e264736f6c63430008180033", + "deployedBytecode": "0x608060405260043610610207575f3560e01c8063836e344b11610113578063b633b9441161009d578063df19e6ff1161006d578063df19e6ff14610687578063e78cea92146106b3578063e813a755146106e6578063eedcf2a9146106fb578063fccc28131461070e575f80fd5b8063b633b944146105e3578063c2114a1614610602578063d0e30db014610635578063da2b7bc414610668575f80fd5b8063930f28af116100e3578063930f28af146105175780639588eca214610536578063aa22a1c61461054a578063b044397e1461057d578063b5b7a184146105b0575f80fd5b8063836e344b146104935780638830dfbd146104c65780638a619a71146104d95780638ad3a8f7146104f8575f80fd5b80633ce43cfd1161019457806349b4299e1161016457806349b4299e146103d75780634a439cfe146103f6578063541adcca146104155780635f43a47f1461043457806369cd250d14610448575f80fd5b80633ce43cfd1461031b57806343b066d51461033a57806344df8e70146103855780634788cb38146103b8575f80fd5b8063222ae786116101da578063222ae786146102875780632639c060146102a957806327ee6bdd146102d457806331d14457146102e957806331ddf743146102fc575f80fd5b806301139b681461020b578063051d1970146102205780630c63fa84146102545780630f0adca514610268575b5f80fd5b61021e6102193660046121ad565b610721565b005b34801561022b575f80fd5b5060055460065461023a919082565b604080519283526020830191909152015b60405180910390f35b34801561025f575f80fd5b5061021e610730565b348015610273575f80fd5b5061021e6102823660046121d9565b610953565b348015610292575f80fd5b5061029b610c74565b60405190815260200161024b565b3480156102b4575f80fd5b5061029b6102c336600461220d565b60026020525f908152604090205481565b3480156102df575f80fd5b5061029b60015481565b61021e6102f7366004612224565b610ca4565b348015610307575f80fd5b5061021e6103163660046122a0565b610e9b565b348015610326575f80fd5b5061021e610335366004612359565b61112b565b348015610345575f80fd5b5061037561035436600461220d565b600881901c5f90815260036020526040902054600160ff9092161c81161490565b604051901515815260200161024b565b348015610390575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c3575f80fd5b5061021e6103d23660046121ad565b61126f565b3480156103e2575f80fd5b5061021e6103f13660046121ad565b6113ee565b348015610401575f80fd5b5061029b61041036600461220d565b611492565b348015610420575f80fd5b5061029b61042f36600461238f565b6114c3565b34801561043f575f80fd5b5061021e611514565b348015610453575f80fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161024b565b34801561049e575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b61021e6104d43660046123b0565b611703565b3480156104e4575f80fd5b5061021e6104f33660046123f0565b61170e565b348015610503575f80fd5b5060075461047b906001600160a01b031681565b348015610522575f80fd5b5061021e6105313660046121ad565b6117a0565b348015610541575f80fd5b5061029b5f5481565b348015610555575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610588575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105bb575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105ee575f80fd5b5061021e6105fd3660046121ad565b611928565b34801561060d575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610640575f80fd5b5061029b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610673575f80fd5b5061021e6106823660046121ad565b611b2f565b348015610692575f80fd5b506106a66106a136600461238f565b611d3e565b60405161024b919061241f565b3480156106be575f80fd5b5061047b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f1575f80fd5b5061029b60045481565b61021e610709366004612224565b611e01565b348015610719575f80fd5b5061047b5f81565b61072c828233611e80565b5050565b6006545f0361079b5760405162461bcd60e51b815260206004820152602c60248201527f4e6f2070656e64696e672073657175656e636572206c696d697420646563726560448201526b30b9b2903932b8bab2b9ba1760a11b60648201526084015b60405180910390fd5b6004546006546107ab919061244d565b42116108145760405162461bcd60e51b815260206004820152603260248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152711034b99039ba34b636103832b73234b7339760711b6064820152608401610792565b600580545f9182905560068290556040805163ee35f32760e01b815290519192916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163ee35f3279160048083019260209291908290030181865afa158015610888573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ac9190612460565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156108e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090b919061247b565b509250505081810361072c5760048290556040518281527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a15050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816109a6576109a66124ae565b040311156109e95760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b6044820152606401610792565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a615760405162461bcd60e51b815260206004820181905260248201527f4e6f742066726f6d206e617469766520617262697472756d206272696467652e6044820152606401610792565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ab5d89436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ae7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b0b9190612460565b6001600160a01b03166380648b026040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b46573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b6a9190612460565b6001600160a01b031614610bb95760405162461bcd60e51b81526020600482015260166024820152753b32b0a4b73137bc20b9312a37a2ba341037b7363c9760511b6044820152606401610792565b60015483118015610bc957508115155b15610c0b5760018390555f8290556040518381527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b610c14816114c3565b5f8481526002602052604090205403610c6f578051829003610c3c57600160a0820152610c57565b60c08101516001600160a01b031615610c5757600260a08201525b610c60816114c3565b5f848152600260205260409020555b505050565b5f610c9f7f0000000000000000000000000000000000000000000000000000000000000000426124c2565b905090565b6007546001600160a01b03163314610cba575f80fd5b7f0000000000000000000000000000000000000000000000000000000000000000341015610d2a5760405162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e7420636c61696d206465706f7369742e00000000006044820152606401610792565b80610d475760405162461bcd60e51b8152600401610792906124e1565b5f8281526002602052604090205415610d985760405162461bcd60e51b815260206004820152601360248201527221b630b4b69030b63932b0b23c9036b0b2329760691b6044820152606401610792565b6040805160e0810182528281523360208201524263ffffffff16918101919091525f606082018190526080820181905260a0820181905260c0820152610ddd906114c3565b5f838152600260209081526040918290209290925551828152839133917fd95107f4584744c6c893a04c43058aadd1ce8aac8ca5d64140eaf277de6c1d57910160405180910390a37f000000000000000000000000000000000000000000000000000000000000000034111561072c575f610e787f000000000000000000000000000000000000000000000000000000000000000034612509565b604051909150339082156108fc029083905f818181858888f15050505050505050565b60408510610edd5760405162461bcd60e51b815260206004820152600f60248201526e283937b7b3103a37b7903637b7339760891b6044820152606401610792565b5f84848484604051602001610ef5949392919061251c565b604051602081830303815290604052805190602001209050805f5260205f2090505f5b86811015610f6d575f888883818110610f3357610f3361255d565b90506020020135905082811115610f5657825f528060205260405f209250610f64565b805f528260205260405f2092505b50600101610f18565b50805f5414610faf5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b6044820152606401610792565b600885901c66ffffffffffffff165f8181526003602052604090205460ff87169080821c600116156110235760405162461bcd60e51b815260206004820152601760248201527f4d65737361676520616c72656164792072656c617965640000000000000000006044820152606401610792565b5f838152600360205260408082206001851b84179055516001600160a01b038916906110529089908990612571565b5f604051808303815f865af19150503d805f811461108b576040519150601f19603f3d011682016040523d82523d5f602084013e611090565b606091505b50509050806110e15760405162461bcd60e51b815260206004820152601760248201527f4661696c656420746f2063616c6c20636f6e74726163740000000000000000006044820152606401610792565b60405167ffffffffffffffff8a1681527f54303fab361bc52c2f1f56ace7351189582264f74ce47a6e7c3f478d64c429439060200160405180910390a15050505050505050505050565b61113d61042f3683900383018361238f565b5f83815260026020526040902054146111685760405162461bcd60e51b8152600401610792906124e1565b600261117a60c0830160a08401612580565b600281111561118b5761118b61240b565b146111cc5760405162461bcd60e51b815260206004820152601160248201527021b430b63632b733b2903330b4b632b21760791b6044820152606401610792565b5f82815260026020526040808220829055517f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f15061122593505060e0840191505060c083016123f0565b6001600160a01b03166108fc7f000000000000000000000000000000000000000000000000000000000000000090811502906040515f60405180830381858888f150505050505050565b611278816114c3565b5f83815260026020526040902054146112a35760405162461bcd60e51b8152600401610792906124e1565b60018160a0015160028111156112bb576112bb61240b565b146112f85760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b6044820152606401610792565b5f8281526002602052604081205560c08101516001600160a01b0316156113a1576040515f907f000000000000000000000000000000000000000000000000000000000000000080156108fc029183818181858288f150505060208301516040516001600160a01b0390911692507f000000000000000000000000000000000000000000000000000000000000000080156108fc029250905f818181858888f150505050505050565b60208101516040516001600160a01b03909116907f000000000000000000000000000000000000000000000000000000000000000080156108fc02915f818181858888f150505050505050565b6007546001600160a01b03163314611404575f80fd5b61140d816114c3565b5f83815260026020526040902054146114385760405162461bcd60e51b8152600401610792906124e1565b63ffffffff428116606083015243166080820152611455816114c3565b5f8381526002602052604080822092909255905183917f37b700b61b9b4710dddb0c3316b2be7ef6088ed4b1d7bfe0fb98be8f9a163e1691a25050565b5f6114bd7f0000000000000000000000000000000000000000000000000000000000000000836124c2565b92915050565b80516020808301516040808501516060860151608087015160a088015160c089015194515f986114f7989097969101612599565b604051602081830303815290604052805190602001209050919050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee35f3276040518163ffffffff1660e01b8152600401602060405180830381865afa158015611571573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115959190612460565b6001600160a01b031663ebea461d6040518163ffffffff1660e01b8152600401608060405180830381865afa1580156115d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115f4919061247b565b509250505060045481111561163e5760048190556040518181527f611c2e4a78552f908fb0eb2cc503efc1f947cde8574277ab3b0f10fdd510258b9060200160405180910390a150565b60045481101561170057600654156116b25760405162461bcd60e51b815260206004820152603160248201527f53657175656e636572206c696d697420646563726561736520726571756573746044820152701030b63932b0b23c903832b73234b7339760791b6064820152608401610792565b604080518082018252828152426020918201819052600584905560065590518281527fa552b382e128c9d0732f01f09502c18999aec5dce0ed78c5af0ea2274ce9bd7d910160405180910390a15b50565b610c6f838383611e80565b6007546001600160a01b03163314611724575f80fd5b6007546001600160a01b0316331461177e5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420546573746e6574204f70657261746f7200000000000000006044820152606401610792565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001547f000000000000000000000000000000000000000000000000000000000000000042816117f3576117f36124ae565b040311156118365760405162461bcd60e51b815260206004820152601060248201526f213934b233b29029b43aba3237bbb71760811b6044820152606401610792565b61183f816114c3565b5f838152600260205260409020541461186a5760405162461bcd60e51b8152600401610792906124e1565b60c08101516001600160a01b0316156118bc5760405162461bcd60e51b815260206004820152601460248201527321b630b4b69034b99031b430b63632b733b2b21760611b6044820152606401610792565b60015482111561190357600182905580515f556040518281527ff786e7f77ede00a02a5464f8f0555798f42ba99a4a920ef2778db8d75e4656f79060200160405180910390a15b600160a0820152611913816114c3565b5f928352600260205260409092209190915550565b7f00000000000000000000000000000000000000000000000000000000000000006001547f0000000000000000000000000000000000000000000000000000000000000000428161197b5761197b6124ae565b0403116119bc5760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b6044820152606401610792565b6119c5816114c3565b5f83815260026020526040902054146119f05760405162461bcd60e51b8152600401610792906124e1565b5f8160a001516002811115611a0757611a0761240b565b14611a465760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b6044820152606401610792565b60c08101516001600160a01b03161561072c5760208101516001600160a01b0316611ac9575f8281526002602052604080822082905560c083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b60c0810180515f909152611adc826114c3565b505f83815260026020526040516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001547f00000000000000000000000000000000000000000000000000000000000000004281611b8257611b826124ae565b040311611bc35760405162461bcd60e51b815260206004820152600f60248201526e213934b233b290293ab73734b7339760891b6044820152606401610792565b611bcc816114c3565b5f8381526002602052604090205414611bf75760405162461bcd60e51b8152600401610792906124e1565b5f8160a001516002811115611c0e57611c0e61240b565b14611c4d5760405162461bcd60e51b815260206004820152600f60248201526e21b630b4b6903932b9b7b63b32b21760891b6044820152606401610792565b60208101516001600160a01b03161561072c5760c08101516001600160a01b0316611cd1575f8281526002602090815260408083208390559083015190516001600160a01b03909116917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f150505050505050565b6020810180515f909152611ce4826114c3565b5f848152600260205260408082209290925590516001600160a01b038316917f000000000000000000000000000000000000000000000000000000000000000080156108fc02929091818181858888f15050505050505050565b5f816060015163ffffffff165f03611d5857506002919050565b7f0000000000000000000000000000000000000000000000000000000000000000826060015163ffffffff1642031015611d9457506003919050565b5f600c836060015163ffffffff16420381611db157611db16124ae565b608085015163ffffffff16919004019050437f000000000000000000000000000000000000000000000000000000000000000081830311611df55760019250611df9565b5f92505b50505b919050565b611e0b8282610ca4565b6040805160e0810182528281523360208201524263ffffffff16918101919091525f606082018190526080820181905260a0820181905260c0820152611e5183826113ee565b63ffffffff428116606083015243166080820152611e6f83826117a0565b600160a0820152610c6f838261126f565b611e89826114c3565b5f8481526002602052604090205414611eb45760405162461bcd60e51b8152600401610792906124e1565b7f0000000000000000000000000000000000000000000000000000000000000000341015611f245760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74206368616c6c656e6765206465706f7369742e006044820152606401610792565b60c08201516001600160a01b031615611f7f5760405162461bcd60e51b815260206004820152601960248201527f436c61696d20616c7265616479206368616c6c656e6765642e000000000000006044820152606401610792565b5f8260a001516002811115611f9657611f9661240b565b14611fe35760405162461bcd60e51b815260206004820152601760248201527f436c61696d20616c72656164792076657269666965642e0000000000000000006044820152606401610792565b6001600160a01b03811660c0830152611ffb826114c3565b5f848152600260205260408082209290925590516001600160a01b0383169185917fcfe09ca25f55d949baba5e280f5750c9ba4b9048fca5532f916067d433afe4d79190a37f0000000000000000000000000000000000000000000000000000000000000000341115610c6f575f6120937f000000000000000000000000000000000000000000000000000000000000000034612509565b604051909150339082156108fc029083905f818181858888f1505050505050505050565b6001600160a01b0381168114611700575f80fd5b8035611dfc816120b7565b803563ffffffff81168114611dfc575f80fd5b803560038110611dfc575f80fd5b5f60e08284031215612107575f80fd5b60405160e0810181811067ffffffffffffffff8211171561213657634e487b7160e01b5f52604160045260245ffd5b6040528235815290508061214c602084016120cb565b602082015261215d604084016120d6565b604082015261216e606084016120d6565b606082015261217f608084016120d6565b608082015261219060a084016120e9565b60a08201526121a160c084016120cb565b60c08201525092915050565b5f8061010083850312156121bf575f80fd5b823591506121d084602085016120f7565b90509250929050565b5f805f61012084860312156121ec575f80fd5b833592506020840135915061220485604086016120f7565b90509250925092565b5f6020828403121561221d575f80fd5b5035919050565b5f8060408385031215612235575f80fd5b50508035926020909101359150565b803567ffffffffffffffff81168114611dfc575f80fd5b5f8083601f84011261226b575f80fd5b50813567ffffffffffffffff811115612282575f80fd5b602083019150836020828501011115612299575f80fd5b9250929050565b5f805f805f80608087890312156122b5575f80fd5b863567ffffffffffffffff808211156122cc575f80fd5b818901915089601f8301126122df575f80fd5b8135818111156122ed575f80fd5b8a60208260051b8501011115612301575f80fd5b6020830198508097505061231760208a01612244565b955061232560408a016120cb565b9450606089013591508082111561233a575f80fd5b5061234789828a0161225b565b979a9699509497509295939492505050565b5f8082840361010081121561236c575f80fd5b8335925060e0601f1982011215612381575f80fd5b506020830190509250929050565b5f60e0828403121561239f575f80fd5b6123a983836120f7565b9392505050565b5f805f61012084860312156123c3575f80fd5b833592506123d485602086016120f7565b91506101008401356123e5816120b7565b809150509250925092565b5f60208284031215612400575f80fd5b81356123a9816120b7565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106124335761243361240b565b91905290565b634e487b7160e01b5f52601160045260245ffd5b808201808211156114bd576114bd612439565b5f60208284031215612470575f80fd5b81516123a9816120b7565b5f805f806080858703121561248e575f80fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b5f52601260045260245ffd5b5f826124dc57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252600e908201526d24b73b30b634b21031b630b4b69760911b604082015260600190565b818103818111156114bd576114bd612439565b60c085901b6001600160c01b0319168152606084901b6bffffffffffffffffffffffff191660088201528183601c8301375f9101601c019081529392505050565b634e487b7160e01b5f52603260045260245ffd5b818382375f9101908152919050565b5f60208284031215612590575f80fd5b6123a9826120e9565b8781525f6bffffffffffffffffffffffff19808960601b16602084015263ffffffff60e01b808960e01b166034850152808860e01b166038850152808760e01b16603c85015250600385106125f0576125f061240b565b60f89490941b60408301525060609190911b90911660418201526055019594505050505056fea2646970667358221220eb4b6a33e134826f8849734c57ec356151a29a7be52c4f63c56667d0af5233e264736f6c63430008180033", "devdoc": { "details": "Vea Outbox From arbitrumSepolia to Sepolia. Note: This contract is deployed on Sepolia. Note: This contract is permissioned for developer testing (devnet).", "events": { @@ -1389,7 +1389,7 @@ "storageLayout": { "storage": [ { - "astId": 38, + "astId": 446, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "stateRoot", "offset": 0, @@ -1397,7 +1397,7 @@ "type": "t_bytes32" }, { - "astId": 40, + "astId": 448, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "latestVerifiedEpoch", "offset": 0, @@ -1405,7 +1405,7 @@ "type": "t_uint256" }, { - "astId": 44, + "astId": 452, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "claimHashes", "offset": 0, @@ -1413,7 +1413,7 @@ "type": "t_mapping(t_uint256,t_bytes32)" }, { - "astId": 48, + "astId": 456, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "relayed", "offset": 0, @@ -1421,7 +1421,7 @@ "type": "t_mapping(t_uint256,t_bytes32)" }, { - "astId": 50, + "astId": 458, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "sequencerDelayLimit", "offset": 0, @@ -1429,15 +1429,15 @@ "type": "t_uint256" }, { - "astId": 53, + "astId": 461, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "sequencerDelayLimitDecreaseRequest", "offset": 0, "slot": "5", - "type": "t_struct(SequencerDelayLimitDecreaseRequest)58_storage" + "type": "t_struct(SequencerDelayLimitDecreaseRequest)466_storage" }, { - "astId": 3030, + "astId": 6618, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "devnetOperator", "offset": 0, @@ -1463,12 +1463,12 @@ "numberOfBytes": "32", "value": "t_bytes32" }, - "t_struct(SequencerDelayLimitDecreaseRequest)58_storage": { + "t_struct(SequencerDelayLimitDecreaseRequest)466_storage": { "encoding": "inplace", "label": "struct VeaOutboxArbToEth.SequencerDelayLimitDecreaseRequest", "members": [ { - "astId": 55, + "astId": 463, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "requestedsequencerDelayLimit", "offset": 0, @@ -1476,7 +1476,7 @@ "type": "t_uint256" }, { - "astId": 57, + "astId": 465, "contract": "src/devnets/arbitrumToEth/VeaOutboxArbToEthDevnet.sol:VeaOutboxArbToEthDevnet", "label": "timestamp", "offset": 0, From 258cb110d7eb02d075ab8aae9364a354518f08e7 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Fri, 9 Aug 2024 10:34:11 +0530 Subject: [PATCH 03/10] fix(devnet): subgraph deployments arbSep->Sep --- veascan-subgraph-inbox/src/VeaInbox.ts | 2 +- veascan-subgraph-inbox/subgraph.yaml | 4 ++-- veascan-subgraph-outbox/subgraph.yaml | 4 ++-- veascan-web/src/consts/bridges.ts | 30 +++++++++++++------------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/veascan-subgraph-inbox/src/VeaInbox.ts b/veascan-subgraph-inbox/src/VeaInbox.ts index 5b7343bb..bf2c62d5 100644 --- a/veascan-subgraph-inbox/src/VeaInbox.ts +++ b/veascan-subgraph-inbox/src/VeaInbox.ts @@ -5,7 +5,7 @@ import { SnapshotSaved, SnapshotSent, VeaInbox, -} from "../generated/VeaInboxArbToGnosis/VeaInbox"; +} from "../generated/VeaInbox/VeaInbox"; export function handleMessageSent(event: MessageSent): void { const snapshot = getCurrentSnapshot(); diff --git a/veascan-subgraph-inbox/subgraph.yaml b/veascan-subgraph-inbox/subgraph.yaml index d8cedc79..02033e93 100644 --- a/veascan-subgraph-inbox/subgraph.yaml +++ b/veascan-subgraph-inbox/subgraph.yaml @@ -8,9 +8,9 @@ dataSources: name: VeaInbox network: arbitrum-sepolia source: - address: "0x77e95F54032f467eC45c48C6affc203f93858783" + address: "0x0B5851fE2a931F619F73E739E5435C43976f1D68" abi: VeaInbox - startBlock: 18210847 + startBlock: 69673433 mapping: kind: ethereum/events apiVersion: 0.0.7 diff --git a/veascan-subgraph-outbox/subgraph.yaml b/veascan-subgraph-outbox/subgraph.yaml index a1ddd8a0..7df1148e 100644 --- a/veascan-subgraph-outbox/subgraph.yaml +++ b/veascan-subgraph-outbox/subgraph.yaml @@ -6,9 +6,9 @@ dataSources: name: VeaOutbox network: sepolia source: - address: "0x5AD255400913515C8DA7E82E6b8A109fA5c46135" + address: "0xb8BF3B6bd3E1a0Cc9E2dB77dd492503310514674" abi: VeaOutbox - startBlock: 5379614 + startBlock: 6458841 mapping: kind: ethereum/events apiVersion: 0.0.7 diff --git a/veascan-web/src/consts/bridges.ts b/veascan-web/src/consts/bridges.ts index 9b4410ee..8af6d225 100644 --- a/veascan-web/src/consts/bridges.ts +++ b/veascan-web/src/consts/bridges.ts @@ -1,7 +1,7 @@ import VeaInboxArbitrumSepolia from "@kleros/vea-contracts/deployments/arbitrumSepolia/VeaInboxArbToEthDevnet.json"; import VeaOutboxSepolia from "@kleros/vea-contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json"; -import VeaInboxArbitrumSepoliaChiado from "@kleros/vea-contracts/deployments/arbitrumSepolia/VeaInboxArbToGnosisDevnet.json"; -import VeaOutboxArbitrumSepoliaChiado from "@kleros/vea-contracts/deployments/chiado/VeaOutboxArbToGnosisDevnet.json"; +// import VeaInboxArbitrumSepoliaChiado from "@kleros/vea-contracts/deployments/arbitrumSepolia/VeaInboxArbToGnosisDevnet.json"; +// import VeaOutboxArbitrumSepoliaChiado from "@kleros/vea-contracts/deployments/chiado/VeaOutboxArbToGnosisDevnet.json"; import { Chain, arbitrumSepolia, @@ -42,22 +42,22 @@ export const bridges: IBridge[] = [ to: sepolia.id, inboxAddress: VeaInboxArbitrumSepolia.address as `0x${string}`, inboxEndpoint: - "https://api.studio.thegraph.com/query/67213/veascan-inbox-arb-sep-devnet/version/latest", + "https://api.studio.thegraph.com/query/85918/veascan-inbox-arb-sep-devnet/v0.8.0", outboxAddress: VeaOutboxSepolia.address as `0x${string}`, outboxEndpoint: - "https://api.studio.thegraph.com/query/67213/veascan-outbox-arb-sep-devnet/version/latest", - }, - { - id: 1, - from: arbitrumSepolia.id, - to: gnosisChiado.id, - inboxAddress: VeaInboxArbitrumSepoliaChiado.address as `0x${string}`, - inboxEndpoint: - "https://api.studio.thegraph.com/query/67213/veascan-inbox-arb-sep-chiado-devnet/version/latest", - outboxAddress: VeaOutboxArbitrumSepoliaChiado.address as `0x${string}`, - outboxEndpoint: - "https://api.studio.thegraph.com/query/67213/veascan-outbox-arb-chiado-devnet/version/latest", + "https://api.studio.thegraph.com/query/85918/veascan-outbox-arb-sep-devnet/v0.8.0", }, + // { + // id: 1, + // from: arbitrumSepolia.id, + // to: gnosisChiado.id, + // inboxAddress: VeaInboxArbitrumSepoliaChiado.address as `0x${string}`, + // inboxEndpoint: + // "https://api.studio.thegraph.com/query/67213/veascan-inbox-arb-sep-chiado-devnet/version/latest", + // outboxAddress: VeaOutboxArbitrumSepoliaChiado.address as `0x${string}`, + // outboxEndpoint: + // "https://api.studio.thegraph.com/query/67213/veascan-outbox-arb-chiado-devnet/version/latest", + // }, ]; export const getBridge = (id: number): IBridge => From 83b892cd30fb18fe42ab73b87bcfda9334bd6145 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Wed, 21 Aug 2024 11:43:29 +0530 Subject: [PATCH 04/10] chore(relayer-devnet): relayer subgraph and lightbulb switch address updated --- relayer-cli/src/devnetRelayExample.ts | 2 +- relayer-cli/src/utils/proof.ts | 4 ++-- relayer-cli/src/utils/relay.ts | 4 ++-- relayer-subgraph-inbox/subgraph.yaml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/relayer-cli/src/devnetRelayExample.ts b/relayer-cli/src/devnetRelayExample.ts index 90149d09..988ec222 100644 --- a/relayer-cli/src/devnetRelayExample.ts +++ b/relayer-cli/src/devnetRelayExample.ts @@ -23,7 +23,7 @@ const epochPeriod = 1800; // 30 min for (const chain_id of chain_ids) { let nonce = await initialize(chain_id); // This is libghtbulb switch address in arbitrum sepolia - const sender = "0x4A9EF2E97B780ea6E8DE3fD8acd4cBA8C061F173"; + const sender = "0x28d6D503F4c5734cD926E96b63C61527d975B382"; nonce = await relayAllFrom(chain_id, nonce, sender); if (nonce != null) await updateStateFile(chain_id, Math.floor(Date.now() / 1000), nonce); } diff --git a/relayer-cli/src/utils/proof.ts b/relayer-cli/src/utils/proof.ts index d7b35a7e..4f5a4483 100644 --- a/relayer-cli/src/utils/proof.ts +++ b/relayer-cli/src/utils/proof.ts @@ -5,7 +5,7 @@ const getMessageDataToRelay = async (chainid: number, nonce: number) => { const subgraph = getSubgraph(chainid); const result = await request( - `https://api.studio.thegraph.com/query/67213/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, `{ messageSents(first: 5, where: {nonce: ${nonce}}) { nonce @@ -39,7 +39,7 @@ const getProofAtCount = async (chainid: number, nonce: number, count: number): P try { const subgraph = getSubgraph(chainid); - const result = await request(`https://api.studio.thegraph.com/query/67213/${subgraph}/version/latest`, query); + const result = await request(`https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, query); const proof = []; diff --git a/relayer-cli/src/utils/relay.ts b/relayer-cli/src/utils/relay.ts index 0406beee..d2085c24 100644 --- a/relayer-cli/src/utils/relay.ts +++ b/relayer-cli/src/utils/relay.ts @@ -25,7 +25,7 @@ const getCount = async (veaOutbox: VeaOutboxArbToEth, chainid: number): Promise< const stateRoot = await veaOutbox.stateRoot(); const result = await request( - `https://api.studio.thegraph.com/query/67213/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, `{ snapshotSaveds(first: 1, where: { stateRoot: "${stateRoot}" }) { count @@ -119,7 +119,7 @@ const getNonceFrom = async (chainid: number, nonce: number, msgSender: string) = const subgraph = getSubgraph(chainid); const result = await request( - `https://api.studio.thegraph.com/query/67213/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, `{ messageSents(first: 1000, where: {nonce_gte: ${nonce}, msgSender_: {id: "${msgSender}"}}, orderBy: nonce, orderDirection: asc) { nonce diff --git a/relayer-subgraph-inbox/subgraph.yaml b/relayer-subgraph-inbox/subgraph.yaml index 8bcdba74..7c5c4117 100644 --- a/relayer-subgraph-inbox/subgraph.yaml +++ b/relayer-subgraph-inbox/subgraph.yaml @@ -6,9 +6,9 @@ dataSources: name: VeaInbox network: arbitrum-sepolia source: - address: "0x77e95F54032f467eC45c48C6affc203f93858783" + address: "0x0B5851fE2a931F619F73E739E5435C43976f1D68" abi: VeaInbox - startBlock: 18210847 + startBlock: 69673433 mapping: kind: ethereum/events apiVersion: 0.0.7 From f01e4f920d5eb4179c069c41c583713e75d74709 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Sat, 31 Aug 2024 12:17:34 +0530 Subject: [PATCH 05/10] feat(config): refactor env vars and constants --- relayer-cli/.env.dist | 4 +++ relayer-cli/src/consts/bridgeRoutes.ts | 45 ++++++++++++++++++++++++ relayer-cli/src/devnetRelayExample.ts | 1 - relayer-cli/src/state/11155111.json | 4 +++ relayer-cli/src/utils/proof.ts | 20 ++++------- relayer-cli/src/utils/relay.ts | 48 ++++++++++---------------- 6 files changed, 78 insertions(+), 44 deletions(-) create mode 100644 relayer-cli/src/consts/bridgeRoutes.ts create mode 100644 relayer-cli/src/state/11155111.json diff --git a/relayer-cli/.env.dist b/relayer-cli/.env.dist index b2df5802..8df04ca2 100644 --- a/relayer-cli/.env.dist +++ b/relayer-cli/.env.dist @@ -8,6 +8,10 @@ VEAINBOX_ARBSEPOLIA_TO_CHIADO_ADDRESS=0xAb53e341121448Ae259Da8fa17f216Cb0e21199C VEAOUTBOX_ARBSEPOLIA_TO_SEPOLIA_ADDRESS=0x906dE43dBef27639b1688Ac46532a16dc07Ce410 VEAOUTBOX_ARBSEPOLIA_TO_CHIADO_ADDRESS=0xAb53e341121448Ae259Da8fa17f216Cb0e21199C +# Subgraph endpoints, Example: "85918/vea-inbox-arb-sepolia-devnet/version/latest" +VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version +VEAINBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version + TRANSACTION_BATCHER_CONTRACT_ADDRESS_SEPOLIA=0xe7953da7751063d0a41ba727c32c762d3523ade8 TRANSACTION_BATCHER_CONTRACT_ADDRESS_CHIADO=0xcC0a08D4BCC5f91ee9a1587608f7a2975EA75d73 diff --git a/relayer-cli/src/consts/bridgeRoutes.ts b/relayer-cli/src/consts/bridgeRoutes.ts new file mode 100644 index 00000000..920914df --- /dev/null +++ b/relayer-cli/src/consts/bridgeRoutes.ts @@ -0,0 +1,45 @@ +// File for handling contants and configurations +require("dotenv").config(); + +interface IBridge { + chainId: number; + veaInbox: string; + veaOutbox: string; + batcher: string; + rpcOutbox: string; +} + +// Using destination chainId to get the route configuration. +const bridges: { [chainId: number]: IBridge } = { + 11155111: { + chainId: 11155111, + veaInbox: process.env.VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_ADDRESS, + veaOutbox: process.env.VEAOUTBOX_ARBSEPOLIA_TO_SEPOLIA_ADDRESS, + batcher: process.env.TRANSACTION_BATCHER_CONTRACT_ADDRESS_SEPOLIA, + rpcOutbox: process.env.RPC_SEPOLIA, + }, + 10200: { + chainId: 10200, + veaInbox: process.env.VEAINBOX_ARBSEPOLIA_TO_CHIADO_ADDRESS, + veaOutbox: process.env.VEAOUTBOX_ARBSEPOLIA_TO_CHIADO_ADDRESS, + batcher: process.env.TRANSACTION_BATCHER_CONTRACT_ADDRESS_CHIADO, + rpcOutbox: process.env.RPC_CHIADO, + }, +}; + +const getBridgeConfig = (chainId: number): IBridge | undefined => { + return bridges[chainId]; +}; + +const getInboxSubgraph = (chainId: number): string => { + switch (chainId) { + case 11155111: + return process.env.VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH; + case 10200: + return process.env.VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH; + default: + throw new Error("Invalid chainid"); + } +}; + +export { getBridgeConfig, getInboxSubgraph }; diff --git a/relayer-cli/src/devnetRelayExample.ts b/relayer-cli/src/devnetRelayExample.ts index 988ec222..a11292ed 100644 --- a/relayer-cli/src/devnetRelayExample.ts +++ b/relayer-cli/src/devnetRelayExample.ts @@ -1,6 +1,5 @@ import { relayAllFrom } from "./utils/relay"; import * as fs from "fs"; -require("dotenv").config(); // let chain_ids = [5, 10200]; let chain_ids = [11155111]; diff --git a/relayer-cli/src/state/11155111.json b/relayer-cli/src/state/11155111.json new file mode 100644 index 00000000..387cca5d --- /dev/null +++ b/relayer-cli/src/state/11155111.json @@ -0,0 +1,4 @@ +{ + "ts": 1725086460, + "nonce": "6" +} diff --git a/relayer-cli/src/utils/proof.ts b/relayer-cli/src/utils/proof.ts index 4f5a4483..15d0765e 100644 --- a/relayer-cli/src/utils/proof.ts +++ b/relayer-cli/src/utils/proof.ts @@ -1,11 +1,12 @@ import request from "graphql-request"; +import { getInboxSubgraph } from "../consts/bridgeRoutes"; const getMessageDataToRelay = async (chainid: number, nonce: number) => { try { - const subgraph = getSubgraph(chainid); + const subgraph = getInboxSubgraph(chainid); const result = await request( - `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/${subgraph}`, `{ messageSents(first: 5, where: {nonce: ${nonce}}) { nonce @@ -37,9 +38,9 @@ const getProofAtCount = async (chainid: number, nonce: number, count: number): P query += "}"; try { - const subgraph = getSubgraph(chainid); + const subgraph = getInboxSubgraph(chainid); - const result = await request(`https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, query); + const result = await request(`https://api.studio.thegraph.com/query/${subgraph}`, query); const proof = []; @@ -75,13 +76,4 @@ const getProofIndices = (nonce: number, count: number) => { return proof; }; -const getSubgraph = (chainid: number): string => { - switch (chainid) { - case 11155111: - return "vea-inbox-arb-sepolia-devnet"; - default: - throw new Error("Invalid chainid"); - } -}; - -export { getProofAtCount, getSubgraph, getMessageDataToRelay }; +export { getProofAtCount, getMessageDataToRelay }; diff --git a/relayer-cli/src/utils/relay.ts b/relayer-cli/src/utils/relay.ts index d2085c24..88e54fe6 100644 --- a/relayer-cli/src/utils/relay.ts +++ b/relayer-cli/src/utils/relay.ts @@ -1,7 +1,8 @@ -import { getProofAtCount, getMessageDataToRelay, getSubgraph } from "./proof"; +import { getProofAtCount, getMessageDataToRelay } from "./proof"; import { getVeaOutboxArbToEth } from "./ethers"; import request from "graphql-request"; -import { VeaInboxArbToEth, VeaOutboxArbToEth } from "@kleros/vea-contracts/typechain-types"; +import { VeaOutboxArbToEth } from "@kleros/vea-contracts/typechain-types"; +import { getBridgeConfig, getInboxSubgraph } from "../consts/bridgeRoutes"; const fs = require("fs"); require("dotenv").config(); @@ -10,22 +11,12 @@ const Web3 = require("web3"); const _batchedSend = require("web3-batched-send"); const _contract = require("@kleros/vea-contracts/deployments/sepolia/VeaOutboxArbToEthDevnet.json"); -const getParams = (chainid: number): [string, string, string] => { - if (chainid !== 11155111) throw new Error("Invalid chainid"); - - return [ - process.env.TRANSACTION_BATCHER_CONTRACT_ADDRESS_SEPOLIA, - process.env.VEAOUTBOX_ARBSEPOLIA_TO_SEPOLIA_ADDRESS, - process.env.RPC_SEPOLIA, - ]; -}; - const getCount = async (veaOutbox: VeaOutboxArbToEth, chainid: number): Promise => { - const subgraph = getSubgraph(chainid); + const subgraph = getInboxSubgraph(chainid); const stateRoot = await veaOutbox.stateRoot(); const result = await request( - `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/${subgraph}`, `{ snapshotSaveds(first: 1, where: { stateRoot: "${stateRoot}" }) { count @@ -39,9 +30,9 @@ const getCount = async (veaOutbox: VeaOutboxArbToEth, chainid: number): Promise< }; const relay = async (chainid: number, nonce: number) => { - const [TRANSACTION_BATCHER_CONTRACT_ADDRESS, VEAOUTBOX_ADDRESS, RPC_VEAOUTBOX] = getParams(chainid); + const routeParams = getBridgeConfig(chainid); - const veaOutbox = getVeaOutboxArbToEth(VEAOUTBOX_ADDRESS, process.env.PRIVATE_KEY, RPC_VEAOUTBOX); + const veaOutbox = getVeaOutboxArbToEth(routeParams.veaOutbox, process.env.PRIVATE_KEY, routeParams.rpcOutbox); const count = await getCount(veaOutbox, chainid); const proof = await getProofAtCount(chainid, nonce, count); @@ -52,13 +43,13 @@ const relay = async (chainid: number, nonce: number) => { }; const relayBatch = async (chainid: number, nonce: number, iterations: number) => { - const [TRANSACTION_BATCHER_CONTRACT_ADDRESS, VEAOUTBOX_ADDRESS, RPC_VEAOUTBOX] = getParams(chainid); + const routeParams = getBridgeConfig(chainid); - const web3 = new Web3(RPC_VEAOUTBOX); - const batchedSend = _batchedSend(web3, TRANSACTION_BATCHER_CONTRACT_ADDRESS, process.env.PRIVATE_KEY, 0); + const web3 = new Web3(routeParams.rpcOutbox); + const batchedSend = _batchedSend(web3, routeParams.rpcOutbox, process.env.PRIVATE_KEY, 0); - const contract = new web3.eth.Contract(_contract.abi, VEAOUTBOX_ADDRESS); - const veaOutbox = getVeaOutboxArbToEth(VEAOUTBOX_ADDRESS, process.env.PRIVATE_KEY, RPC_VEAOUTBOX); + const contract = new web3.eth.Contract(_contract.abi, routeParams.veaOutbox); + const veaOutbox = getVeaOutboxArbToEth(routeParams.veaOutbox, process.env.PRIVATE_KEY, routeParams.rpcOutbox); const count = await getCount(veaOutbox, chainid); let txns = []; @@ -73,24 +64,23 @@ const relayBatch = async (chainid: number, nonce: number, iterations: number) => }); } - console.log(txns); await batchedSend(txns); }; const relayAllFrom = async (chainid: number, nonce: number, msgSender: string): Promise => { - const [TRANSACTION_BATCHER_CONTRACT_ADDRESS, VEAOUTBOX_ADDRESS, RPC_VEAOUTBOX] = getParams(chainid); + const routeParams = getBridgeConfig(chainid); - const web3 = new Web3(RPC_VEAOUTBOX); + const web3 = new Web3(routeParams.rpcOutbox); const batchedSend = _batchedSend( web3, // Your web3 object. // The address of the transaction batcher contract you wish to use. The addresses for the different networks are listed below. If the one you need is missing, feel free to deploy it yourself and make a PR to save the address here for others to use. - TRANSACTION_BATCHER_CONTRACT_ADDRESS, + routeParams.batcher, process.env.PRIVATE_KEY, // The private key of the account you want to send transactions from. 0 // The debounce timeout period in milliseconds in which transactions are batched. ); - const contract = new web3.eth.Contract(_contract.abi, VEAOUTBOX_ADDRESS); - const veaOutbox = getVeaOutboxArbToEth(VEAOUTBOX_ADDRESS, process.env.PRIVATE_KEY, RPC_VEAOUTBOX); + const contract = new web3.eth.Contract(_contract.abi, routeParams.veaOutbox); + const veaOutbox = getVeaOutboxArbToEth(routeParams.veaOutbox, process.env.PRIVATE_KEY, routeParams.rpcOutbox); const count = await getCount(veaOutbox, chainid); if (!count) return null; @@ -116,10 +106,10 @@ const relayAllFrom = async (chainid: number, nonce: number, msgSender: string): const getNonceFrom = async (chainid: number, nonce: number, msgSender: string) => { try { - const subgraph = getSubgraph(chainid); + const subgraph = getInboxSubgraph(chainid); const result = await request( - `https://api.studio.thegraph.com/query/85918/${subgraph}/version/latest`, + `https://api.studio.thegraph.com/query/${subgraph}`, `{ messageSents(first: 1000, where: {nonce_gte: ${nonce}, msgSender_: {id: "${msgSender}"}}, orderBy: nonce, orderDirection: asc) { nonce From 69285d8d8a19a2410a3cfd5bac744781f94ebc5c Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Sat, 31 Aug 2024 12:35:53 +0530 Subject: [PATCH 06/10] fix(relayer): chiado subgraph Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- relayer-cli/src/consts/bridgeRoutes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/relayer-cli/src/consts/bridgeRoutes.ts b/relayer-cli/src/consts/bridgeRoutes.ts index 920914df..0f8cdf10 100644 --- a/relayer-cli/src/consts/bridgeRoutes.ts +++ b/relayer-cli/src/consts/bridgeRoutes.ts @@ -36,7 +36,7 @@ const getInboxSubgraph = (chainId: number): string => { case 11155111: return process.env.VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH; case 10200: - return process.env.VEAINBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH; + return process.env.VEAINBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH; default: throw new Error("Invalid chainid"); } From d302601281263fdab94f8aea2f92bacdb39f3878 Mon Sep 17 00:00:00 2001 From: Mani Brar Date: Mon, 2 Sep 2024 14:46:42 +0530 Subject: [PATCH 07/10] feat(config): veascan extracted subgraph vars --- .env.dist | 6 ++++++ veascan-web/src/consts/bridges.ts | 6 ++---- 2 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .env.dist diff --git a/.env.dist b/.env.dist new file mode 100644 index 00000000..843636d5 --- /dev/null +++ b/.env.dist @@ -0,0 +1,6 @@ +# Subgraph endpoints for veascan, Example: "85918/vea-inbox-arb-sepolia-devnet/version/latest" +VEASCAN_INBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version +VEASCAN_OUTBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version + +VEASCAN_INBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version +VEASCAN_OUTBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version \ No newline at end of file diff --git a/veascan-web/src/consts/bridges.ts b/veascan-web/src/consts/bridges.ts index 8af6d225..23ad267a 100644 --- a/veascan-web/src/consts/bridges.ts +++ b/veascan-web/src/consts/bridges.ts @@ -41,11 +41,9 @@ export const bridges: IBridge[] = [ from: arbitrumSepolia.id, to: sepolia.id, inboxAddress: VeaInboxArbitrumSepolia.address as `0x${string}`, - inboxEndpoint: - "https://api.studio.thegraph.com/query/85918/veascan-inbox-arb-sep-devnet/v0.8.0", + inboxEndpoint: `https://api.studio.thegraph.com/query/${process.env.VEASCAN_INBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH}`, outboxAddress: VeaOutboxSepolia.address as `0x${string}`, - outboxEndpoint: - "https://api.studio.thegraph.com/query/85918/veascan-outbox-arb-sep-devnet/v0.8.0", + outboxEndpoint: `https://api.studio.thegraph.com/query/${process.env.VEASCAN_OUTBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH}`, }, // { // id: 1, From a9416968ed1823eccbaf919e8ca75bab86f4d151 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Wed, 18 Sep 2024 13:36:33 +0100 Subject: [PATCH 08/10] fix: env file management for parcel --- .env.dist | 6 ------ veascan-web/.env.devnet.example | 6 ++++++ veascan-web/codegen.ts | 4 ++-- veascan-web/package.json | 18 +++++++++++----- veascan-web/scripts/runEnv.sh | 37 +++++++++++++++++++++++++++++++++ 5 files changed, 58 insertions(+), 13 deletions(-) delete mode 100644 .env.dist create mode 100644 veascan-web/.env.devnet.example create mode 100755 veascan-web/scripts/runEnv.sh diff --git a/.env.dist b/.env.dist deleted file mode 100644 index 843636d5..00000000 --- a/.env.dist +++ /dev/null @@ -1,6 +0,0 @@ -# Subgraph endpoints for veascan, Example: "85918/vea-inbox-arb-sepolia-devnet/version/latest" -VEASCAN_INBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version -VEASCAN_OUTBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version - -VEASCAN_INBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version -VEASCAN_OUTBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version \ No newline at end of file diff --git a/veascan-web/.env.devnet.example b/veascan-web/.env.devnet.example new file mode 100644 index 00000000..17568f15 --- /dev/null +++ b/veascan-web/.env.devnet.example @@ -0,0 +1,6 @@ +# Subgraph endpoints for veascan, Example: "85918/vea-inbox-arb-sepolia-devnet/version/latest" +export VEASCAN_INBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version +export VEASCAN_OUTBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH=11111/your-subgraph/version/your-version + +export VEASCAN_INBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version +export VEASCAN_OUTBOX_ARBSEPOLIA_TO_CHIADO_SUBGRAPH=11111/your-subgraph/version/your-version \ No newline at end of file diff --git a/veascan-web/codegen.ts b/veascan-web/codegen.ts index 0a48417a..3add9f74 100644 --- a/veascan-web/codegen.ts +++ b/veascan-web/codegen.ts @@ -3,8 +3,8 @@ import type { CodegenConfig } from "@graphql-codegen/cli"; const config: CodegenConfig = { overwrite: true, schema: [ - "https://api.studio.thegraph.com/query/67213/veascan-inbox-arb-sep-devnet/version/latest", - "https://api.studio.thegraph.com/query/67213/veascan-outbox-arb-sep-devnet/version/latest", + `https://api.studio.thegraph.com/query/${process.env.VEASCAN_INBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH}`, + `https://api.studio.thegraph.com/query/${process.env.VEASCAN_OUTBOX_ARBSEPOLIA_TO_SEPOLIA_SUBGRAPH}`, ], documents: "src/hooks/queries/*.ts", generates: { diff --git a/veascan-web/package.json b/veascan-web/package.json index 410e2d1d..260c1fe3 100644 --- a/veascan-web/package.json +++ b/veascan-web/package.json @@ -31,13 +31,21 @@ "queries": "./src/hooks/queries" }, "scripts": { - "clear": "rm -r .parcel-cache", - "clean": "rm dist/bundle.js", - "start": "parcel", - "build": "parcel build", + "clean": "rm -rf dist/bundle.js .parcel-cache", + "start": "yarn start-devnet", + "start-devnet": "scripts/runEnv.sh devnet 'yarn parcel'", + "start-testnet": "scripts/runEnv.sh testnet 'yarn parcel'", + "start-mainnet": "scripts/runEnv.sh mainnet 'yarn parcel'", + "build": "yarn build-devnet", + "build-devnet": "scripts/runEnv.sh devnet 'yarn parcel build'", + "build-testnet": "scripts/runEnv.sh testnet 'yarn parcel build'", + "build-mainnet": "scripts/runEnv.sh mainnet 'yarn parcel build'", "check-style": "eslint 'src/**/*.{js,jsx,ts,tsx}'", "check-types": "tsc --noEmit", - "generate": "graphql-codegen --config codegen.ts", + "generate": "yarn generate-devnet", + "generate-devnet": "scripts/runEnv.sh devnet 'yarn codegen'", + "generate-testnet": "scripts/runEnv.sh testnet 'yarn codegen'", + "generate-mainnet": "scripts/runEnv.sh mainnet 'yarn codegen'", "codegen": "graphql-codegen --config codegen.ts" }, "devDependencies": { diff --git a/veascan-web/scripts/runEnv.sh b/veascan-web/scripts/runEnv.sh new file mode 100755 index 00000000..0e88f13d --- /dev/null +++ b/veascan-web/scripts/runEnv.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +RED='\033[0;31m' +GREEN='\033[0;32m' +NC='\033[0m' + +deployment="$1" +shift +commands="$@" + +if [[ -z "$deployment" ]]; then + echo "usage: $(basename $0) " + exit 1 +fi + +valid_deployments=("local" "devnet" "testnet" "mainnet") +if [[ ! " ${valid_deployments[@]} " =~ " ${deployment} " ]]; then + echo "Invalid deployment option. Please choose either: ${valid_deployments[@]}." + exit 1 +fi + +function sourceEnvFile() { #envFile + envFile="$1" + if [ -f "$envFile" ]; then + echo -e "${GREEN}✔${NC} $(basename $envFile)" + . $envFile + else + echo -e "${RED}✖${NC} $(basename $envFile)" + fi +} + +envFile="$SCRIPT_DIR/../.env.${deployment}" +sourceEnvFile "$envFile" +sourceEnvFile "$envFile.public" + +(set -e; $commands) From 57a7cf19169dfdf5aa04f75b2e367eb3a0b09b1c Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Mon, 23 Sep 2024 16:40:23 +0100 Subject: [PATCH 09/10] fix: linting, frontend packages version bump --- .github/workflows/sonarcloud.yml | 7 +- .gitignore | 12 + .vscode/settings.json | 5 +- contracts/package.json | 8 +- relayer-cli/package.json | 2 +- validator-cli/package.json | 2 +- veascan-web/package.json | 32 +- veascan-web/scripts/runEnv.sh | 15 +- yarn.lock | 1754 +++++++++++++++++++----------- 9 files changed, 1143 insertions(+), 694 deletions(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 28c0228f..95de5684 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -20,16 +20,17 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@128a63446a954579617e875aaab7d2978154e969 # v2.4.0 + uses: step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1 with: egress-policy: audit - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 with: # Disabling shallow clone is recommended for improving relevancy of reporting fetch-depth: 0 + - name: SonarCloud Scan - uses: sonarsource/sonarcloud-github-action@9c0534dd12d09f22d69fbb301a1955249e49d910 # master + uses: sonarsource/sonarcloud-github-action@eb211723266fe8e83102bac7361f0a05c3ac1d1b # v3.0.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9e2de5fa..39391613 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,15 @@ +# misc +.DS_Store +.env +.env.test +.env.testnet +.env.devnet +.env.local +.env.development.local +.env.test.local +.env.production.local + + #------------------------------------ # FILE GENERATED AS FOLLOWS # curl -sL https://www.toptal.com/developers/gitignore/api/vim,node,visualstudiocode,yarn | sed 's|\(!.yarn/cache\)|#\1|' > .gitignore diff --git a/.vscode/settings.json b/.vscode/settings.json index c8545d49..d0f44b4f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,8 @@ ], "prettier.configPath": ".prettierrc.json", "eslint.alwaysShowStatus": true, - "eslint.packageManager": "yarn" + "eslint.packageManager": "yarn", + "shellcheck.customArgs": [ + "--external-sources" + ] } diff --git a/contracts/package.json b/contracts/package.json index c478adfb..655e6065 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -1,6 +1,6 @@ { "name": "@kleros/vea-contracts", - "version": "0.1.14", + "version": "0.4.0", "description": "Smart contracts for Vea", "repository": { "type": "git", @@ -79,7 +79,7 @@ "@typescript-eslint/parser": "^5.59.1", "chai": "^4.3.7", "chai-ethers": "^0.0.1", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "ethereumjs-util": "^7.1.5", "ethers": "^5.7.2", "hardhat": "^2.14.0", @@ -93,11 +93,11 @@ "hardhat-watcher": "^2.5.0", "json-schema": "^0.4.0", "mocha": "^10.2.0", - "node-fetch": "^3.3.1", + "node-fetch": "^3.3.2", "shelljs": "^0.8.5", "solhint": "^3.4.1", "solidity-coverage": "^0.8.2", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typechain": "^8.1.1", "typescript": "^4.9.5" } diff --git a/relayer-cli/package.json b/relayer-cli/package.json index c3737566..f3b21963 100644 --- a/relayer-cli/package.json +++ b/relayer-cli/package.json @@ -15,7 +15,7 @@ "dependencies": { "@kleros/vea-contracts": "workspace:^", "@typechain/ethers-v5": "^10.2.0", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "pm2": "^5.2.2", "typescript": "^4.9.5", "web3": "^1.10.4", diff --git a/validator-cli/package.json b/validator-cli/package.json index 376b9d6f..cfbf24ef 100644 --- a/validator-cli/package.json +++ b/validator-cli/package.json @@ -19,7 +19,7 @@ "@flashbots/ethers-provider-bundle": "^0.6.2", "@kleros/vea-contracts": "workspace:^", "@typechain/ethers-v5": "^10.2.0", - "dotenv": "^16.0.3", + "dotenv": "^16.4.5", "pm2": "^5.2.2", "typescript": "^4.9.5", "web3": "^1.10.4", diff --git a/veascan-web/package.json b/veascan-web/package.json index 260c1fe3..6dafa34a 100644 --- a/veascan-web/package.json +++ b/veascan-web/package.json @@ -15,7 +15,7 @@ "license": "MIT", "packageManager": "yarn@4.2.2", "volta": { - "node": "18.20.3", + "node": "18.20.4", "yarn": "4.2.2" }, "alias": { @@ -31,7 +31,7 @@ "queries": "./src/hooks/queries" }, "scripts": { - "clean": "rm -rf dist/bundle.js .parcel-cache", + "clean": "rm -rf dist/ .parcel-cache ../.parcel-cache", "start": "yarn start-devnet", "start-devnet": "scripts/runEnv.sh devnet 'yarn parcel'", "start-testnet": "scripts/runEnv.sh testnet 'yarn parcel'", @@ -54,11 +54,11 @@ "@graphql-codegen/client-preset": "^3.0.1", "@graphql-codegen/typescript": "^2.8.8", "@graphql-codegen/typescript-operations": "^2.5.13", - "@parcel/transformer-svg-react": "^2.8.3", - "@parcel/watcher": "^2.1.0", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.1", - "@types/styled-components": "^5.1.26", + "@parcel/transformer-svg-react": "^2.12.0", + "@parcel/watcher": "^2.4.1", + "@types/react": "^18.3.8", + "@types/react-dom": "^18.3.0", + "@types/styled-components": "^5.1.34", "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", "@typescript-eslint/utils": "^5.59.1", @@ -71,12 +71,12 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-security": "^1.7.1", "eslint-utils": "^3.0.0", - "parcel": "^2.8.3", + "parcel": "^2.12.0", "prettier": "^2.8.8", "typescript": "^4.9.5" }, "dependencies": { - "@kleros/ui-components-library": "^2.12.0", + "@kleros/ui-components-library": "^2.14.0", "@kleros/vea-contracts": "workspace:^", "@sentry/react": "^7.37.2", "@sentry/tracing": "^7.37.2", @@ -86,14 +86,14 @@ "ethers": "^5.7.2", "graphql": "^16.8.1", "graphql-request": "^6.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "react-is": "^18.2.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-is": "^18.3.1", "react-jazzicon": "^1.0.4", - "react-loading-skeleton": "^3.2.1", - "react-router-dom": "^6.11.0", - "react-use": "^17.4.0", + "react-loading-skeleton": "^3.5.0", + "react-router-dom": "^6.26.2", + "react-use": "^17.5.1", "styled-components": "^5.3.10", - "swr": "^2.1.3" + "swr": "^2.2.5" } } diff --git a/veascan-web/scripts/runEnv.sh b/veascan-web/scripts/runEnv.sh index 0e88f13d..6c57fb02 100755 --- a/veascan-web/scripts/runEnv.sh +++ b/veascan-web/scripts/runEnv.sh @@ -7,26 +7,27 @@ NC='\033[0m' deployment="$1" shift -commands="$@" +commands="$*" if [[ -z "$deployment" ]]; then - echo "usage: $(basename $0) " + echo "usage: $(basename "$0") " exit 1 fi valid_deployments=("local" "devnet" "testnet" "mainnet") -if [[ ! " ${valid_deployments[@]} " =~ " ${deployment} " ]]; then - echo "Invalid deployment option. Please choose either: ${valid_deployments[@]}." +if [[ ! " ${valid_deployments[*]} " =~ ${deployment} ]]; then + echo "Invalid deployment option. Please choose either: ${valid_deployments[*]}." exit 1 fi function sourceEnvFile() { #envFile envFile="$1" if [ -f "$envFile" ]; then - echo -e "${GREEN}✔${NC} $(basename $envFile)" - . $envFile + echo -e "${GREEN}✔${NC} $(basename "$envFile")" + # shellcheck source=SCRIPTDIR/../.env.devnet + . "$envFile" else - echo -e "${RED}✖${NC} $(basename $envFile)" + echo -e "${RED}✖${NC} $(basename "$envFile")" fi } diff --git a/yarn.lock b/yarn.lock index a7878f1d..2d41b9a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3163,6 +3163,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.4.15": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10/4ed6123217569a1484419ac53f6ea0d9f3b57e5b57ab30d7c267bdb27792a27eb0e4b08e84a2680aa55cc2f2b411ffd6ec3db01c44fdc6dc43aca4b55f8374fd + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:0.3.9": version: 0.3.9 resolution: "@jridgewell/trace-mapping@npm:0.3.9" @@ -3190,9 +3197,9 @@ __metadata: languageName: node linkType: hard -"@kleros/ui-components-library@npm:^2.12.0": - version: 2.12.0 - resolution: "@kleros/ui-components-library@npm:2.12.0" +"@kleros/ui-components-library@npm:^2.14.0": + version: 2.14.0 + resolution: "@kleros/ui-components-library@npm:2.14.0" dependencies: "@datepicker-react/hooks": "npm:^2.8.4" "@swc/helpers": "npm:^0.3.2" @@ -3209,7 +3216,7 @@ __metadata: react-dom: ^18.0.0 react-is: ^18.0.0 styled-components: ^5.3.3 - checksum: 10/9c53e9ce217a5dd6c0f5dc1b19c8c14fb6f4843f5cf7a0eb1b1ae9561ead583c1bcf5bc2687e7f678007363768be3de95f5d573298b00b965d13a563c4b59495 + checksum: 10/ea5d9689562a6aa963eda44ad94336d4152c5d0f46c81e70a0c271a09fb93e9c9fd7b4ee609b1f6e1eb6e18f557f1cc0b132c3ac10d9f5af6ffc911ecb71d9da languageName: node linkType: hard @@ -3229,7 +3236,7 @@ __metadata: "@typescript-eslint/parser": "npm:^5.59.1" chai: "npm:^4.3.7" chai-ethers: "npm:^0.0.1" - dotenv: "npm:^16.0.3" + dotenv: "npm:^16.4.5" ethereumjs-util: "npm:^7.1.5" ethers: "npm:^5.7.2" hardhat: "npm:^2.14.0" @@ -3243,11 +3250,11 @@ __metadata: hardhat-watcher: "npm:^2.5.0" json-schema: "npm:^0.4.0" mocha: "npm:^10.2.0" - node-fetch: "npm:^3.3.1" + node-fetch: "npm:^3.3.2" shelljs: "npm:^0.8.5" solhint: "npm:^3.4.1" solidity-coverage: "npm:^0.8.2" - ts-node: "npm:^10.9.1" + ts-node: "npm:^10.9.2" typechain: "npm:^8.1.1" typescript: "npm:^4.9.5" languageName: unknown @@ -3259,7 +3266,7 @@ __metadata: dependencies: "@kleros/vea-contracts": "workspace:^" "@typechain/ethers-v5": "npm:^10.2.0" - dotenv: "npm:^16.0.3" + dotenv: "npm:^16.4.5" pm2: "npm:^5.2.2" typescript: "npm:^4.9.5" web3: "npm:^1.10.4" @@ -3287,7 +3294,7 @@ __metadata: "@flashbots/ethers-provider-bundle": "npm:^0.6.2" "@kleros/vea-contracts": "workspace:^" "@typechain/ethers-v5": "npm:^10.2.0" - dotenv: "npm:^16.0.3" + dotenv: "npm:^16.4.5" pm2: "npm:^5.2.2" typescript: "npm:^4.9.5" web3: "npm:^1.10.4" @@ -3323,15 +3330,15 @@ __metadata: "@graphql-codegen/client-preset": "npm:^3.0.1" "@graphql-codegen/typescript": "npm:^2.8.8" "@graphql-codegen/typescript-operations": "npm:^2.5.13" - "@kleros/ui-components-library": "npm:^2.12.0" + "@kleros/ui-components-library": "npm:^2.14.0" "@kleros/vea-contracts": "workspace:^" - "@parcel/transformer-svg-react": "npm:^2.8.3" - "@parcel/watcher": "npm:^2.1.0" + "@parcel/transformer-svg-react": "npm:^2.12.0" + "@parcel/watcher": "npm:^2.4.1" "@sentry/react": "npm:^7.37.2" "@sentry/tracing": "npm:^7.37.2" - "@types/react": "npm:^18.2.0" - "@types/react-dom": "npm:^18.2.1" - "@types/styled-components": "npm:^5.1.26" + "@types/react": "npm:^18.3.8" + "@types/react-dom": "npm:^18.3.0" + "@types/styled-components": "npm:^5.1.34" "@typescript-eslint/eslint-plugin": "npm:^5.59.1" "@typescript-eslint/parser": "npm:^5.59.1" "@typescript-eslint/utils": "npm:^5.59.1" @@ -3350,17 +3357,17 @@ __metadata: ethers: "npm:^5.7.2" graphql: "npm:^16.8.1" graphql-request: "npm:^6.1.0" - parcel: "npm:^2.8.3" + parcel: "npm:^2.12.0" prettier: "npm:^2.8.8" - react: "npm:^18.2.0" - react-dom: "npm:^18.2.0" - react-is: "npm:^18.2.0" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + react-is: "npm:^18.3.1" react-jazzicon: "npm:^1.0.4" - react-loading-skeleton: "npm:^3.2.1" - react-router-dom: "npm:^6.11.0" - react-use: "npm:^17.4.0" + react-loading-skeleton: "npm:^3.5.0" + react-router-dom: "npm:^6.26.2" + react-use: "npm:^17.5.1" styled-components: "npm:^5.3.10" - swr: "npm:^2.1.3" + swr: "npm:^2.2.5" typescript: "npm:^4.9.5" languageName: unknown linkType: soft @@ -3381,44 +3388,44 @@ __metadata: languageName: node linkType: hard -"@lmdb/lmdb-darwin-arm64@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-darwin-arm64@npm:2.5.2" +"@lmdb/lmdb-darwin-arm64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-darwin-arm64@npm:2.8.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@lmdb/lmdb-darwin-x64@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-darwin-x64@npm:2.5.2" +"@lmdb/lmdb-darwin-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-darwin-x64@npm:2.8.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@lmdb/lmdb-linux-arm64@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-linux-arm64@npm:2.5.2" +"@lmdb/lmdb-linux-arm64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-arm64@npm:2.8.5" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@lmdb/lmdb-linux-arm@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-linux-arm@npm:2.5.2" +"@lmdb/lmdb-linux-arm@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-arm@npm:2.8.5" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@lmdb/lmdb-linux-x64@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-linux-x64@npm:2.5.2" +"@lmdb/lmdb-linux-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-linux-x64@npm:2.8.5" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@lmdb/lmdb-win32-x64@npm:2.5.2": - version: 2.5.2 - resolution: "@lmdb/lmdb-win32-x64@npm:2.5.2" +"@lmdb/lmdb-win32-x64@npm:2.8.5": + version: 2.8.5 + resolution: "@lmdb/lmdb-win32-x64@npm:2.8.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3466,44 +3473,44 @@ __metadata: languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-arm64@npm:3.0.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-darwin-x64@npm:3.0.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm64@npm:3.0.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-linux-arm@npm:3.0.3" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-linux-x64@npm:3.0.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2": - version: 3.0.2 - resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.2" +"@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.3": + version: 3.0.3 + resolution: "@msgpackr-extract/msgpackr-extract-win32-x64@npm:3.0.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4038,110 +4045,112 @@ __metadata: languageName: node linkType: hard -"@parcel/bundler-default@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/bundler-default@npm:2.8.3" +"@parcel/bundler-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/bundler-default@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/graph": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/graph": "npm:3.2.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" - checksum: 10/1305f81da166bc6fecf4e459513ef48bee2e831aa281abb6740ba656440a8936e42319ee95b6c3dd17e79c89ed3eca4366aa0b766293d2e866947dc057a2208a + checksum: 10/0c70e43d42bd3e2cf38aa19a6d4bc6b9f0fdaac84b4579b7186e55b6b47faf7d7c50ac4d0b9f50215916f4436ec335a45bda3b6025c0506fbf16525b2d592ff5 languageName: node linkType: hard -"@parcel/cache@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/cache@npm:2.8.3" +"@parcel/cache@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/cache@npm:2.12.0" dependencies: - "@parcel/fs": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - lmdb: "npm:2.5.2" + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + lmdb: "npm:2.8.5" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/174fb3ff3fb1bae5e323231775dd35ab6ab31a7d8f2e8a2da9b96487de8aa5a56f9a1d728c72a6c3a15c7f2d93cf26e9b4245974a955ddad77a223d2b4aa6cc7 + "@parcel/core": ^2.12.0 + checksum: 10/370be28d05522f397e37ab869aa7cfc355b698186bbd3c8393eea175db2634e3cb5a574180e9c1e98830d5c9c2d89335f99ae09bc8127ebd2c41120913164b37 languageName: node linkType: hard -"@parcel/codeframe@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/codeframe@npm:2.8.3" +"@parcel/codeframe@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/codeframe@npm:2.12.0" dependencies: chalk: "npm:^4.1.0" - checksum: 10/6bb1635202e788b6e03105d025f3bff884f68cf91ebb65dae937cea206990669b4bdc361089040c4865867794b2187f522369f863523b0d5198bbc7f2722d7bf - languageName: node - linkType: hard - -"@parcel/compressor-raw@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/compressor-raw@npm:2.8.3" - dependencies: - "@parcel/plugin": "npm:2.8.3" - checksum: 10/ca3b8a4f60e5193cffaa8041e709513df9c6cb54f32c9d20fef993a9af2d84f1e2d8bf8f4092220a8abaec24679498f854e683511876187f35b4f94a5852cf85 - languageName: node - linkType: hard - -"@parcel/config-default@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/config-default@npm:2.8.3" - dependencies: - "@parcel/bundler-default": "npm:2.8.3" - "@parcel/compressor-raw": "npm:2.8.3" - "@parcel/namer-default": "npm:2.8.3" - "@parcel/optimizer-css": "npm:2.8.3" - "@parcel/optimizer-htmlnano": "npm:2.8.3" - "@parcel/optimizer-image": "npm:2.8.3" - "@parcel/optimizer-svgo": "npm:2.8.3" - "@parcel/optimizer-terser": "npm:2.8.3" - "@parcel/packager-css": "npm:2.8.3" - "@parcel/packager-html": "npm:2.8.3" - "@parcel/packager-js": "npm:2.8.3" - "@parcel/packager-raw": "npm:2.8.3" - "@parcel/packager-svg": "npm:2.8.3" - "@parcel/reporter-dev-server": "npm:2.8.3" - "@parcel/resolver-default": "npm:2.8.3" - "@parcel/runtime-browser-hmr": "npm:2.8.3" - "@parcel/runtime-js": "npm:2.8.3" - "@parcel/runtime-react-refresh": "npm:2.8.3" - "@parcel/runtime-service-worker": "npm:2.8.3" - "@parcel/transformer-babel": "npm:2.8.3" - "@parcel/transformer-css": "npm:2.8.3" - "@parcel/transformer-html": "npm:2.8.3" - "@parcel/transformer-image": "npm:2.8.3" - "@parcel/transformer-js": "npm:2.8.3" - "@parcel/transformer-json": "npm:2.8.3" - "@parcel/transformer-postcss": "npm:2.8.3" - "@parcel/transformer-posthtml": "npm:2.8.3" - "@parcel/transformer-raw": "npm:2.8.3" - "@parcel/transformer-react-refresh-wrap": "npm:2.8.3" - "@parcel/transformer-svg": "npm:2.8.3" + checksum: 10/1544d4012d5bf21aff066d95f1192800b1a6b4e9cec51c5e6df9d93117bd0e8bfebeefd364750a3ab9b4ae660341ec968674c5a7ca9be516fb57b2afac387f1a + languageName: node + linkType: hard + +"@parcel/compressor-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/compressor-raw@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10/16c56704f33a91f7694a1a6b7ab157d731331123cbb32faf1ab09356327f7214fd2eb3c54babc120f7f41dded8742a6e58b524b5f410d3ef1bc47aaf47bc75c8 + languageName: node + linkType: hard + +"@parcel/config-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/config-default@npm:2.12.0" + dependencies: + "@parcel/bundler-default": "npm:2.12.0" + "@parcel/compressor-raw": "npm:2.12.0" + "@parcel/namer-default": "npm:2.12.0" + "@parcel/optimizer-css": "npm:2.12.0" + "@parcel/optimizer-htmlnano": "npm:2.12.0" + "@parcel/optimizer-image": "npm:2.12.0" + "@parcel/optimizer-svgo": "npm:2.12.0" + "@parcel/optimizer-swc": "npm:2.12.0" + "@parcel/packager-css": "npm:2.12.0" + "@parcel/packager-html": "npm:2.12.0" + "@parcel/packager-js": "npm:2.12.0" + "@parcel/packager-raw": "npm:2.12.0" + "@parcel/packager-svg": "npm:2.12.0" + "@parcel/packager-wasm": "npm:2.12.0" + "@parcel/reporter-dev-server": "npm:2.12.0" + "@parcel/resolver-default": "npm:2.12.0" + "@parcel/runtime-browser-hmr": "npm:2.12.0" + "@parcel/runtime-js": "npm:2.12.0" + "@parcel/runtime-react-refresh": "npm:2.12.0" + "@parcel/runtime-service-worker": "npm:2.12.0" + "@parcel/transformer-babel": "npm:2.12.0" + "@parcel/transformer-css": "npm:2.12.0" + "@parcel/transformer-html": "npm:2.12.0" + "@parcel/transformer-image": "npm:2.12.0" + "@parcel/transformer-js": "npm:2.12.0" + "@parcel/transformer-json": "npm:2.12.0" + "@parcel/transformer-postcss": "npm:2.12.0" + "@parcel/transformer-posthtml": "npm:2.12.0" + "@parcel/transformer-raw": "npm:2.12.0" + "@parcel/transformer-react-refresh-wrap": "npm:2.12.0" + "@parcel/transformer-svg": "npm:2.12.0" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/08c700a7a253f39e84e1d341b3e0f558a2410bb27bf8a128113d8d157c32a7ef6b6ebd95e2c26d9f35c1040b98ff229ab56782247746189b4c41b925d1efd251 + "@parcel/core": ^2.12.0 + checksum: 10/72877c5dc432d6f6a8ffe8dba1342a6c0c2f615d9346f78f654adc61b62cecb4cc425726ee7a088d86894742397b4fb25cfeee7abd1ad6cbe2cfd5d77cd5a781 languageName: node linkType: hard -"@parcel/core@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/core@npm:2.8.3" +"@parcel/core@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/core@npm:2.12.0" dependencies: "@mischnic/json-sourcemap": "npm:^0.1.0" - "@parcel/cache": "npm:2.8.3" - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/events": "npm:2.8.3" - "@parcel/fs": "npm:2.8.3" - "@parcel/graph": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/package-manager": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/cache": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/graph": "npm:3.2.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/profiler": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - "@parcel/workers": "npm:2.8.3" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" abortcontroller-polyfill: "npm:^1.1.9" base-x: "npm:^3.0.8" browserslist: "npm:^4.6.6" @@ -4149,343 +4158,374 @@ __metadata: dotenv: "npm:^7.0.0" dotenv-expand: "npm:^5.1.0" json5: "npm:^2.2.0" - msgpackr: "npm:^1.5.4" + msgpackr: "npm:^1.9.9" nullthrows: "npm:^1.1.1" - semver: "npm:^5.7.1" - checksum: 10/fa1eb3382d3253b7c816d22b58c1c51afecd268d77df2bff29cf93cbc72fade177b6f204c8c5d664ffcffc0ee3e7b643a0db57412e9515f4aa61e2fd6ada791e + semver: "npm:^7.5.2" + checksum: 10/6e7774c0c3bc58e6062efb6a3e4fc484b352e243c1d00747fd3158fb93fc4de2bd636b2e23ceb0017a67644c1e3261a186c6883eae454895ea892c5daa332aa9 languageName: node linkType: hard -"@parcel/diagnostic@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/diagnostic@npm:2.8.3" +"@parcel/diagnostic@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/diagnostic@npm:2.12.0" dependencies: "@mischnic/json-sourcemap": "npm:^0.1.0" nullthrows: "npm:^1.1.1" - checksum: 10/407cf8b39ef595694911a1734e60644b99fad4c7b21158623c60788a31776cec79bac0345431661fcd39e07d61cee15e8241873223f7c697f1d8d1e142f608cd - languageName: node - linkType: hard - -"@parcel/events@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/events@npm:2.8.3" - checksum: 10/292570c1b4da139a97658c95fa5a6d64360babd85dde4346dd3203744e46ccdb6561f46b5fc55dc1f2e4210fa569d81496a4dcba3bb799ec56b8bc6e5ee28df2 + checksum: 10/f6df95932f2c0f37ecd9b3ede6bd4fb13a0ea40ac50bab1792153b79de4eeacbba5e5000b16d330f7709b2a91a71e06232cdb533bfc5a96db901c2c872a0ce7c languageName: node linkType: hard -"@parcel/fs-search@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/fs-search@npm:2.8.3" - dependencies: - detect-libc: "npm:^1.0.3" - checksum: 10/bacfdeb01e55ec94f50a4b8dc052698c8116c7a28c15353a5112e123affbe332d7a30ddafc94b1c52563b56ec20a5f365dffb57dd744e22d55ff7afa509c986a +"@parcel/events@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/events@npm:2.12.0" + checksum: 10/7ced4b53f772d55a3a71cc7b8f8f6707fb87c9a2318a80c4a01398cf5b0e9be8c949fed62fe20d3edeb3449e1f6fe64db7fbb0a54378ea42aa79fb216d2c29fa languageName: node linkType: hard -"@parcel/fs@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/fs@npm:2.8.3" +"@parcel/fs@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/fs@npm:2.12.0" dependencies: - "@parcel/fs-search": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/rust": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" "@parcel/watcher": "npm:^2.0.7" - "@parcel/workers": "npm:2.8.3" + "@parcel/workers": "npm:2.12.0" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/3f599fdb2feb801d6b42f8c97a2e98707f38d7195b9a273d69d45e62fe41d0a26787ee97583f196703df7a35aadefeedf70c70457cd945bf900daf97bd7bd8c3 + "@parcel/core": ^2.12.0 + checksum: 10/1793a6b06fc63f35eef426239e5ca95d0e71f834596a6a5e142c97e010571b0b3c7e96e1851d9b6639695926968af7df92ac05980497b4717db919666860699f languageName: node linkType: hard -"@parcel/graph@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/graph@npm:2.8.3" +"@parcel/graph@npm:3.2.0": + version: 3.2.0 + resolution: "@parcel/graph@npm:3.2.0" dependencies: nullthrows: "npm:^1.1.1" - checksum: 10/9199ec7a8ce4a26f20e8b3ab57e40e4dbb391434607ef6de8786258d2c1ed754dfb320216ed4e80645e55fa6fdbb876c2d623e2b8f57e2407a4b85d4a9e5f7e4 + checksum: 10/fabfb3c68a6bb8ff5b8e9891f39e1086d46c6c84e60642bb6c22824d4abad83a1450eb1e027dcecacc2315402c38e251ca7558a6f99eac3014b05a0cb779b590 languageName: node linkType: hard -"@parcel/hash@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/hash@npm:2.8.3" - dependencies: - detect-libc: "npm:^1.0.3" - xxhash-wasm: "npm:^0.4.2" - checksum: 10/713c5b3b803f83a08b6a575cd5d00234eec45e57e4f802d36cce4e0389e47bf5b1fa53f420d2dd2d402203019e12664d2672ecd12287982f6cacb6192a2f1d7f - languageName: node - linkType: hard - -"@parcel/logger@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/logger@npm:2.8.3" +"@parcel/logger@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/logger@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/events": "npm:2.8.3" - checksum: 10/c0d1e915f647b2091eeb673d54f04b2939dfa6b5fb2a73fb2f7b2c4f836b7fb300f05a41929a10ac52fcea0a17f8a694b4a0a978863034d86cfac4da2a4c3676 + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + checksum: 10/51e26a813667f563827754d11e019d962e165f4ae9ea44ac78a6892c5032337dfea90e0bcb0f040697295870e3b35d65499f244912fe9ff0370a9588cc31533e languageName: node linkType: hard -"@parcel/markdown-ansi@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/markdown-ansi@npm:2.8.3" +"@parcel/markdown-ansi@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/markdown-ansi@npm:2.12.0" dependencies: chalk: "npm:^4.1.0" - checksum: 10/894760b60831b2b6fae40f56b97d785e64287b8681ce3a382e746033d7fa5b02e72a975485b17c7d134dd8914627812cfd7b024bd9be699e66bedd2cc0d47584 + checksum: 10/a4b154fa9bf058717046cc9a9bcd9456c86b6876fb58aa12489049d52b24e0b604f5729c272ed10cd25ac1bbb20834f58a4cd90304f2fdd873089c0108dd2795 languageName: node linkType: hard -"@parcel/namer-default@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/namer-default@npm:2.8.3" +"@parcel/namer-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/namer-default@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" nullthrows: "npm:^1.1.1" - checksum: 10/a024e578eeb53eb6d45a7dd2e3866f34e7cb50ec7860d16cc771a2fc3504af321316e8a54f34ddf1882d00ebb2f54d8cdd8cfe786b4f2c65a55ae74a9f3222e5 + checksum: 10/6228422a24e66b587f32d9e736cd4ef777bbb7225aaf681ca7a94897ec5f73ec2f61c059d712d849fadbac6ce8f3a252c5b6ccaa95e77eff27bbb6b156dd678d languageName: node linkType: hard -"@parcel/node-resolver-core@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/node-resolver-core@npm:2.8.3" +"@parcel/node-resolver-core@npm:3.3.0": + version: 3.3.0 + resolution: "@parcel/node-resolver-core@npm:3.3.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@mischnic/json-sourcemap": "npm:^0.1.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" - semver: "npm:^5.7.1" - checksum: 10/1ab9024bb34393dda7ad5a6b77359016e6ace24d33d144726f1a3328f56fe54fc5165af16dc6f7ed4335bb279d200ea79ec3446bf841bd05105adf7778d7b9b8 + semver: "npm:^7.5.2" + checksum: 10/ab0783ac2cd8c6483f923d24be34b5ae2489c48fa1b570b3ba1516f14966a619079621812c69d798db65b8aa61b28b4cac58bde04c95ba8049efd6effb5589ef languageName: node linkType: hard -"@parcel/optimizer-css@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/optimizer-css@npm:2.8.3" +"@parcel/optimizer-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-css@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/utils": "npm:2.12.0" browserslist: "npm:^4.6.6" - lightningcss: "npm:^1.16.1" + lightningcss: "npm:^1.22.1" nullthrows: "npm:^1.1.1" - checksum: 10/333b2f8e5cd67b61bc16d9462c47d40878043230d7b36b3868d0f5d08c7bec291a0d644d9c757cc5abe4bfdf1bb731347913029d104e4a1be3e1229ec16ea356 + checksum: 10/51dedb63e3521f112e676ce55fb90e60b78104cd681dca35a5253fee615274bc793806d51ca21f877a92b159f1f0422a7c8324bf276958bc6096857a850e4671 languageName: node linkType: hard -"@parcel/optimizer-htmlnano@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/optimizer-htmlnano@npm:2.8.3" +"@parcel/optimizer-htmlnano@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-htmlnano@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" htmlnano: "npm:^2.0.0" nullthrows: "npm:^1.1.1" posthtml: "npm:^0.16.5" svgo: "npm:^2.4.0" - checksum: 10/ca1cab7b1ecc16f209ad867fbdd8b2f446fd831d8688db068491fa22786a5aa3a0debb4290e0f003830c6b06c6f3a4c3a3cd9cdb033e7fa6cded8a19887d5f23 + checksum: 10/64e571f56f959c4cf1fd724e3b50e741b57f90acf035ca5a6908cf7186c42993bfb372db9ac39f9a9dd9bd57be4bba12a527da451893547f6da27db55d63ff13 languageName: node linkType: hard -"@parcel/optimizer-image@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/optimizer-image@npm:2.8.3" +"@parcel/optimizer-image@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-image@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - "@parcel/workers": "npm:2.8.3" - detect-libc: "npm:^1.0.3" - checksum: 10/4c86cba5f207e79d6c9f330edaab037fa0565d9b9caf896cbecbef59e28e3e99c3cc9f2b1b847a7feaf67e4d001ca57732430518428d37dda5d1a7eff024a3cc + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + peerDependencies: + "@parcel/core": ^2.12.0 + checksum: 10/7d28379bf1619d6ea0c70fbfef8b6b05941ac2cc0c1de46f2639ec5c40b53a984985538dfeefd35ba20cde31778502631ace1294c9bc0bcce36607ac53c5a3a8 languageName: node linkType: hard -"@parcel/optimizer-svgo@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/optimizer-svgo@npm:2.8.3" +"@parcel/optimizer-svgo@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-svgo@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" svgo: "npm:^2.4.0" - checksum: 10/22904fc8f167ef40f97dba03516ef63ccdab020cccf74a9274a39f76e304a3dbf8d9e866e792eea18ee4c97bfedea26af6c2ced4e0ae6bd4573343848edef1e7 + checksum: 10/044779d5b8df1193404faa5c2feeeecbf2d002376304247c7beea8f82bb0194d97ebb6cb26c066eeaab8bbe58de61bc7d983d84f114a58da52079ada0a19a918 languageName: node linkType: hard -"@parcel/optimizer-terser@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/optimizer-terser@npm:2.8.3" +"@parcel/optimizer-swc@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/optimizer-swc@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/utils": "npm:2.12.0" + "@swc/core": "npm:^1.3.36" nullthrows: "npm:^1.1.1" - terser: "npm:^5.2.0" - checksum: 10/98796d092f9277e5db2249a2e2cf140b210ecfee67253d15eddaa3936b0125bcfd4e996c873bfb4fda18fb5e8526c9c9c31763ae9f46282c0893abcff24431ca + checksum: 10/1fc670acc169530b94acb5fe604f5e032980210d37eac44afdca68ef54315a1706bd64e0f3e2c5663111a5a75a97056f4cf873955069742d85794013c72b6bf6 languageName: node linkType: hard -"@parcel/package-manager@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/package-manager@npm:2.8.3" - dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/fs": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - "@parcel/workers": "npm:2.8.3" - semver: "npm:^5.7.1" +"@parcel/package-manager@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/package-manager@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/node-resolver-core": "npm:3.3.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + "@swc/core": "npm:^1.3.36" + semver: "npm:^7.5.2" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/eba17c8c2748e385f0b2bc9d901b76d180a2e8220cf60a55f818f56a510cdb3b69a90bd080ce2a23a6dc9abdef743f60155bcf1a8002c580fd5daaaa4d7c183d + "@parcel/core": ^2.12.0 + checksum: 10/26df14ba094364fef1148cd50d9679bab4e4bfcec0a2808d8550229f2ab81001a5bd14702c46669d1b74bf0cd57f92bc6495d4c826cb50e24f7216a8f39e2563 languageName: node linkType: hard -"@parcel/packager-css@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/packager-css@npm:2.8.3" +"@parcel/packager-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-css@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/utils": "npm:2.12.0" + lightningcss: "npm:^1.22.1" nullthrows: "npm:^1.1.1" - checksum: 10/10720a8028d9f59339568e64a59a26351b8db0cb43a1a3489d01ca703557088f9a16a1b72c65a20606160f0ad26e57836da582e1a84e4dbc786b25b938455109 + checksum: 10/9451161e59fff2aa6f1e47d2170d150e72a84c754c4b409e54ea51e7553491d939a50f607fb5af4b85c4e6457f1cdf3977aed3723d2c1209555c8e74004f3454 languageName: node linkType: hard -"@parcel/packager-html@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/packager-html@npm:2.8.3" +"@parcel/packager-html@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-html@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" posthtml: "npm:^0.16.5" - checksum: 10/b3733e672e0ac4c0d7ca29816c51c84d931cafcd54cd0fb458b1a93d2dca4013ff516f19f02ece06ccb76681d2f63770e657f72e7672b8afb6a20b34868a928a + checksum: 10/087e0971925c64aa9d749daccb651a2d4b50fc7a3d3d7d6ae52c4920ad630850da9e85aaefab63b210979918a11c1af64835754233900f9b10c3993ccbc7f445 languageName: node linkType: hard -"@parcel/packager-js@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/packager-js@npm:2.8.3" +"@parcel/packager-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-js@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" globals: "npm:^13.2.0" nullthrows: "npm:^1.1.1" - checksum: 10/6adfccb988a320397f00a58adf1108aaff9de92b0c7e4a5a7c69993e629f37d9015c693769c5b9d35331265cbf00c4df416b6cbacc91502d5d39c708542d0f0f + checksum: 10/63936757e922860935bfc42556d430cbc74ab99e330bc11433fc53ddef01aac5655129f76b5f65be1f13521500b5e1859e352f80d3bfc57b5c48016b78a396cb languageName: node linkType: hard -"@parcel/packager-raw@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/packager-raw@npm:2.8.3" +"@parcel/packager-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-raw@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - checksum: 10/09f4723e3d55d94231f338cb19314364c71f981bbc60b2468fcd2a998d750b9070031be28ba183676a6daee752ab0fa32e6f9ee63dee2e1823ddb5d4f7480657 + "@parcel/plugin": "npm:2.12.0" + checksum: 10/eabe7d8600e889757f3a1a6ccb43a53d4f81f680b409be38fbd87b111e9bee99cb41e4c255ce1b289cb6ea16e9f79b94936f534fcd6a0732cb7c4641db45831d languageName: node linkType: hard -"@parcel/packager-svg@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/packager-svg@npm:2.8.3" +"@parcel/packager-svg@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-svg@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" posthtml: "npm:^0.16.4" - checksum: 10/45c966ad8e6dbb25049adca66d761089a09cda83558d8767b46501a023b8d94b050f1a2899b1c8b18eac6cf87d2605ad5aa9a4cb2f9d90474794576dafb2e4fc + checksum: 10/252abaf3ebf9949f1fa8e3484bbd9fab692f0a4146ae600b81a4cd36b8db2c1c9c1fb2f6185860b624d19b1bbe155f9063c236e95d5f12bdac88bb7ae9a7b804 + languageName: node + linkType: hard + +"@parcel/packager-wasm@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/packager-wasm@npm:2.12.0" + dependencies: + "@parcel/plugin": "npm:2.12.0" + checksum: 10/657f44b0879ffabca88f1b3d2091f9c76c304f05cb114e0ed112702e287fb19dd6e6f51e772a3fb169b6416001a5c3081f5f02966810acd969119551535faec2 languageName: node linkType: hard -"@parcel/plugin@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/plugin@npm:2.8.3" +"@parcel/plugin@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/plugin@npm:2.12.0" + dependencies: + "@parcel/types": "npm:2.12.0" + checksum: 10/0b52f1dd0675ea4f597a3f882f47434b7c5dabc997a875d07f1cf178e37adc927ed86e084502030a04ac6c9b548152741dfdeb8b6d730f7d8af2bfe3465a77d3 + languageName: node + linkType: hard + +"@parcel/profiler@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/profiler@npm:2.12.0" dependencies: - "@parcel/types": "npm:2.8.3" - checksum: 10/a69ac66f5cc28197cf689f1c4144398457d62a086621a22b3b45fe863909a094b616dad415ec01673a9eb731b05fe9060bcb340c07efcd48343577a540fbfdf7 + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + chrome-trace-event: "npm:^1.0.2" + checksum: 10/b8f9857620788711b1d4fef9de75bd09f8db4d3f8fea6023ba1958b63ea05196690837e53ae3e6de073010bf58d5bec339eb048fc163a58b0b938cbf91063f31 languageName: node linkType: hard -"@parcel/reporter-cli@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/reporter-cli@npm:2.8.3" +"@parcel/reporter-cli@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-cli@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" chalk: "npm:^4.1.0" term-size: "npm:^2.2.1" - checksum: 10/e9e8069a214def0a2749c1df06687f95ca6b8c55114b81214547970d149c194562737084dcfe654aa560ed34ca3bc6cba366c2be1d46b42c17b93f96e32b4853 + checksum: 10/9b0059fce8d49bfaff26dd722a4ab8d5b5f02a05709f3af30c6263b4335d010896f54b1b3503b78596de9086688149190bfb99a57667a8bd9bf65bff5a389f8b languageName: node linkType: hard -"@parcel/reporter-dev-server@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/reporter-dev-server@npm:2.8.3" +"@parcel/reporter-dev-server@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-dev-server@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - checksum: 10/e190acfbd5a426d715d8ae68a19f8c64d5a5cf44e8043a28d9a3cf73014a2c7c3d89dcbd4c0e6aad8a4f0c7113fc4d38517029519e19b792c44da886c375bf87 + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + checksum: 10/4a7977ee3d5880ec0857088fe0bff78409fc5d1f30b67fa09dbb7ff135b5242762668b4d0de47c07097171f7515dece7f93b104944ae78f6c9e75fc6bc15b085 languageName: node linkType: hard -"@parcel/resolver-default@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/resolver-default@npm:2.8.3" +"@parcel/reporter-tracer@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/reporter-tracer@npm:2.12.0" dependencies: - "@parcel/node-resolver-core": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" - checksum: 10/de2b72f5f2ae12ceabd170f0e7b43c26ae44aaec82beb6d0785c0bd47d3161e0195424ae275c8aa35e8d1cd39a7a6c2aeddddc5c99643bfd76c03d345f2aa186 + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + chrome-trace-event: "npm:^1.0.3" + nullthrows: "npm:^1.1.1" + checksum: 10/f526eee0dd53c905ddd12ba5fc8d9c5f4732cc383d040cff2501445aed15b70a477328b01b68666d4b9d3f833aef407c26c6ed267a00b36687a4c4723a0edc6a languageName: node linkType: hard -"@parcel/runtime-browser-hmr@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/runtime-browser-hmr@npm:2.8.3" +"@parcel/resolver-default@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/resolver-default@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - checksum: 10/e51d2b2846176c2322259655d45b89b68009df9fa75c3ff4a0344073332e6979647d98c12046e51ea8bd4528990b467e12f232ff9fea738141a912590f1837cf + "@parcel/node-resolver-core": "npm:3.3.0" + "@parcel/plugin": "npm:2.12.0" + checksum: 10/f42165e438700d0c3778c15a24de30add9ca9ab3d33da7bd474ccac47e358b7a6ecfbc761425f9ee9be9d6422175da8f21348bdf9407420f75b666a351247779 languageName: node linkType: hard -"@parcel/runtime-js@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/runtime-js@npm:2.8.3" +"@parcel/runtime-browser-hmr@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-browser-hmr@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + checksum: 10/179c538625b4fc242a923d4e338c1a185acf629ba0c5bcfebf80778aac6e7295268de6265add7e4e78eb61ea0f631b70cd46123e5c908b8fa8a04db56ed19c57 + languageName: node + linkType: hard + +"@parcel/runtime-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-js@npm:2.12.0" + dependencies: + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" - checksum: 10/c020247a310cd94ee7b7aa86c695d9cb52d5b79727427c4ccb33de971df6934185b3a1cecd0a7a84d1fc6e56bc393d102808d205721c9b4a85c2e987a60c0fd8 + checksum: 10/8e2db0b5068ba1505bbe451a7e9b1a49ec425d4e27210667ad6adc4c9060c132df1ea6b52df6e6a2cb4f7f3e9cf084c0c5b0aab7956ccd30bc9550f7d2d01a3c languageName: node linkType: hard -"@parcel/runtime-react-refresh@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/runtime-react-refresh@npm:2.8.3" +"@parcel/runtime-react-refresh@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-react-refresh@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" react-error-overlay: "npm:6.0.9" react-refresh: "npm:^0.9.0" - checksum: 10/f0a82fecc4d5ef61ff1250a16018d1ce4887e1c4b6571d2d19d90fc2e01d2ba1293294087dd3b1d82525da5ff26b7945369d91e7d42c6cc204a6e8831dfe6959 + checksum: 10/a185914780f33bea92a6da74308212cd663f75c0a85b73776e5a0961289b3ae8eebe7900f3b755ab516498bc302957968b2f3dfb6e81ea4377ca6f1e1eada601 languageName: node linkType: hard -"@parcel/runtime-service-worker@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/runtime-service-worker@npm:2.8.3" +"@parcel/runtime-service-worker@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/runtime-service-worker@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" - checksum: 10/50cc70aec33410be032a6c9718021b658895c48ba830c5fadb094bb7c25d00cc62c7746bc623884ca7ec8ba7a634f35525e332aa4ef20c5d499536ef1dfa0679 + checksum: 10/768d128f28de24ae264ad74f37c6bfaa37a366c9333a4101d9afb88b4e3ac2820e86605294321d78397dae9884d83362044ed9d2be31fce4884880c209b671a5 + languageName: node + linkType: hard + +"@parcel/rust@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/rust@npm:2.12.0" + checksum: 10/e2b2a7ea7de313349cffe22fd14f790c33b6c9a3826ffcda134fd11765aa7ec13748ffb3d99069f94a399b78f3d45924591e8e8a334e9b43d1e74a2a7b4f007f languageName: node linkType: hard @@ -4498,205 +4538,290 @@ __metadata: languageName: node linkType: hard -"@parcel/transformer-babel@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-babel@npm:2.8.3" +"@parcel/transformer-babel@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-babel@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/utils": "npm:2.12.0" browserslist: "npm:^4.6.6" json5: "npm:^2.2.0" nullthrows: "npm:^1.1.1" - semver: "npm:^5.7.0" - checksum: 10/4ec0bd54a0ca00cd4292d34adc41053dc7f704de003683f32a9ebb595f0c4513e41b927d3171166e780b4006ad192d474c6246f767c8b4fedda718b9a666fd1f + semver: "npm:^7.5.2" + checksum: 10/b3d6d5dcb4191618383555ef32c9adb90251d467f756dae3648aa862f860a91d0a70850d3074de132a4a301386626723a1e3691ec8eb84de3e91de3ff2d36271 languageName: node linkType: hard -"@parcel/transformer-css@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-css@npm:2.8.3" +"@parcel/transformer-css@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-css@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" + "@parcel/utils": "npm:2.12.0" browserslist: "npm:^4.6.6" - lightningcss: "npm:^1.16.1" + lightningcss: "npm:^1.22.1" nullthrows: "npm:^1.1.1" - checksum: 10/11d63756e0e7656e6a3e6075849a58e1f73a4b518e49d034f0df903fabff72ce6e90206a79950d30dcbd2663cea6ab3b1aa6d8252cb4251f62df50345b421c51 + checksum: 10/9e9acc9da8146b3b71b280857e28daeea39f32993b5255d0792529e72d6786f4eddb20cc262165f4687c0b238c3477c4b7df6cc83a52c6fe821213a4c53bee35 languageName: node linkType: hard -"@parcel/transformer-html@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-html@npm:2.8.3" +"@parcel/transformer-html@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-html@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" nullthrows: "npm:^1.1.1" posthtml: "npm:^0.16.5" posthtml-parser: "npm:^0.10.1" posthtml-render: "npm:^3.0.0" - semver: "npm:^5.7.1" + semver: "npm:^7.5.2" srcset: "npm:4" - checksum: 10/2ac7051a83c48f9193e44997ba84eab3e0bf6a007ebfa0b6f185b4a59fa1945f25604fff669693ee8e8a63e25b3f49de37142815ca6cc85c3bc95a8089efe2d0 + checksum: 10/68c18f3a3073710901a64361305fc88cf705386467d824bdf3e23fa17e0793014835b876a0001d287cb6da30eba160362b8b2dfee046b52f04648ce9448d0b0f languageName: node linkType: hard -"@parcel/transformer-image@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-image@npm:2.8.3" +"@parcel/transformer-image@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-image@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - "@parcel/workers": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" nullthrows: "npm:^1.1.1" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/a6cd481d25b8791da64eadfa2b9ae02ac1d82d72330df63e449999ec5c182a20d98c9a5d0bec0e92625e449756b2791b8d5e8dabd27c61392e1841eff8ad820e + "@parcel/core": ^2.12.0 + checksum: 10/79cb2669b64d64792ff27f2dfb6aeb0bde9276319124adda35b81e4b4afdfd09b90119f59e645edd1883f0ad9a87c05a4dbec702194a42d2001860c4f0d3debd languageName: node linkType: hard -"@parcel/transformer-js@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-js@npm:2.8.3" +"@parcel/transformer-js@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-js@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/utils": "npm:2.8.3" - "@parcel/workers": "npm:2.8.3" - "@swc/helpers": "npm:^0.4.12" + "@parcel/utils": "npm:2.12.0" + "@parcel/workers": "npm:2.12.0" + "@swc/helpers": "npm:^0.5.0" browserslist: "npm:^4.6.6" - detect-libc: "npm:^1.0.3" nullthrows: "npm:^1.1.1" regenerator-runtime: "npm:^0.13.7" - semver: "npm:^5.7.1" + semver: "npm:^7.5.2" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/e1d7f342304df01f4e173537ad53ac082e3a66d84b343b5a4a2ed5167bd853a9681481debcef6891a1dfa00c19ccbe46c0ed8a7a73fe13eb24273f9eee7b959e + "@parcel/core": ^2.12.0 + checksum: 10/e40a2fa512bba8ebfe79c7cb8bff1dc1cf1b316d2c00ed0478e6587d59c0365271efb8ac7a02e83b22bd420c77372b381cc107f80fe1d46880a0a9cbb6f8b34c languageName: node linkType: hard -"@parcel/transformer-json@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-json@npm:2.8.3" +"@parcel/transformer-json@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-json@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" json5: "npm:^2.2.0" - checksum: 10/754d574bb9142ab3e7318804ce215d64ba0b690768371c2d92935970b76268f77779827fe9a5d4137fa511f0d6381e06ce0277eff34c6a919b3127342fdc5293 + checksum: 10/96ff6b16cac6362e004492fe6140b3c5ce437a81da22e4cce5342e16146d4c10a587c7acf7b0a8feaaade8072ee76f4bee7770078aaa9471651f99a46016eb7e languageName: node linkType: hard -"@parcel/transformer-postcss@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-postcss@npm:2.8.3" +"@parcel/transformer-postcss@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-postcss@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" clone: "npm:^2.1.1" nullthrows: "npm:^1.1.1" postcss-value-parser: "npm:^4.2.0" - semver: "npm:^5.7.1" - checksum: 10/2857accc231e2eb98cf52df9d004774baac360ab943acde670ee49175bccd4ed2db6f1965a3b43b3956193d5c5b382b80e03bb44d2a9a28878749e0f53c4a144 + semver: "npm:^7.5.2" + checksum: 10/4d8eb27d079abe171875246627834c6495073daa1bcf27dd49a5ec8eccd334632a357beb42e9773175808fa6464e8600a8efc442097d9395cab96a9217c1e6b5 languageName: node linkType: hard -"@parcel/transformer-posthtml@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-posthtml@npm:2.8.3" +"@parcel/transformer-posthtml@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-posthtml@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" posthtml: "npm:^0.16.5" posthtml-parser: "npm:^0.10.1" posthtml-render: "npm:^3.0.0" - semver: "npm:^5.7.1" - checksum: 10/8c65401148658fe97e9903bd8dc76c5cef73d51aaf0e4a292eacc04c58b6fae7d19e20202db1784c59903dd40ae0ca5352c0a5de00cd259942cd77782e87f07c + semver: "npm:^7.5.2" + checksum: 10/b056331712cf9a07388065c11ac1a2e38cb7b9f307ab79b6431812b7ba61f5d9280ba99fca35051345da0acc926924d813060b2577245462258856edddb8902a languageName: node linkType: hard -"@parcel/transformer-raw@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-raw@npm:2.8.3" +"@parcel/transformer-raw@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-raw@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - checksum: 10/371263bb526373c229aa3e730f2a1d6687bd6b771203d73237c04da3a3ada86c4fcf0b534d3fb366a7b3842df0cf98ae1e033602613cafd9f702f47a6568a83c + "@parcel/plugin": "npm:2.12.0" + checksum: 10/de6681e2e723d9877f3e2fd3c4983ac4de8ecae26f5d0c51ce6d231bd29d644f86db9558426cd69adfdbb89edd824c08ef92ada09aaceaa66dd1f44d1c027d60 languageName: node linkType: hard -"@parcel/transformer-react-refresh-wrap@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-react-refresh-wrap@npm:2.8.3" +"@parcel/transformer-react-refresh-wrap@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-react-refresh-wrap@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" react-refresh: "npm:^0.9.0" - checksum: 10/4b1a382e1f8af446c3992de49cfc5933524e93ffcb0c9534b3a3b1720e1ea63d85fa3878df35879b1dde1d273b83e42b27540bbca2f26def3f61b3b4d0ff0afb + checksum: 10/c3015df31f3cda37e0208445977ff3e38e6d53465af9ef67b19ff910b5a1011ee3abe32ceb3fb81683a49e670c134a1e06af8534919a1e8940ccbca40aa84f88 languageName: node linkType: hard -"@parcel/transformer-svg-react@npm:^2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-svg-react@npm:2.8.3" +"@parcel/transformer-svg-react@npm:^2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-svg-react@npm:2.12.0" dependencies: - "@parcel/plugin": "npm:2.8.3" + "@parcel/plugin": "npm:2.12.0" "@svgr/core": "npm:^6.2.0" "@svgr/plugin-jsx": "npm:^6.2.0" "@svgr/plugin-svgo": "npm:^6.2.0" - checksum: 10/03231412beb621af092fd3bfa036f46cce0eed53bafaa4f3e4e66adcbfbb339f6dfa398333f14e9a1aeba7652549e47879f726e6706602d9497463a297830509 + checksum: 10/e5282900b17eb21093e71e75ff85098641e8ca094683c9dc12f852870c4a43b0b8c958a8d7814172ddf81c5318b80c87c88ea235d28d67061f43b589e809038c languageName: node linkType: hard -"@parcel/transformer-svg@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/transformer-svg@npm:2.8.3" +"@parcel/transformer-svg@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/transformer-svg@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/plugin": "npm:2.8.3" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/plugin": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" nullthrows: "npm:^1.1.1" posthtml: "npm:^0.16.5" posthtml-parser: "npm:^0.10.1" posthtml-render: "npm:^3.0.0" - semver: "npm:^5.7.1" - checksum: 10/bf2f69199724af4f209ad486dd495bba5d7109974a09066d2e40e8e47d0c0c56268597690f9dcea933a0b5b73ab4930d337bbd6e6d7b5af4cdb7c7b445e4a5ff + semver: "npm:^7.5.2" + checksum: 10/4a7b44566e496adfb9b85a5b889baee4fad98f8d21753f2f8df1e5abba66bafdffeb73e533b22004bc47fb1ef4b0ecb4896a526fef5739eb031c893ff5c0c53a languageName: node linkType: hard -"@parcel/types@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/types@npm:2.8.3" +"@parcel/types@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/types@npm:2.12.0" dependencies: - "@parcel/cache": "npm:2.8.3" - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/fs": "npm:2.8.3" - "@parcel/package-manager": "npm:2.8.3" + "@parcel/cache": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" - "@parcel/workers": "npm:2.8.3" + "@parcel/workers": "npm:2.12.0" utility-types: "npm:^3.10.0" - checksum: 10/42d040cea45ff15c2f094e5ef9f788dc19cfdea1c914f104cc71cbaa45204c33da23f5f8f86647fe36a5cf5e7f84e7762d439fc9b90b4972021d075d7c22b967 + checksum: 10/c203be51789967adf8d5d3400fdf626b29f0d19065cef0d2ff91b5548397892b95fc4cc1153d9b8cccc3a885dfa8b1ea2f7317ab8089462f1e29207440e05f47 languageName: node linkType: hard -"@parcel/utils@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/utils@npm:2.8.3" +"@parcel/utils@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/utils@npm:2.12.0" dependencies: - "@parcel/codeframe": "npm:2.8.3" - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/hash": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/markdown-ansi": "npm:2.8.3" + "@parcel/codeframe": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/markdown-ansi": "npm:2.12.0" + "@parcel/rust": "npm:2.12.0" "@parcel/source-map": "npm:^2.1.1" chalk: "npm:^4.1.0" - checksum: 10/179c5bf03d22692481c1a822345f4d04ac96099da290a1edfa607c92c8096535b94fd03176b1f114fd324c2a3d3a5dcb32d20fb3e4e29a970d8795ee55b75ce0 + nullthrows: "npm:^1.1.1" + checksum: 10/df133d29fc5ca53094001cc88d70abdfb873d9cf18256836a33d8e6fb7f18025eaa44d625e724334e54c3c2bf8fcc12fcd806a0c314d7afc3bd85e6e98429873 + languageName: node + linkType: hard + +"@parcel/watcher-android-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-android-arm64@npm:2.4.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-darwin-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-freebsd-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-arm64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@parcel/watcher-linux-x64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@parcel/watcher-win32-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@parcel/watcher-win32-ia32@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@parcel/watcher-win32-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-x64@npm:2.4.1" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -4713,19 +4838,69 @@ __metadata: languageName: node linkType: hard -"@parcel/workers@npm:2.8.3": - version: 2.8.3 - resolution: "@parcel/workers@npm:2.8.3" +"@parcel/watcher@npm:^2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher@npm:2.4.1" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-x64": "npm:2.4.1" + "@parcel/watcher-freebsd-x64": "npm:2.4.1" + "@parcel/watcher-linux-arm-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-musl": "npm:2.4.1" + "@parcel/watcher-linux-x64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-x64-musl": "npm:2.4.1" + "@parcel/watcher-win32-arm64": "npm:2.4.1" + "@parcel/watcher-win32-ia32": "npm:2.4.1" + "@parcel/watcher-win32-x64": "npm:2.4.1" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10/c163dff1828fa249c00f24931332dea5a8f2fcd1bfdd0e304ccdf7619c58bff044526fa39241fd2121d2a2141f71775ce3117450d78c4df3070d152282017644 + languageName: node + linkType: hard + +"@parcel/workers@npm:2.12.0": + version: 2.12.0 + resolution: "@parcel/workers@npm:2.12.0" dependencies: - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/types": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" - chrome-trace-event: "npm:^1.0.2" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/profiler": "npm:2.12.0" + "@parcel/types": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" nullthrows: "npm:^1.1.1" peerDependencies: - "@parcel/core": ^2.8.3 - checksum: 10/fdf92d253058be1a4bbd1c3f2e8fd6be4a22090c7b8065d72527824631fd37857252f36c73502fd2d3d363029e8b98d7df2c34c6e21ac55a575baeb8326043a4 + "@parcel/core": ^2.12.0 + checksum: 10/e8eb665d7da166cc7d4efa0eab69beef3a98edc26ebf863c79a66964fd3eaf78110deb3ab4963ab28162aad408c8b03f2ccc3ebdcd05b8bfdf5db748d1e532e4 languageName: node linkType: hard @@ -4930,10 +5105,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.6.0": - version: 1.6.0 - resolution: "@remix-run/router@npm:1.6.0" - checksum: 10/0a7af7470dad0a0baa0ebe78579571d5e9376cff0ffeeb61c10dc35640a4e528bccddaaff9037866d6317065d8cfbaf54168eee19202b63f9d1e0c896b79bfd4 +"@remix-run/router@npm:1.19.2": + version: 1.19.2 + resolution: "@remix-run/router@npm:1.19.2" + checksum: 10/31b62b66ea68bd62018189047de7b262700113438f62407df019f81a9856a08a705b2b77454be9293518e2f5f3bbf3f8b858ac19f48cb7d89f8ab56b7b630c19 languageName: node linkType: hard @@ -5371,6 +5546,129 @@ __metadata: languageName: node linkType: hard +"@swc/core-darwin-arm64@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-darwin-arm64@npm:1.7.26" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-darwin-x64@npm:1.7.26" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.26" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-linux-arm64-gnu@npm:1.7.26" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-linux-arm64-musl@npm:1.7.26" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-linux-x64-gnu@npm:1.7.26" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-linux-x64-musl@npm:1.7.26" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-win32-arm64-msvc@npm:1.7.26" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-win32-ia32-msvc@npm:1.7.26" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.7.26": + version: 1.7.26 + resolution: "@swc/core-win32-x64-msvc@npm:1.7.26" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.3.36": + version: 1.7.26 + resolution: "@swc/core@npm:1.7.26" + dependencies: + "@swc/core-darwin-arm64": "npm:1.7.26" + "@swc/core-darwin-x64": "npm:1.7.26" + "@swc/core-linux-arm-gnueabihf": "npm:1.7.26" + "@swc/core-linux-arm64-gnu": "npm:1.7.26" + "@swc/core-linux-arm64-musl": "npm:1.7.26" + "@swc/core-linux-x64-gnu": "npm:1.7.26" + "@swc/core-linux-x64-musl": "npm:1.7.26" + "@swc/core-win32-arm64-msvc": "npm:1.7.26" + "@swc/core-win32-ia32-msvc": "npm:1.7.26" + "@swc/core-win32-x64-msvc": "npm:1.7.26" + "@swc/counter": "npm:^0.1.3" + "@swc/types": "npm:^0.1.12" + peerDependencies: + "@swc/helpers": "*" + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10/8fb43420bdd1b774dc054c6629f87f733e76860b97130609c7374f3a48406bc0ae1a2dd0b3e3c10317c692b2eaa64747f1a690b309727a8d1411112e2d2a884e + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: 10/df8f9cfba9904d3d60f511664c70d23bb323b3a0803ec9890f60133954173047ba9bdeabce28cd70ba89ccd3fd6c71c7b0bd58be85f611e1ffbe5d5c18616598 + languageName: node + linkType: hard + "@swc/helpers@npm:^0.3.2": version: 0.3.17 resolution: "@swc/helpers@npm:0.3.17" @@ -5380,12 +5678,21 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:^0.4.12": - version: 0.4.14 - resolution: "@swc/helpers@npm:0.4.14" +"@swc/helpers@npm:^0.5.0": + version: 0.5.13 + resolution: "@swc/helpers@npm:0.5.13" dependencies: tslib: "npm:^2.4.0" - checksum: 10/236afd445fb22e3df7aa84336d5c45d29e021ad01917aa7c24267330df8b39ed89c3d8d9836ac2ac7569b46923591d0e49174f72df7fb997aea841d08f374dbd + checksum: 10/6ba2f7e215d32d71fce139e2cfc426b3ed7eaa709febdeb07b97260a4c9eea4784cf047cc1271be273990b08220b576b94a42b5780947c0b3be84973a847a24d + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.12": + version: 0.1.12 + resolution: "@swc/types@npm:0.1.12" + dependencies: + "@swc/counter": "npm:^0.1.3" + checksum: 10/92dbbc70cd068ea30fb6fbdc1ae8599d6c058a5d09b2923d6e4e24fab5ad7c86a19dd01f349a8e03e300a9321e06911a24df18303b40e307fbd4109372cef2ef languageName: node linkType: hard @@ -5820,12 +6127,12 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.2.1": - version: 18.2.1 - resolution: "@types/react-dom@npm:18.2.1" +"@types/react-dom@npm:^18.3.0": + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" dependencies: "@types/react": "npm:*" - checksum: 10/5c6bcd6bbd4ac4caf5e492d79102a7b615531e101692dd844daae5709657c7599d4dfcb70fd84e5e1d135a958cf8bb919dc85542601a09419e9604c5e03bfc92 + checksum: 10/6ff53f5a7b7fba952a68e114d3b542ebdc1e87a794234785ebab0bcd9bde7fb4885f21ebaf93d26dc0a1b5b93287f42cad68b78ae04dddf6b20da7aceff0beaf languageName: node linkType: hard @@ -5840,14 +6147,13 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^18.2.0": - version: 18.2.0 - resolution: "@types/react@npm:18.2.0" +"@types/react@npm:^18.3.8": + version: 18.3.8 + resolution: "@types/react@npm:18.3.8" dependencies: "@types/prop-types": "npm:*" - "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/c5fe6b798ab0d4ba2c40173275fb7f1e85a67586d40c97b0bee25a514f44de032e7aa90a98482cc38e106e66102727cdf1be9a8413d29509b92cb384adf4864d + checksum: 10/75e64e7f481c28e6c8ce6dae12f49ccc3f36c7b10b82da3eb7728ad9c02bec58a2c967105603e38665902e8db9296962c7718bc2062e2cb64a16e92333bd1f4b languageName: node linkType: hard @@ -5893,14 +6199,14 @@ __metadata: languageName: node linkType: hard -"@types/styled-components@npm:^5.1.26": - version: 5.1.26 - resolution: "@types/styled-components@npm:5.1.26" +"@types/styled-components@npm:^5.1.34": + version: 5.1.34 + resolution: "@types/styled-components@npm:5.1.34" dependencies: "@types/hoist-non-react-statics": "npm:*" "@types/react": "npm:*" csstype: "npm:^3.0.2" - checksum: 10/e40c942c97f4467310c658608e7d02d6b9571d390d0fa519bdbd37e48ed2c605a6c9e464812c36d0a1339402bff65cb473b9e785288a29419d7af994595bba33 + checksum: 10/3da291b46f03d378a0176c9d034deee7ee0684c5d62e1c5ce82f3be0972918eaa806f45c62e9a4f1c8d24c5ba6571c260caba2493fc7e82b528ac7d15903e2c1 languageName: node linkType: hard @@ -7845,9 +8151,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001473 - resolution: "caniuse-lite@npm:1.0.30001473" - checksum: 10/6ca12ca97796c875efce7c72e3dfc9d3af9669f3e6dbb79a6574575d8af48a36e0b800d6791bb78b45bf397d3652c982ed4f0598a41948af2fb9817f5f26b282 + version: 1.0.30001660 + resolution: "caniuse-lite@npm:1.0.30001660" + checksum: 10/5d83f0b7e2075b7e31f114f739155dc6c21b0afe8cb61180f625a4903b0ccd3d7591a5f81c930f14efddfa57040203ba0890850b8a3738f6c7f17c7dd83b9de8 languageName: node linkType: hard @@ -8120,6 +8426,13 @@ __metadata: languageName: node linkType: hard +"chrome-trace-event@npm:^1.0.3": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: 10/1762bed739774903bf5915fe3045c3120fc3c7f7d929d88e566447ea38944937a6370ccb687278318c43c24f837ad22dac780bed67c066336815557b8cf558c6 + languageName: node + linkType: hard + "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" @@ -8326,6 +8639,13 @@ __metadata: languageName: node linkType: hard +"client-only@npm:^0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 10/0c16bf660dadb90610553c1d8946a7fdfb81d624adea073b8440b7d795d5b5b08beb3c950c6a2cf16279365a3265158a236876d92bce16423c485c322d7dfaf8 + languageName: node + linkType: hard + "cliui@npm:^5.0.0": version: 5.0.0 resolution: "cliui@npm:5.0.0" @@ -9238,13 +9558,20 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.0.6, csstype@npm:^3.1.0": +"csstype@npm:^3.0.2, csstype@npm:^3.1.0": version: 3.1.2 resolution: "csstype@npm:3.1.2" checksum: 10/1f39c541e9acd9562996d88bc9fb62d1cb234786ef11ed275567d4b2bd82e1ceacde25debc8de3d3b4871ae02c2933fa02614004c97190711caebad6347debc2 languageName: node linkType: hard +"csstype@npm:^3.1.2": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade + languageName: node + linkType: hard + "culvert@npm:^0.1.2": version: 0.1.2 resolution: "culvert@npm:0.1.2" @@ -9562,6 +9889,13 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^2.0.1": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10/b4ea018d623e077bd395f168a9e81db77370dde36a5b01d067f2ad7989924a81d31cb547ff764acb2aa25d50bb7fdde0b0a93bec02212b0cb430621623246d39 + languageName: node + linkType: hard + "detect-port@npm:^1.3.0": version: 1.5.1 resolution: "detect-port@npm:1.5.1" @@ -9788,6 +10122,13 @@ __metadata: languageName: node linkType: hard +"dotenv@npm:^16.4.5": + version: 16.4.5 + resolution: "dotenv@npm:16.4.5" + checksum: 10/55a3134601115194ae0f924e54473459ed0d9fc340ae610b676e248cca45aa7c680d86365318ea964e6da4e2ea80c4514c1adab5adb43d6867fb57ff068f95c8 + languageName: node + linkType: hard + "dotenv@npm:^7.0.0": version: 7.0.0 resolution: "dotenv@npm:7.0.0" @@ -11096,13 +11437,6 @@ __metadata: languageName: node linkType: hard -"fast-loops@npm:^1.1.3": - version: 1.1.3 - resolution: "fast-loops@npm:1.1.3" - checksum: 10/1bf9f102d8ed48a8c8304e2b27fd32afa65d370498db9b49d5762696ac4aa8c55593d505c142c2b7e25ca79f45207c4b25f778afd80f35df98cb2caaaf9609b7 - languageName: node - linkType: hard - "fast-querystring@npm:^1.1.1": version: 1.1.1 resolution: "fast-querystring@npm:1.1.1" @@ -13274,13 +13608,12 @@ __metadata: languageName: node linkType: hard -"inline-style-prefixer@npm:^6.0.0": - version: 6.0.4 - resolution: "inline-style-prefixer@npm:6.0.4" +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" dependencies: css-in-js-utils: "npm:^3.1.0" - fast-loops: "npm:^1.1.3" - checksum: 10/5ee7a082b4d23ac220fabe2353a8452bd50c587ae0d9e20e6c0f4ebc456377c7a3a4ce9d13486e0cfc9032db00d9b0ae33d3944a183340b1b3d34cef2d5df80b + checksum: 10/a430c962693f32a36bcec0124c9798bcf3725bb90468d493108c0242446a9cc92ff1967bdf99b6ce5331e7a9b75e6836bc9ba1b3d4756876b8ef48036acb2509 languageName: node linkType: hard @@ -14545,80 +14878,98 @@ __metadata: languageName: node linkType: hard -"lightningcss-darwin-arm64@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-darwin-arm64@npm:1.20.0" +"lightningcss-darwin-arm64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-arm64@npm:1.27.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"lightningcss-darwin-x64@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-darwin-x64@npm:1.20.0" +"lightningcss-darwin-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-darwin-x64@npm:1.27.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"lightningcss-linux-arm-gnueabihf@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-linux-arm-gnueabihf@npm:1.20.0" +"lightningcss-freebsd-x64@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-freebsd-x64@npm:1.27.0" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"lightningcss-linux-arm-gnueabihf@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm-gnueabihf@npm:1.27.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"lightningcss-linux-arm64-gnu@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-linux-arm64-gnu@npm:1.20.0" +"lightningcss-linux-arm64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-gnu@npm:1.27.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"lightningcss-linux-arm64-musl@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-linux-arm64-musl@npm:1.20.0" +"lightningcss-linux-arm64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-arm64-musl@npm:1.27.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"lightningcss-linux-x64-gnu@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-linux-x64-gnu@npm:1.20.0" +"lightningcss-linux-x64-gnu@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-gnu@npm:1.27.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"lightningcss-linux-x64-musl@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-linux-x64-musl@npm:1.20.0" +"lightningcss-linux-x64-musl@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-linux-x64-musl@npm:1.27.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"lightningcss-win32-x64-msvc@npm:1.20.0": - version: 1.20.0 - resolution: "lightningcss-win32-x64-msvc@npm:1.20.0" +"lightningcss-win32-arm64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-arm64-msvc@npm:1.27.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"lightningcss-win32-x64-msvc@npm:1.27.0": + version: 1.27.0 + resolution: "lightningcss-win32-x64-msvc@npm:1.27.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"lightningcss@npm:^1.16.1": - version: 1.20.0 - resolution: "lightningcss@npm:1.20.0" +"lightningcss@npm:^1.22.1": + version: 1.27.0 + resolution: "lightningcss@npm:1.27.0" dependencies: detect-libc: "npm:^1.0.3" - lightningcss-darwin-arm64: "npm:1.20.0" - lightningcss-darwin-x64: "npm:1.20.0" - lightningcss-linux-arm-gnueabihf: "npm:1.20.0" - lightningcss-linux-arm64-gnu: "npm:1.20.0" - lightningcss-linux-arm64-musl: "npm:1.20.0" - lightningcss-linux-x64-gnu: "npm:1.20.0" - lightningcss-linux-x64-musl: "npm:1.20.0" - lightningcss-win32-x64-msvc: "npm:1.20.0" + lightningcss-darwin-arm64: "npm:1.27.0" + lightningcss-darwin-x64: "npm:1.27.0" + lightningcss-freebsd-x64: "npm:1.27.0" + lightningcss-linux-arm-gnueabihf: "npm:1.27.0" + lightningcss-linux-arm64-gnu: "npm:1.27.0" + lightningcss-linux-arm64-musl: "npm:1.27.0" + lightningcss-linux-x64-gnu: "npm:1.27.0" + lightningcss-linux-x64-musl: "npm:1.27.0" + lightningcss-win32-arm64-msvc: "npm:1.27.0" + lightningcss-win32-x64-msvc: "npm:1.27.0" dependenciesMeta: lightningcss-darwin-arm64: optional: true lightningcss-darwin-x64: optional: true + lightningcss-freebsd-x64: + optional: true lightningcss-linux-arm-gnueabihf: optional: true lightningcss-linux-arm64-gnu: @@ -14629,9 +14980,11 @@ __metadata: optional: true lightningcss-linux-x64-musl: optional: true + lightningcss-win32-arm64-msvc: + optional: true lightningcss-win32-x64-msvc: optional: true - checksum: 10/fd8371a815c4970f2fd7fda834d1143d38535a923a9bcd81de9d36b3cffc7c14304a9be85e3d3f23135a01f4971a4d22cbe96416a8b3d2635251d424ac93111d + checksum: 10/275a0103c7dc1dfcf8e456a0523d1719a1caff916c45229ec62cdb28a814dce12b7065b88865fb74fc03a2a658ac3361caff5c348f1646313513c125d4f27954 languageName: node linkType: hard @@ -14714,21 +15067,21 @@ __metadata: languageName: node linkType: hard -"lmdb@npm:2.5.2": - version: 2.5.2 - resolution: "lmdb@npm:2.5.2" - dependencies: - "@lmdb/lmdb-darwin-arm64": "npm:2.5.2" - "@lmdb/lmdb-darwin-x64": "npm:2.5.2" - "@lmdb/lmdb-linux-arm": "npm:2.5.2" - "@lmdb/lmdb-linux-arm64": "npm:2.5.2" - "@lmdb/lmdb-linux-x64": "npm:2.5.2" - "@lmdb/lmdb-win32-x64": "npm:2.5.2" - msgpackr: "npm:^1.5.4" - node-addon-api: "npm:^4.3.0" +"lmdb@npm:2.8.5": + version: 2.8.5 + resolution: "lmdb@npm:2.8.5" + dependencies: + "@lmdb/lmdb-darwin-arm64": "npm:2.8.5" + "@lmdb/lmdb-darwin-x64": "npm:2.8.5" + "@lmdb/lmdb-linux-arm": "npm:2.8.5" + "@lmdb/lmdb-linux-arm64": "npm:2.8.5" + "@lmdb/lmdb-linux-x64": "npm:2.8.5" + "@lmdb/lmdb-win32-x64": "npm:2.8.5" + msgpackr: "npm:^1.9.5" + node-addon-api: "npm:^6.1.0" node-gyp: "npm:latest" - node-gyp-build-optional-packages: "npm:5.0.3" - ordered-binary: "npm:^1.2.4" + node-gyp-build-optional-packages: "npm:5.1.1" + ordered-binary: "npm:^1.4.1" weak-lru-cache: "npm:^1.2.2" dependenciesMeta: "@lmdb/lmdb-darwin-arm64": @@ -14743,7 +15096,9 @@ __metadata: optional: true "@lmdb/lmdb-win32-x64": optional: true - checksum: 10/ed88ebb5ae8a2137d22ed0091ae7b9112dcd5c9e5ed6fce27e547e2395241b8b34a5581307a34dfad930f5b50150524624a1f64a01fb6790baaec051aa18d551 + bin: + download-lmdb-prebuilds: bin/download-prebuilds.js + checksum: 10/250625da0ba036b481d1dadafae1fd2ae09b2cad637fe2dba5f297675cdfb046a2828731872e9ed8aed532dce67714545f63bdcfee4d1b19ccfa1bbe8d8eefbc languageName: node linkType: hard @@ -15924,18 +16279,18 @@ __metadata: languageName: node linkType: hard -"msgpackr-extract@npm:^3.0.1": - version: 3.0.2 - resolution: "msgpackr-extract@npm:3.0.2" - dependencies: - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "npm:3.0.2" - "@msgpackr-extract/msgpackr-extract-darwin-x64": "npm:3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm": "npm:3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-arm64": "npm:3.0.2" - "@msgpackr-extract/msgpackr-extract-linux-x64": "npm:3.0.2" - "@msgpackr-extract/msgpackr-extract-win32-x64": "npm:3.0.2" +"msgpackr-extract@npm:^3.0.2": + version: 3.0.3 + resolution: "msgpackr-extract@npm:3.0.3" + dependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "npm:3.0.3" + "@msgpackr-extract/msgpackr-extract-darwin-x64": "npm:3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm": "npm:3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm64": "npm:3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-x64": "npm:3.0.3" + "@msgpackr-extract/msgpackr-extract-win32-x64": "npm:3.0.3" node-gyp: "npm:latest" - node-gyp-build-optional-packages: "npm:5.0.7" + node-gyp-build-optional-packages: "npm:5.2.2" dependenciesMeta: "@msgpackr-extract/msgpackr-extract-darwin-arm64": optional: true @@ -15951,19 +16306,19 @@ __metadata: optional: true bin: download-msgpackr-prebuilds: bin/download-prebuilds.js - checksum: 10/c37ff5f098aea43ad441df32b810c603d84f2c775132e5919a20dacdbd003995cbead794c80e8d2f1d673539fac9b90c621842391a868d5055be857ae30763b9 + checksum: 10/4bfe45cf6968310570765951691f1b8e85b6a837e5197b8232fc9285eef4b457992e73118d9d07c92a52cc23f9e837897b135e17ea0f73e3604540434051b62f languageName: node linkType: hard -"msgpackr@npm:^1.5.4": - version: 1.8.5 - resolution: "msgpackr@npm:1.8.5" +"msgpackr@npm:^1.9.5, msgpackr@npm:^1.9.9": + version: 1.11.0 + resolution: "msgpackr@npm:1.11.0" dependencies: - msgpackr-extract: "npm:^3.0.1" + msgpackr-extract: "npm:^3.0.2" dependenciesMeta: msgpackr-extract: optional: true - checksum: 10/edf1680ba68f2be3d507bedc7f7f4b0b10247edb0933caaf4db5dc1444ae6e131bdc77fb3ffbc3d4e95d8e044e3d76673a992f023362917f3533ca5593e2cef1 + checksum: 10/e95edf511ab269b34e312a7bd058c203e1ef4dc0656df8ccf1a10e9cdb40fac4c4b62b42ea0b2d199f85a1a53704f7f47e28ed5af5311f66097c591eafbbf8f3 languageName: node linkType: hard @@ -16065,22 +16420,22 @@ __metadata: languageName: node linkType: hard -"nano-css@npm:^5.3.1": - version: 5.3.5 - resolution: "nano-css@npm:5.3.5" +"nano-css@npm:^5.6.2": + version: 5.6.2 + resolution: "nano-css@npm:5.6.2" dependencies: + "@jridgewell/sourcemap-codec": "npm:^1.4.15" css-tree: "npm:^1.1.2" - csstype: "npm:^3.0.6" + csstype: "npm:^3.1.2" fastest-stable-stringify: "npm:^2.0.2" - inline-style-prefixer: "npm:^6.0.0" - rtl-css-js: "npm:^1.14.0" - sourcemap-codec: "npm:^1.4.8" + inline-style-prefixer: "npm:^7.0.1" + rtl-css-js: "npm:^1.16.1" stacktrace-js: "npm:^2.0.2" - stylis: "npm:^4.0.6" + stylis: "npm:^4.3.0" peerDependencies: react: "*" react-dom: "*" - checksum: 10/63795ca6b1665130d4fa331874ffb7881f46949d5fdad3a4633120e061fa34ea58138c1d048b3e24d49f88862e978fc256c8502cd540842cf87c0b98358f235d + checksum: 10/6ed9f36957b19fc2dcf1644a853030cce70775bec3fed596cab9156063d522d5cb52cb1479117e4390acbe45b69321c9eb33915d96414aabaf09bff40497bb4a languageName: node linkType: hard @@ -16240,12 +16595,21 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^4.3.0": - version: 4.3.0 - resolution: "node-addon-api@npm:4.3.0" +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10/8eea1d4d965930a177a0508695beb0d89b4c1d80bf330646a035357a1e8fc31e0d09686e2374996e96e757b947a7ece319f98ede3146683f162597c0bcb4df90 + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" dependencies: node-gyp: "npm:latest" - checksum: 10/d3b38d16cb9ad0714d965331d0e38cef1c27750c2c3343cd3464a9ed8158501a2910ccbf2fd9fdc476e806a19dbc9e0524ff9d66a7c779d42a9752a63ba30b80 + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 languageName: node linkType: hard @@ -16282,25 +16646,29 @@ __metadata: languageName: node linkType: hard -"node-gyp-build-optional-packages@npm:5.0.3": - version: 5.0.3 - resolution: "node-gyp-build-optional-packages@npm:5.0.3" +"node-gyp-build-optional-packages@npm:5.1.1": + version: 5.1.1 + resolution: "node-gyp-build-optional-packages@npm:5.1.1" + dependencies: + detect-libc: "npm:^2.0.1" bin: node-gyp-build-optional-packages: bin.js node-gyp-build-optional-packages-optional: optional.js node-gyp-build-optional-packages-test: build-test.js - checksum: 10/b407da0d3de637869a3c6920826e4033b78daba3db4c28459469f3a3f09b41d99d745c4318d09c7fdc1d147d875b440642dc043697bc932bed6beaa6bb1729ec + checksum: 10/96dbeeba03fe5b9e86e1dc4491d7932cbf4c23f4ef8e63fb83bbbdcaf4553d8cbd5f23b9bc3632cb76a0739524f4b64f829daa5b608ebd72285ffdb03a9bdd81 languageName: node linkType: hard -"node-gyp-build-optional-packages@npm:5.0.7": - version: 5.0.7 - resolution: "node-gyp-build-optional-packages@npm:5.0.7" +"node-gyp-build-optional-packages@npm:5.2.2": + version: 5.2.2 + resolution: "node-gyp-build-optional-packages@npm:5.2.2" + dependencies: + detect-libc: "npm:^2.0.1" bin: node-gyp-build-optional-packages: bin.js node-gyp-build-optional-packages-optional: optional.js node-gyp-build-optional-packages-test: build-test.js - checksum: 10/f61780b83ee665d88a1b2d0f5375d3455fabed1af4a009fd4396ed0b19ed6ad2215d4adbc76bd6eea0aafde0c72990e2cee9c888eeb28d6da2c8e5f8bce3ca0f + checksum: 10/f448a328cf608071dc8cc4426ac5be0daec4788e4e1759e9f7ffcd286822cc799384edce17a8c79e610c4bbfc8e3aff788f3681f1d88290e0ca7aaa5342a090f languageName: node linkType: hard @@ -16752,10 +17120,10 @@ __metadata: languageName: node linkType: hard -"ordered-binary@npm:^1.2.4": - version: 1.4.0 - resolution: "ordered-binary@npm:1.4.0" - checksum: 10/cdcc5f174736ee54871e954f7c23b6a0fbd9cfb3e861da6689e02675481f054e59bde2415fe8fe5ce217a7f709a6435f868c91e05f66c62f70902130055d0b85 +"ordered-binary@npm:^1.4.1": + version: 1.5.1 + resolution: "ordered-binary@npm:1.5.1" + checksum: 10/9b407e20ba90d4fc44938746295b3d301dcfa26983a88482e028e96479cd30dca6da33c052070bef034aa89280ff2befb75bbe4663f1f8210a12ce5586de2290 languageName: node linkType: hard @@ -16947,27 +17315,27 @@ __metadata: languageName: node linkType: hard -"parcel@npm:^2.8.3": - version: 2.8.3 - resolution: "parcel@npm:2.8.3" - dependencies: - "@parcel/config-default": "npm:2.8.3" - "@parcel/core": "npm:2.8.3" - "@parcel/diagnostic": "npm:2.8.3" - "@parcel/events": "npm:2.8.3" - "@parcel/fs": "npm:2.8.3" - "@parcel/logger": "npm:2.8.3" - "@parcel/package-manager": "npm:2.8.3" - "@parcel/reporter-cli": "npm:2.8.3" - "@parcel/reporter-dev-server": "npm:2.8.3" - "@parcel/utils": "npm:2.8.3" +"parcel@npm:^2.12.0": + version: 2.12.0 + resolution: "parcel@npm:2.12.0" + dependencies: + "@parcel/config-default": "npm:2.12.0" + "@parcel/core": "npm:2.12.0" + "@parcel/diagnostic": "npm:2.12.0" + "@parcel/events": "npm:2.12.0" + "@parcel/fs": "npm:2.12.0" + "@parcel/logger": "npm:2.12.0" + "@parcel/package-manager": "npm:2.12.0" + "@parcel/reporter-cli": "npm:2.12.0" + "@parcel/reporter-dev-server": "npm:2.12.0" + "@parcel/reporter-tracer": "npm:2.12.0" + "@parcel/utils": "npm:2.12.0" chalk: "npm:^4.1.0" commander: "npm:^7.0.0" get-port: "npm:^4.2.0" - v8-compile-cache: "npm:^2.0.0" bin: parcel: lib/bin.js - checksum: 10/1c57d86fc035f2830b73d7e1f4df0bcc5f027851e61f183a26b783077a76cac97ff2bafcc9adedd23b10a1a68aaa64bd20956682fab08c560395688535323cfa + checksum: 10/cd2a831107df536007d8b0100aba24da22fcebe00b432bd704398ba04c5ffb53b76dd455cb059991f97e5fa48101431030f4f5907d065cf42d40654564e2d683 languageName: node linkType: hard @@ -17990,7 +18358,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.0.0, react-dom@npm:^18.2.0": +"react-dom@npm:^18.0.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" dependencies: @@ -18002,6 +18370,18 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 + languageName: node + linkType: hard + "react-error-overlay@npm:6.0.9": version: 6.0.9 resolution: "react-error-overlay@npm:6.0.9" @@ -18016,13 +18396,20 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^18.0.0, react-is@npm:^18.2.0": +"react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" checksum: 10/200cd65bf2e0be7ba6055f647091b725a45dd2a6abef03bf2380ce701fd5edccee40b49b9d15edab7ac08a762bf83cb4081e31ec2673a5bfb549a36ba21570df languageName: node linkType: hard +"react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10/d5f60c87d285af24b1e1e7eaeb123ec256c3c8bdea7061ab3932e3e14685708221bf234ec50b21e10dd07f008f1b966a2730a0ce4ff67905b3872ff2042aec22 + languageName: node + linkType: hard + "react-jazzicon@npm:^1.0.4": version: 1.0.4 resolution: "react-jazzicon@npm:1.0.4" @@ -18035,12 +18422,12 @@ __metadata: languageName: node linkType: hard -"react-loading-skeleton@npm:^3.2.1": - version: 3.2.1 - resolution: "react-loading-skeleton@npm:3.2.1" +"react-loading-skeleton@npm:^3.5.0": + version: 3.5.0 + resolution: "react-loading-skeleton@npm:3.5.0" peerDependencies: react: ">=16.8.0" - checksum: 10/eba7794afc92f6ab7ce2541614244cf7cc19c029f89cbdc08e721235e5972e46d0fc6c2aa8c59c0c1e94a49fa1e1a5c59fbfeb67e5ee1fbe9a5b1f5a87dee4a8 + checksum: 10/e6a1385d07cbded44d82fa26ad9581274858a682ce728eb81a5c07816e9c1b74092ccb01dc0e79584a8d92d2f571dc6cd0481122d3817d19802e1af4f9961df5 languageName: node linkType: hard @@ -18083,27 +18470,27 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.11.0": - version: 6.11.0 - resolution: "react-router-dom@npm:6.11.0" +"react-router-dom@npm:^6.26.2": + version: 6.26.2 + resolution: "react-router-dom@npm:6.26.2" dependencies: - "@remix-run/router": "npm:1.6.0" - react-router: "npm:6.11.0" + "@remix-run/router": "npm:1.19.2" + react-router: "npm:6.26.2" peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 10/7a7d23e253edc89b0f7cb97f531abdc4fa76286bb1480083517e01962d93f3e1f610d303ac1793dd21b377018328302b5fa2e138b853d037187a9744d327d977 + checksum: 10/4eee37839bd1a660807c090b4d272e4aa9b95d8a9a932cdcdf7c5b10735f39b6db73bad79b08a3012386a7e225ff6bf60435e2741fb7c68e137ac5a6295d4308 languageName: node linkType: hard -"react-router@npm:6.11.0": - version: 6.11.0 - resolution: "react-router@npm:6.11.0" +"react-router@npm:6.26.2": + version: 6.26.2 + resolution: "react-router@npm:6.26.2" dependencies: - "@remix-run/router": "npm:1.6.0" + "@remix-run/router": "npm:1.19.2" peerDependencies: react: ">=16.8" - checksum: 10/0a2e37be8dc16a580b76d268a3bd372b35a7938dd468a04fe742e0253cf4df44736cfb7c311c481270db70299f39ff0170427cdf5f2aebe2b69b49c2d200a5c5 + checksum: 10/496e855b53e61066c1791e354f5d79eab56a128d9722fdc6486c3ecd3b3a0bf9968e927028f429893b157f3cc10fc09e890a055847723ee242663e7995fedc9d languageName: node linkType: hard @@ -18117,9 +18504,9 @@ __metadata: languageName: node linkType: hard -"react-use@npm:^17.4.0": - version: 17.4.0 - resolution: "react-use@npm:17.4.0" +"react-use@npm:^17.5.1": + version: 17.5.1 + resolution: "react-use@npm:17.5.1" dependencies: "@types/js-cookie": "npm:^2.2.6" "@xobotyi/scrollbar-width": "npm:^1.9.5" @@ -18127,7 +18514,7 @@ __metadata: fast-deep-equal: "npm:^3.1.3" fast-shallow-equal: "npm:^1.0.0" js-cookie: "npm:^2.2.1" - nano-css: "npm:^5.3.1" + nano-css: "npm:^5.6.2" react-universal-interface: "npm:^0.6.2" resize-observer-polyfill: "npm:^1.5.1" screenfull: "npm:^5.1.0" @@ -18136,13 +18523,13 @@ __metadata: ts-easing: "npm:^0.2.0" tslib: "npm:^2.1.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10/98566c4817b00251107824743ea9dff41f167b548bd5f249f6eb9e2ec09388a2de1e89988e4432cead3f8aa83cf706e0255db8a20c0615768c670751973d2761 + react: "*" + react-dom: "*" + checksum: 10/2da403a9949dbd964b9b8e20dcd354db66b7f7d5ca1f42572fbcdb06bd49ee828c295be4912cb87abc163d1b54820bb8c5fa85314a16c4579d9e30bf9cbd5759 languageName: node linkType: hard -"react@npm:^18.0.0, react@npm:^18.2.0": +"react@npm:^18.0.0": version: 18.2.0 resolution: "react@npm:18.2.0" dependencies: @@ -18151,6 +18538,15 @@ __metadata: languageName: node linkType: hard +"react@npm:^18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf + languageName: node + linkType: hard + "read-pkg-up@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg-up@npm:3.0.0" @@ -18783,7 +19179,7 @@ __metadata: languageName: node linkType: hard -"rtl-css-js@npm:^1.14.0": +"rtl-css-js@npm:^1.16.1": version: 1.16.1 resolution: "rtl-css-js@npm:1.16.1" dependencies: @@ -18921,6 +19317,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 + languageName: node + linkType: hard + "schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": version: 3.1.1 resolution: "schema-utils@npm:3.1.1" @@ -18990,7 +19395,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.0, semver@npm:^5.7.0, semver@npm:^5.7.1": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.5.0, semver@npm:^5.7.0": version: 5.7.1 resolution: "semver@npm:5.7.1" bin: @@ -19039,6 +19444,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:^7.5.2": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10/36b1fbe1a2b6f873559cd57b238f1094a053dbfd997ceeb8757d79d1d2089c56d1321b9f1069ce263dc64cfa922fa1d2ad566b39426fe1ac6c723c1487589e10 + languageName: node + linkType: hard + "semver@npm:~7.2.0": version: 7.2.3 resolution: "semver@npm:7.2.3" @@ -19568,13 +19982,6 @@ __metadata: languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": - version: 1.4.8 - resolution: "sourcemap-codec@npm:1.4.8" - checksum: 10/6fc57a151e982b5c9468362690c6d062f3a0d4d8520beb68a82f319c79e7a4d7027eeb1e396de0ecc2cd19491e1d602b2d06fd444feac9b63dd43fea4c55a857 - languageName: node - linkType: hard - "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -20033,10 +20440,10 @@ __metadata: languageName: node linkType: hard -"stylis@npm:^4.0.6": - version: 4.1.3 - resolution: "stylis@npm:4.1.3" - checksum: 10/0065b6954f7007ded81598d8390c92682dd312f4d9a7f928e70190f716ee4019e29f5dd364016f8428b8ef9b5b6b950b2be717d76a7d813302cdbf1321084374 +"stylis@npm:^4.3.0": + version: 4.3.4 + resolution: "stylis@npm:4.3.4" + checksum: 10/69b902a3c9fc3329c8ddb18d422f8130068356dd4d4a20ae245953679cc88ae08d49c55e32b0b57c8fe8a76f2ed7f32697240b8db4d368a25fc2db045ebaeba8 languageName: node linkType: hard @@ -20154,14 +20561,15 @@ __metadata: languageName: node linkType: hard -"swr@npm:^2.1.3": - version: 2.1.3 - resolution: "swr@npm:2.1.3" +"swr@npm:^2.2.5": + version: 2.2.5 + resolution: "swr@npm:2.2.5" dependencies: + client-only: "npm:^0.0.1" use-sync-external-store: "npm:^1.2.0" peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: 10/3057020385e46b8024056110c40e9fdae7cd50d502a771e44777268f7e08294973da0e174d0b224a07a58b6cd138d15cf38d2e6b320ebeeb8c2da18000f9041c + checksum: 10/f02b3bd5a198a0f62f9a53d7c0528c4a58aa61a43310bea169614b6e873dadb52599e856ef0775405b6aa7409835343da0cf328948aa892aa309bf4b7e7d6902 languageName: node linkType: hard @@ -20328,7 +20736,7 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.16.5, terser@npm:^5.2.0": +"terser@npm:^5.10.0, terser@npm:^5.16.5": version: 5.16.8 resolution: "terser@npm:5.16.8" dependencies: @@ -20620,6 +21028,44 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": "npm:^0.8.0" + "@tsconfig/node10": "npm:^1.0.7" + "@tsconfig/node12": "npm:^1.0.7" + "@tsconfig/node14": "npm:^1.0.0" + "@tsconfig/node16": "npm:^1.0.2" + acorn: "npm:^8.4.1" + acorn-walk: "npm:^8.1.1" + arg: "npm:^4.1.0" + create-require: "npm:^1.1.0" + diff: "npm:^4.0.1" + make-error: "npm:^1.1.1" + v8-compile-cache-lib: "npm:^3.0.1" + yn: "npm:3.1.1" + 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 + 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 + checksum: 10/a91a15b3c9f76ac462f006fa88b6bfa528130dcfb849dd7ef7f9d640832ab681e235b8a2bc58ecde42f72851cc1d5d4e22c901b0c11aa51001ea1d395074b794 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": version: 3.14.2 resolution: "tsconfig-paths@npm:3.14.2" @@ -21309,13 +21755,6 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache@npm:^2.0.0": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: 10/7de7423db6f48d76cffae93d70d503e160c97fc85e55945036d719111e20b33c4be5c21aa8b123a3da203bbb3bc4c8180f9667d5ccafcff11d749fae204ec7be - languageName: node - linkType: hard - "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -22288,13 +22727,6 @@ __metadata: languageName: node linkType: hard -"xxhash-wasm@npm:^0.4.2": - version: 0.4.2 - resolution: "xxhash-wasm@npm:0.4.2" - checksum: 10/6a54f2501181c82aa0cb9f91c8f9ce357283457887da00ff1c411da95ceb8890c20ec1449baaa946687db46c51ddcc4b737c6f7509dcb8c9b48b63841b6cb557 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" From 7cb9d803cdb1384afbbe1bcebcca120f1a3a7d7e Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Mon, 23 Sep 2024 16:53:23 +0100 Subject: [PATCH 10/10] chore: codeowners --- .github/CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e8725226..ee36ef96 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,5 +1,5 @@ # Default -* @jaybuidl @shotaronowhere +* @jaybuidl @mani99brar # Veascan veascan-subgraph-inbox/ @jaybuidl @alcercu @@ -7,5 +7,5 @@ veascan-subgraph-outbox/ @jaybuidl @alcercu veascan-web/ @jaybuidl @alcercu # Owned by everyone -yarn.lock @jaybuidl @shotaronowhere @alcercu -.gitignore @jaybuidl @shotaronowhere @alcercu +yarn.lock @jaybuidl @mani99brar @alcercu +.gitignore @jaybuidl @mani99brar @alcercu