From 6d012da0e1a382d7b592ea29c87175fd555d73e1 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Sun, 4 Jan 2026 17:27:21 +0800 Subject: [PATCH 01/13] sequencer failure --- .../contracts/l1/rollup/IL1MessageQueue.sol | 5 + contracts/contracts/l1/rollup/IRollup.sol | 8 + .../L1MessageQueueWithGasPriceOracle.sol | 11 + contracts/contracts/l1/rollup/Rollup.sol | 109 +++- contracts/contracts/test/Rollup.t.sol | 598 ++++++++++++++++++ 5 files changed, 728 insertions(+), 3 deletions(-) diff --git a/contracts/contracts/l1/rollup/IL1MessageQueue.sol b/contracts/contracts/l1/rollup/IL1MessageQueue.sol index 3a61d3832..e06a4df30 100644 --- a/contracts/contracts/l1/rollup/IL1MessageQueue.sol +++ b/contracts/contracts/l1/rollup/IL1MessageQueue.sol @@ -57,6 +57,11 @@ interface IL1MessageQueue { /// @notice The start index of all pending inclusion messages. function pendingQueueIndex() external view returns (uint256); + /// @notice Return the enqueue timestamp of the first unfinalized message. + /// @dev Used for checking if L1 messages are being processed within acceptable time. + /// @return timestamp The block.timestamp when the first unfinalized message was enqueued. + function getFirstUnfinalizedMessageEnqueueTime() external view returns (uint256 timestamp); + /// @notice Return the index of next appended message. /// @dev Also the total number of appended messages. function nextCrossDomainMessageIndex() external view returns (uint256); diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index caa0d300c..6fbf2a572 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -72,6 +72,9 @@ interface IRollup { /// @notice error zero address error ErrZeroAddress(); + /// @notice error invalid timing for permissionless batch submission + error InvalidTiming(); + /********** * Events * **********/ @@ -86,6 +89,11 @@ interface IRollup { /// @param batchHash The hash of the batch event RevertBatch(uint256 indexed batchIndex, bytes32 indexed batchHash); + /// @notice Emitted when a range of batches is reverted in commitBatchWithProof. + /// @param startBatchIndex The starting batch index (inclusive). + /// @param count The number of batches reverted. + event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count); + /// @notice Emitted when a batch is finalized. /// @param batchIndex The index of the batch. /// @param batchHash The hash of the batch diff --git a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol index 3d86a753c..d57ffcbf9 100644 --- a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol +++ b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol @@ -57,6 +57,8 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue /// @inheritdoc IL1MessageQueueWithGasPriceOracle address public whitelistChecker; + mapping(uint256 => uint256) public messageEnqueueTime; + /********************** * Function Modifiers * **********************/ @@ -260,6 +262,14 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue return hash; } + function getFirstUnfinalizedMessageEnqueueTime() external view returns (uint256 timestamp) { + return messageEnqueueTime[pendingQueueIndex]; + } + + function getMessageEnqueueTimestamp(uint256 index) external view returns (uint256 timestamp) { + return messageEnqueueTime[index]; + } + /***************************** * Public Mutating Functions * *****************************/ @@ -363,6 +373,7 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue uint256 _queueIndex = messageQueue.length; bytes32 _hash = computeTransactionHash(_sender, _queueIndex, _value, _target, _gasLimit, _data); messageQueue.push(_hash); + messageEnqueueTime[_queueIndex] = block.timestamp; // emit event emit QueueTransaction(_sender, _target, _value, uint64(_queueIndex), _gasLimit, _data); diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index c44303dcc..736f5f418 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -100,6 +100,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @notice committedStateRoots mapping(uint256 batchIndex => bytes32 stateRoot) public committedStateRoots; + uint256 public rollupDelayPeird; + /********************** * Function Modifiers * **********************/ @@ -220,6 +222,13 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput ) external payable override onlyActiveStaker nonReqRevert whenNotPaused { + _commitBatchWithBatchData(batchDataInput, batchSignatureInput); + } + + function _commitBatchWithBatchData( + BatchDataInput calldata batchDataInput, + BatchSignatureInput calldata batchSignatureInput + ) internal { require(batchDataInput.version == 0 || batchDataInput.version == 1, "invalid version"); require(batchDataInput.prevStateRoot != bytes32(0), "previous state root is zero"); require(batchDataInput.postStateRoot != bytes32(0), "new state root is zero"); @@ -259,7 +268,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } bytes32 _blobVersionedHash = (blobhash(0) == bytes32(0)) ? ZERO_VERSIONED_HASH : blobhash(0); - { + { uint256 _headerLength = BatchHeaderCodecV0.BATCH_HEADER_LENGTH; if (batchDataInput.version == 1) { _headerLength = BatchHeaderCodecV1.BATCH_HEADER_LENGTH; @@ -318,6 +327,52 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { emit CommitBatch(_batchIndex, committedBatches[_batchIndex]); } + function commitBatchWithProof( + BatchDataInput calldata batchDataInput, + BatchSignatureInput calldata batchSignatureInput, + bytes calldata _batchHeader, + bytes calldata _batchProof + ) external payable nonReqRevert whenNotPaused { + require(!inChallenge, "already in challenge"); + (uint256 _parentBatchPtr, ) = _loadBatchHeader(batchDataInput.parentBatchHeader); + uint256 _parentBatchIndex = BatchHeaderCodecV0.getBatchIndex(_parentBatchPtr); + require(_parentBatchIndex == lastFinalizedBatchIndex, "incorrect batch index"); + + // check delay timing - allow if EITHER batch submission OR L1 message processing is stalled + // This enables permissionless batch submission when sequencers are offline or censoring + if (batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeird >= block.timestamp && + IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeird >= block.timestamp + ) { + revert InvalidTiming(); + } + // revert batch from the parent batch to the last committed batch + uint256 revertCount = lastCommittedBatchIndex - _parentBatchIndex; + if (revertCount > 0) { + uint256 startBatchIndex = _parentBatchIndex + 1; + for (uint256 i = startBatchIndex; i <= lastCommittedBatchIndex; i++) { + committedBatches[i] = bytes32(0); + } + emit RevertBatchRange(startBatchIndex, revertCount); + } + lastCommittedBatchIndex = _parentBatchIndex; + + _commitBatchWithBatchData(batchDataInput, batchSignatureInput); + + // get batch data from batch header + (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); + // check batch hash + uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr); + require(committedBatches[_batchIndex] == _batchHash, "incorrect batch hash"); + + // verify consistency between batchDataInput and batchHeader + _verifyBatchConsistency(batchDataInput, memPtr); + + // verify proof + _verifyProof(memPtr, _batchProof); + // finalize batch + finalizeBatch(_batchHeader); + } + /// @inheritdoc IRollup /// @dev If the owner wants to revert a sequence of batches by sending multiple transactions, /// make sure to revert recent batches first. @@ -477,7 +532,10 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { *****************************/ /// @dev proveState proves a batch by submitting a proof. - function proveState(bytes calldata _batchHeader, bytes calldata _batchProof) external nonReqRevert whenNotPaused onlyActiveStaker{ + function proveState( + bytes calldata _batchHeader, + bytes calldata _batchProof + ) external nonReqRevert whenNotPaused onlyActiveStaker { // get batch data from batch header (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); // check batch hash @@ -614,6 +672,51 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } } + /// @dev Internal function to verify consistency between BatchDataInput and batch header. + /// @param batchDataInput The batch data input from the caller. + /// @param memPtr The memory pointer to the loaded batch header. + function _verifyBatchConsistency( + BatchDataInput calldata batchDataInput, + uint256 memPtr + ) private pure { + // verify version + require( + batchDataInput.version == BatchHeaderCodecV0.getVersion(memPtr), + "batch version mismatch" + ); + + // verify number of L1 messages + require( + batchDataInput.numL1Messages == BatchHeaderCodecV0.getL1MessagePopped(memPtr), + "l1 message count mismatch" + ); + + // verify previous state root + require( + batchDataInput.prevStateRoot == BatchHeaderCodecV0.getPrevStateHash(memPtr), + "prev state root mismatch" + ); + + // verify post state root + require( + batchDataInput.postStateRoot == BatchHeaderCodecV0.getPostStateHash(memPtr), + "post state root mismatch" + ); + + // verify withdrawal root + require( + batchDataInput.withdrawalRoot == BatchHeaderCodecV0.getWithdrawRootHash(memPtr), + "withdrawal root mismatch" + ); + + // verify parent batch hash + (, bytes32 _parentBatchHash) = _loadBatchHeader(batchDataInput.parentBatchHeader); + require( + _parentBatchHash == BatchHeaderCodecV0.getParentBatchHash(memPtr), + "parent batch hash mismatch" + ); + } + /// @dev Internal function to verify the zk proof. function _verifyProof(uint256 memPtr, bytes calldata _batchProof) private view { // Check validity of proof @@ -727,7 +830,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { if (_version == 0) { (_memPtr, _length) = BatchHeaderCodecV0.loadAndValidate(_batchHeader); } else if (_version == 1) { - (_memPtr, _length) = BatchHeaderCodecV1.loadAndValidate(_batchHeader); + (_memPtr, _length) = BatchHeaderCodecV1.loadAndValidate(_batchHeader); } else { revert("Unsupported batch version"); } diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 92d7d9dd2..e63ba6505 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -8,6 +8,604 @@ import {IL1Staking} from "../l1/staking/IL1Staking.sol"; import {BatchHeaderCodecV0} from "../libraries/codec/BatchHeaderCodecV0.sol"; import {BatchHeaderCodecV1} from "../libraries/codec/BatchHeaderCodecV1.sol"; +contract RollupCommitBatchWithProofTest is L1MessageBaseTest { + /// @dev Test contract for commitBatchWithProof function + /// This function allows permissionless batch submission when sequencers are stalled. + /// Key checks: inChallenge, parent batch finalized, timing delay, proof verification + + bytes public batchHeader0; + bytes32 public batchHash0; + IRollup.BatchSignatureInput public batchSignatureInput; + + // Slot constants for storage manipulation (from forge inspect Rollup storageLayout) + uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeird + uint256 constant FINALIZATION_PERIOD_SLOT = 152; // slot for finalizationPeriodSeconds + + // ZERO_VERSIONED_HASH constant from Rollup contract + bytes32 constant ZERO_VERSIONED_HASH = 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014; + + function setUp() public virtual override { + super.setUp(); + + // Setup batch signature input + batchSignatureInput = IRollup.BatchSignatureInput( + uint256(0), + abi.encode(uint256(0), new address[](0), uint256(0), new address[](0), uint256(0), new address[](0)), + bytes("0x") + ); + + // Import genesis batch + bytes memory _batchHeader0 = new bytes(249); + bytes32 bytesData0 = bytes32(uint256(0)); + bytes32 bytesData1 = bytes32(uint256(1)); + + assembly { + mstore(add(_batchHeader0, add(0x20, 25)), 1) + mstore(add(_batchHeader0, add(0x20, 57)), 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014) + mstore(add(_batchHeader0, add(0x20, 89)), bytesData0) + mstore(add(_batchHeader0, add(0x20, 121)), bytesData1) + } + + batchHeader0 = _batchHeader0; + + hevm.prank(multisig); + rollup.importGenesisBatch(batchHeader0); + batchHash0 = rollup.committedBatches(0); + + // Setup staker + hevm.deal(alice, 5 * STAKING_VALUE); + Types.StakerInfo memory stakerInfo = ffi.generateStakerInfo(alice); + address[] memory addrs = new address[](1); + addrs[0] = alice; + hevm.prank(multisig); + l1Staking.updateWhitelist(addrs, new address[](0)); + hevm.prank(alice); + l1Staking.register{value: STAKING_VALUE}(stakerInfo.tmKey, stakerInfo.blsKey); + + // Set rollupDelayPeird (e.g., 1 hour) - no prank needed for hevm.store + hevm.store(address(rollup), bytes32(ROLLUP_DELAY_PERIOD_SLOT), bytes32(uint256(3600))); + } + + /// @dev Helper to compute dataHash for a batch with no L1 messages + /// dataHash = keccak256(lastBlockNumber || numL1Messages) + function _computeDataHash(uint64 lastBlockNumber, uint16 numL1Messages) internal pure returns (bytes32) { + // Construct the data: 8 bytes lastBlockNumber + 2 bytes numL1Messages + bytes memory data = new bytes(10); + assembly { + mstore(add(data, 0x20), shl(192, lastBlockNumber)) // 8 bytes + mstore(add(data, 0x28), shl(240, numL1Messages)) // 2 bytes at offset 8 + } + return keccak256(data); + } + + /// @dev Helper to compute sequencerSetVerifyHash from sequencerSets + function _getSequencerSetVerifyHash() internal view returns (bytes32) { + return keccak256(batchSignatureInput.sequencerSets); + } + + /// @dev Helper to create batch header that matches what _commitBatchWithBatchData produces + function _createMatchingBatchHeader( + uint64 lastBlockNumber, + uint16 numL1Messages, + bytes32 prevStateRoot, + bytes32 postStateRoot, + bytes32 withdrawalRoot + ) internal view returns (bytes memory batchHeader1) { + batchHeader1 = new bytes(BatchHeaderCodecV0.BATCH_HEADER_LENGTH); + bytes32 _parentBatchHash = batchHash0; + bytes32 dataHash = _computeDataHash(lastBlockNumber, numL1Messages); + bytes32 sequencerSetVerifyHash = _getSequencerSetVerifyHash(); + + assembly { + mstore(add(batchHeader1, 0x20), 0) // version = 0 + mstore(add(batchHeader1, add(0x20, 1)), shl(192, 1)) // batchIndex = 1 + mstore(add(batchHeader1, add(0x20, 9)), shl(192, numL1Messages)) // l1MessagePopped + mstore(add(batchHeader1, add(0x20, 17)), shl(192, numL1Messages)) // totalL1MessagePopped + mstore(add(batchHeader1, add(0x20, 25)), dataHash) // dataHash + mstore(add(batchHeader1, add(0x20, 57)), ZERO_VERSIONED_HASH) // l2TxBlobVersionedHash (no blob in test) + mstore(add(batchHeader1, add(0x20, 89)), prevStateRoot) // prevStateHash + mstore(add(batchHeader1, add(0x20, 121)), postStateRoot) // postStateHash + mstore(add(batchHeader1, add(0x20, 153)), withdrawalRoot) // withdrawRootHash + mstore(add(batchHeader1, add(0x20, 185)), sequencerSetVerifyHash) // sequencerSetVerifyHash = keccak256(sequencerSets) + mstore(add(batchHeader1, add(0x20, 217)), _parentBatchHash) // parentBatchHash + } + } + + /// @dev Helper to mock verifier call + /// Note: The actual call is to verifyAggregateProof(uint256,uint256,bytes,bytes32) + function _mockVerifierCall() internal { + hevm.mockCall( + rollup.verifier(), + abi.encodeWithSignature("verifyAggregateProof(uint256,uint256,bytes,bytes32)"), + abi.encode() + ); + } + + /// @dev Helper to set finalization period to 0 for immediate finality + /// This is needed because commitBatchWithProof commits and finalizes in the same tx + function _setFinalizationPeriodToZero() internal { + hevm.store(address(rollup), bytes32(FINALIZATION_PERIOD_SLOT), bytes32(uint256(0))); + } + + /// @dev Helper to mock L1 message queue calls for stalled state + function _mockMessageQueueStalled() internal { + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), + abi.encode(1) // Very old timestamp - stalled + ); + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("popCrossDomainMessage(uint256,uint256)"), + abi.encode() + ); + } + + /// @notice Test: commitBatchWithProof reverts when parent batch index is not finalized + function test_commitBatchWithProof_reverts_when_parentBatchIndex_not_finalized() public { + // First commit batch 1 normally to create a non-finalized batch + IRollup.BatchDataInput memory batchDataInput1 = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + hevm.prank(alice); + rollup.commitBatch(batchDataInput1, batchSignatureInput); + + // Now batch 1 is committed but not finalized + // Create a batch header for batch 1 to use as parent + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); + + // Try to use batch 1 as parent in commitBatchWithProof + // This should fail because lastFinalizedBatchIndex is still 0, but parent is batch 1 + IRollup.BatchDataInput memory batchDataInput2 = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader1, + lastBlockNumber: 2, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(2)), + postStateRoot: bytes32(uint256(3)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader2 = new bytes(BatchHeaderCodecV0.BATCH_HEADER_LENGTH); + + hevm.prank(alice); + hevm.expectRevert("incorrect batch index"); + rollup.commitBatchWithProof( + batchDataInput2, + batchSignatureInput, + batchHeader2, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts when timing requirements not met + function test_commitBatchWithProof_reverts_when_timing_not_met() public { + // Mock message queue to return a recent timestamp (not stalled) + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), + abi.encode(block.timestamp) // Recent timestamp - not stalled + ); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); + + // Don't warp time - both conditions should fail: batch not stalled and L1 messages not stalled + hevm.prank(alice); + hevm.expectRevert(IRollup.InvalidTiming.selector); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts on version mismatch in consistency check + /// Note: Version 1 requires different header length, so this tests the "invalid version" error from _commitBatchWithBatchData + function test_commitBatchWithProof_reverts_on_invalid_version() public { + _mockMessageQueueStalled(); + hevm.warp(block.timestamp + 7200); + + // Create batchDataInput with version 2 (invalid) + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 2, // Invalid version + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("invalid version"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts when paused + function test_commitBatchWithProof_reverts_when_paused() public { + // Pause the rollup contract + hevm.prank(multisig); + rollup.setPause(true); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("Pausable: paused"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts on zero previous state root + function test_commitBatchWithProof_reverts_on_zero_prevStateRoot() public { + _mockMessageQueueStalled(); + hevm.warp(block.timestamp + 7200); + + // Create batchDataInput with zero prevStateRoot + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(0), // Zero! + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(0), bytes32(uint256(2)), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("previous state root is zero"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts on zero post state root + function test_commitBatchWithProof_reverts_on_zero_postStateRoot() public { + _mockMessageQueueStalled(); + hevm.warp(block.timestamp + 7200); + + // Create batchDataInput with zero postStateRoot + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(0), // Zero! + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(0), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("new state root is zero"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts on incorrect parent batch hash + function test_commitBatchWithProof_reverts_on_incorrect_parent_batch_hash() public { + _mockMessageQueueStalled(); + hevm.warp(block.timestamp + 7200); + + // Create a fake parent batch header with wrong data + bytes memory fakeBatchHeader0 = new bytes(249); + assembly { + mstore(add(fakeBatchHeader0, add(0x20, 25)), 999) // Wrong data + } + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: fakeBatchHeader0, // Using fake parent + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("incorrect parent batch hash"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof reverts on incorrect previous state root (doesn't match parent) + function test_commitBatchWithProof_reverts_on_incorrect_previous_state_root() public { + _mockMessageQueueStalled(); + hevm.warp(block.timestamp + 7200); + + // Genesis batch has stateRoot = 1, so using 999 should fail + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(999)), // Doesn't match genesis state root + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(999)), bytes32(uint256(2)), getTreeRoot()); + + hevm.prank(alice); + hevm.expectRevert("incorrect previous state root"); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + bytes("") + ); + } + + /// @notice Test: commitBatchWithProof succeeds when system is stalled + function test_commitBatchWithProof_succeeds_when_stalled() public { + _mockVerifierCall(); + _mockMessageQueueStalled(); + _setFinalizationPeriodToZero(); // Allow immediate finality + + // Warp time to simulate stall (> rollupDelayPeird) + hevm.warp(block.timestamp + 7200); + + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + + hevm.prank(alice); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + hex"deadbeef" // Non-empty proof required + ); + + // Verify batch was committed and finalized + assertEq(rollup.lastCommittedBatchIndex(), 1); + assertEq(rollup.lastFinalizedBatchIndex(), 1); + assertEq(rollup.finalizedStateRoots(1), postStateRoot); + assertTrue(rollup.withdrawalRoots(withdrawalRoot)); + } + + /// @notice Test: commitBatchWithProof emits CommitBatch and FinalizeBatch events + function test_commitBatchWithProof_emits_events() public { + _mockVerifierCall(); + _mockMessageQueueStalled(); + _setFinalizationPeriodToZero(); + hevm.warp(block.timestamp + 7200); + + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + + // Expect CommitBatch event (check batchIndex only) + hevm.expectEmit(true, false, false, false); + emit IRollup.CommitBatch(1, bytes32(0)); + + hevm.prank(alice); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + hex"deadbeef" // Non-empty proof required + ); + } + + /// @notice Test: commitBatchWithProof emits RevertBatchRange when reverting uncommitted batches + function test_commitBatchWithProof_reverts_and_emits_RevertBatchRange() public { + // First commit batch 1 normally + IRollup.BatchDataInput memory batchDataInput1 = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: bytes32(uint256(1)), + postStateRoot: bytes32(uint256(2)), + withdrawalRoot: getTreeRoot() + }); + + hevm.prank(alice); + rollup.commitBatch(batchDataInput1, batchSignatureInput); + + assertEq(rollup.lastCommittedBatchIndex(), 1); + assertTrue(rollup.committedBatches(1) != bytes32(0)); + + // Setup mocks for commitBatchWithProof + _mockVerifierCall(); + _mockMessageQueueStalled(); + _setFinalizationPeriodToZero(); + hevm.warp(block.timestamp + 7200); + + // Use same state roots - this will revert batch 1 and commit a new batch 1 with same data + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory newBatchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + bytes memory newBatchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + + // Expect RevertBatchRange event: revert 1 batch (batch 1) + hevm.expectEmit(true, false, false, true); + emit IRollup.RevertBatchRange(1, 1); + + hevm.prank(alice); + rollup.commitBatchWithProof( + newBatchDataInput, + batchSignatureInput, + newBatchHeader1, + hex"deadbeef" // Non-empty proof required + ); + + // Verify batch was finalized + assertEq(rollup.lastFinalizedBatchIndex(), 1); + } + + /// @notice Test: commitBatchWithProof calls verifier with proof + function test_commitBatchWithProof_calls_verifier() public { + _mockMessageQueueStalled(); + _setFinalizationPeriodToZero(); + hevm.warp(block.timestamp + 7200); + + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + bytes memory mockProof = hex"deadbeef"; + + // Mock the verifier - it should be called with the proof + _mockVerifierCall(); + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("popCrossDomainMessage(uint256,uint256)"), + abi.encode() + ); + + hevm.prank(alice); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + mockProof + ); + + // Verify batch was finalized (proof verification passed) + assertEq(rollup.lastFinalizedBatchIndex(), 1); + } + + /// @notice Test: commitBatchWithProof verifies batch consistency + function test_commitBatchWithProof_verifies_consistency() public { + _mockVerifierCall(); + _mockMessageQueueStalled(); + _setFinalizationPeriodToZero(); + hevm.warp(block.timestamp + 7200); + + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + // Create batch header with matching data + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + + hevm.prank(alice); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + hex"deadbeef" // Non-empty proof required + ); + + // Verify the consistency check passed and batch was finalized + assertEq(rollup.lastFinalizedBatchIndex(), 1); + assertEq(rollup.finalizedStateRoots(1), postStateRoot); + } +} + contract RollupCommitBatchTest is L1MessageBaseTest { address public caller = address(0xb4c79daB8f259C7Aee6E5b2Aa729821864227e84); IRollup.BatchDataInput public batchDataInput; From ff3eca1259bd4f6b021a49e6d4074816d594e989 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Mon, 5 Jan 2026 15:19:23 +0800 Subject: [PATCH 02/13] make bindings --- ...essagequeuewithgaspriceoracle_deployed.hex | 2 +- bindings/bin/rollup_deployed.hex | 2 +- .../l1messagequeuewithgaspriceoracle.go | 97 ++++++++- .../l1messagequeuewithgaspriceoracle_more.go | 4 +- bindings/bindings/rollup.go | 201 +++++++++++++++++- bindings/bindings/rollup_more.go | 4 +- 6 files changed, 300 insertions(+), 10 deletions(-) diff --git a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex index a0cd87ec7..6fbcb4989 100644 --- a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex +++ b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex @@ -1 +1 @@ -0x608060405234801561000f575f80fd5b5060043610610184575f3560e01c8063a85006ca116100dd578063d99bc80e11610088578063e3176bd511610063578063e3176bd51461037a578063f2fde38b14610383578063fd0ad31e14610396575f80fd5b8063d99bc80e1461033a578063da35a26f1461034d578063e172d3a114610360575f80fd5b8063bdc6f0a0116100b8578063bdc6f0a0146102ed578063c276067714610300578063d5ad4a9714610327575f80fd5b8063a85006ca146102b1578063ae453cd5146102ba578063bb7862ca146102cd575f80fd5b80635f9cd92e1161013d5780638da5cb5b116101185780638da5cb5b14610259578063927ede2d146102775780639b1597821461029e575f80fd5b80635f9cd92e146101f2578063715018a6146102055780638770d7071461020d575f80fd5b80633e4cbbe61161016d5780633e4cbbe6146101c35780635ad9945a146101d65780635e45da23146101e9575f80fd5b806329aa604b146101885780633c7f5283146101ae575b5f80fd5b61019b610196366004611173565b61039e565b6040519081526020015b60405180910390f35b6101c16101bc36600461118a565b6103bd565b005b61019b6101d13660046111cd565b61052e565b61019b6101e436600461123a565b6105e2565b61019b60685481565b6101c16102003660046112b6565b6107d2565b6101c1610867565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a5565b60335473ffffffffffffffffffffffffffffffffffffffff16610234565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102ac3660046112cf565b61087a565b61019b60675481565b61019b6102c8366004611173565b61095c565b606b546102349073ffffffffffffffffffffffffffffffffffffffff1681565b6101c16102fb366004611325565b6109d2565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c1610335366004611173565b610b03565b6101c1610348366004611173565b610b49565b6101c161035b366004611398565b610b8f565b61019b61036e3660046113c2565b60100261520801919050565b61019b60655481565b6101c16103913660046112b6565b610d48565b60665461019b565b606681815481106103ad575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104475760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156104995760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d657373616765730000000000000000000000604482015260640161043e565b81606754146104ea5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d61746368000000000000000000000000604482015260640161043e565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa15801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c09190611401565b156105cc57505f6105dc565b6065546105d99083611427565b90505b92915050565b5f607e8161068c565b5f816105f957506001919050565b5b811561060f5760089190911c906001016105fa565b919050565b80608083106001811461064c5761062a846105eb565b60808101835360018301925084816020036008021b835280830192505061066d565b848415166001811461066057848353610665565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061069f60018c83610614565b90506106ad60018983610614565b90506106b98982610675565b90506106c760018b83610614565b9050600186146001811461072f576038871060018114610714576106ea886105eb565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610729565b87608001835360018301925087898437918701915b50610740565b61073d5f89355f1a84610614565b91505b5061074b8c82610675565b90508181035f80603883106001811461077e57610767846105eb565b60f78101600882021b851793506001019150610789565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b6107da610de5565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61086f610de5565b6108785f610e4c565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109255760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161043e565b610930838383610ec2565b337311110000000000000000000000000000000011110161095581865f878787610fbe565b5050505050565b6066545f9082106109af5760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e6765000000000000604482015260640161043e565b606682815481106109c2576109c2611463565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a7d5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f6174657761790000000000000000000000000000000000000000000000000000606482015260840161043e565b73ffffffffffffffffffffffffffffffffffffffff86163b15610ae25760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161043e565b610aed838383610ec2565b610afb868686868686610fbe565b505050505050565b610b0b610de5565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610522565b610b51610de5565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610522565b5f54610100900460ff1615808015610bad57505f54600160ff909116105b80610bc65750303b158015610bc657505f5460ff166001145b610c385760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161043e565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610c94575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610c9c61106f565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610d43575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d50610de5565b73ffffffffffffffffffffffffffffffffffffffff8116610dd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161043e565b610de281610e4c565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043e565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610f3a5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d6974000000000000000000000000000000000000000000000000000000606482015260840161043e565b601081026152080180841015610fb85760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e7369632067617300000000000000000000000000606482015260840161043e565b50505050565b6066545f610fd18883888a8989896105e2565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e9061105d908a9087908b908b908b90611490565b60405180910390a35050505050505050565b5f54610100900460ff166110eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6108785f54610100900460ff1661116a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b61087833610e4c565b5f60208284031215611183575f80fd5b5035919050565b5f806040838503121561119b575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461060f575f80fd5b5f80604083850312156111de575f80fd5b6111e7836111aa565b946020939093013593505050565b5f8083601f840112611205575f80fd5b50813567ffffffffffffffff81111561121c575f80fd5b602083019150836020828501011115611233575f80fd5b9250929050565b5f805f805f805f60c0888a031215611250575f80fd5b611259886111aa565b96506020880135955060408801359450611275606089016111aa565b93506080880135925060a088013567ffffffffffffffff811115611297575f80fd5b6112a38a828b016111f5565b989b979a50959850939692959293505050565b5f602082840312156112c6575f80fd5b6105d9826111aa565b5f805f80606085870312156112e2575f80fd5b6112eb856111aa565b935060208501359250604085013567ffffffffffffffff81111561130d575f80fd5b611319878288016111f5565b95989497509550505050565b5f805f805f8060a0878903121561133a575f80fd5b611343876111aa565b9550611351602088016111aa565b94506040870135935060608701359250608087013567ffffffffffffffff81111561137a575f80fd5b61138689828a016111f5565b979a9699509497509295939492505050565b5f80604083850312156113a9575f80fd5b823591506113b9602084016111aa565b90509250929050565b5f80602083850312156113d3575f80fd5b823567ffffffffffffffff8111156113e9575f80fd5b6113f5858286016111f5565b90969095509350505050565b5f60208284031215611411575f80fd5b81518015158114611420575f80fd5b9392505050565b80820281158282048414176105dc577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a +0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b73660046111f4565b610413565b6040519081526020015b60405180910390f35b6101e26101dd36600461120b565b610432565b005b6101bc6101f236600461124e565b6105a3565b6101bc6102053660046112bb565b610657565b6101bc60685481565b6101e2610221366004611337565b610847565b6101e26108dc565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a63660046111f4565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611350565b6108ef565b6101bc60675481565b6101bc6103083660046111f4565b6109d1565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103513660046113a6565b610a47565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b3660046111f4565b610b78565b6101e261039e3660046111f4565b610bbe565b6101e26103b1366004611419565b610c04565b6101bc6103c4366004611443565b60100261520801919050565b6101bc60655481565b6101e26103e7366004611337565b610dbd565b6101bc6103fa3660046111f4565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104bc5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b61010081111561050e5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104b3565b816067541461055f5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104b3565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610611573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106359190611482565b1561064157505f610651565b60655461064e90836114a8565b90505b92915050565b5f607e81610701565b5f8161066e57506001919050565b5b81156106845760089190911c9060010161066f565b919050565b8060808310600181146106c15761069f84610660565b60808101835360018301925084816020036008021b83528083019250506106e2565b84841516600181146106d5578483536106da565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061071460018c83610689565b905061072260018983610689565b905061072e89826106ea565b905061073c60018b83610689565b905060018614600181146107a45760388710600181146107895761075f88610660565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161079e565b87608001835360018301925087898437918701915b506107b5565b6107b25f89355f1a84610689565b91505b506107c08c826106ea565b90508181035f8060388310600181146107f3576107dc84610660565b60f78101600882021b8517935060010191506107fe565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084f610e5a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e4610e5a565b6108ed5f610ec1565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461099a5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104b3565b6109a5838383610f37565b33731111000000000000000000000000000000001111016109ca81865f878787611033565b5050505050565b6066545f908210610a245760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104b3565b60668281548110610a3757610a376114e4565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610af25760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104b3565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b575760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104b3565b610b62838383610f37565b610b70868686868686611033565b505050505050565b610b80610e5a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610597565b610bc6610e5a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610597565b5f54610100900460ff1615808015610c2257505f54600160ff909116105b80610c3b5750303b158015610c3b57505f5460ff166001145b610cad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104b3565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d09575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d116110f0565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610db8575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dc5610e5a565b73ffffffffffffffffffffffffffffffffffffffff8116610e4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104b3565b610e5781610ec1565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b3565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610faf5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104b3565b60108102615208018084101561102d5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104b3565b50505050565b6066545f6110468883888a898989610657565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906110de908a9087908b908b908b90611511565b60405180910390a35050505050505050565b5f54610100900460ff1661116c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed5f54610100900460ff166111eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed33610ec1565b5f60208284031215611204575f80fd5b5035919050565b5f806040838503121561121c575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610684575f80fd5b5f806040838503121561125f575f80fd5b6112688361122b565b946020939093013593505050565b5f8083601f840112611286575f80fd5b50813567ffffffffffffffff81111561129d575f80fd5b6020830191508360208285010111156112b4575f80fd5b9250929050565b5f805f805f805f60c0888a0312156112d1575f80fd5b6112da8861122b565b965060208801359550604088013594506112f66060890161122b565b93506080880135925060a088013567ffffffffffffffff811115611318575f80fd5b6113248a828b01611276565b989b979a50959850939692959293505050565b5f60208284031215611347575f80fd5b61064e8261122b565b5f805f8060608587031215611363575f80fd5b61136c8561122b565b935060208501359250604085013567ffffffffffffffff81111561138e575f80fd5b61139a87828801611276565b95989497509550505050565b5f805f805f8060a087890312156113bb575f80fd5b6113c48761122b565b95506113d26020880161122b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156113fb575f80fd5b61140789828a01611276565b979a9699509497509295939492505050565b5f806040838503121561142a575f80fd5b8235915061143a6020840161122b565b90509250929050565b5f8060208385031215611454575f80fd5b823567ffffffffffffffff81111561146a575f80fd5b61147685828601611276565b90969095509350505050565b5f60208284031215611492575f80fd5b815180151581146114a1575f80fd5b9392505050565b8082028115828204841417610651577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 8f137b13b..606e26a86 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063cd4edc69116100b7578063cd4edc6914610917578063ce5db8d61461092a578063d279c1911461093f575f80fd5b8063b35dac4e146108ba578063b3e0a509146108d9578063bedb86fb146108f8575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d1461085b578063b31a77d314610886578063b34844251461089b575f80fd5b8063a415d8dc146107f9578063a479265d14610827578063a4f209b01461083c575f80fd5b80638f1d37761161016c5780638f1d3776146106f9578063910129d4146107a957806397fc007c146107da575f80fd5b8063728cdbca146106a457806388b1ea09146106c35780638da5cb5b146106dc575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa146106465780636c578c1d14610671578063715018a614610690575f80fd5b80635ef7a94a1461057b5780635f77cf1d146105db5780636126729014610627575f80fd5b8063428868b51161022c578063428868b51461053257806357e0af6c146105455780635c975abb14610564575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046140c8565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b506103966103913660046140fa565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614158565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046140c8565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046141a0565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046140c8565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046140c8565b611326565b34801561047c575f80fd5b5061036961048b3660046140c8565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046140c8565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b6103966105403660046141df565b611354565b348015610550575f80fd5b5061039661055f3660046140c8565b611bbb565b34801561056f575f80fd5b5060655460ff1661033f565b348015610586575f80fd5b506105bb6105953660046140c8565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105e6575f80fd5b5061060e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610632575f80fd5b506103966106413660046140c8565b611c66565b348015610651575f80fd5b506103696106603660046140c8565b60ab6020525f908152604090205481565b34801561067c575f80fd5b5061039661068b3660046140fa565b611e7b565b34801561069b575f80fd5b50610396611f38565b3480156106af575f80fd5b506103966106be36600461424c565b611f4b565b3480156106ce575f80fd5b5060a65461033f9060ff1681565b3480156106e7575f80fd5b506033546001600160a01b03166104e6565b348015610704575f80fd5b506107656107133660046140c8565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107b4575f80fd5b5061033f6107c33660046140c8565b5f90815260a4602052604090206003015460ff1690565b3480156107e5575f80fd5b506103966107f43660046140fa565b61228e565b348015610804575f80fd5b5061033f6108133660046140fa565b609f6020525f908152604090205460ff1681565b348015610832575f80fd5b5061036960995481565b348015610847575f80fd5b506103966108563660046140c8565b612371565b348015610866575f80fd5b506103696108753660046140fa565b60a56020525f908152604090205481565b348015610891575f80fd5b5061036960a85481565b3480156108a6575f80fd5b506103966108b53660046142a7565b612421565b3480156108c5575f80fd5b506103966108d43660046140fa565b612742565b3480156108e4575f80fd5b506103966108f33660046141a0565b61279b565b348015610903575f80fd5b5061039661091236600461431b565b612aeb565b61039661092536600461434d565b612c46565b348015610935575f80fd5b5061036960985481565b34801561094a575f80fd5b506103966109593660046140fa565b613212565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046140c8565b6132d1565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046140c8565b61331b565b3480156109db575f80fd5b506103966109ea3660046140fa565b6133be565b3480156109fa575f80fd5b5061036960a95481565b610a0c61344b565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade61344b565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b3985856134a5565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856143a2565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826143b5565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132d1565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906143a2565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e8761353e565b5f80610e9384846134a5565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611326565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132d1565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856143b5565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f26111e5846011015160c01c90565b600985015160c01c613591565b60a25f6112006001846143b5565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123990846143b5565b81526020019081526020015f205f905560a45f60018361125991906143b5565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611302866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134e57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e491906143c8565b6114305760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a854156114805760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b61148861353e565b61149560208301836143e3565b60ff1615806114b357506114ac60208301836143e3565b60ff166001145b6114ff5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b60808201356115505760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a08201356115a15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f806115b86115b36020860186614403565b6134a5565b915091505f6115cb836001015160c01c90565b90505f60a1816115dc8460016143a2565b81526020019081526020015f2054146116375760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e5481146116885760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a1602052604090205482146116e45760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab60205260409020546080860135146117445760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f611753846011015160c01c90565b90505f61177f6117696060890160408a01614464565b61177960808a0160608b0161447d565b8461364e565b9050611791608088016060890161447d565b6001939093019261ffff1691909101905f8049156117b0575f496117d2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96117e360208a018a6143e3565b60ff166001036117f257506101015b6040805182810190915296506118178761180f60208c018c6143e3565b60ff16613692565b60c085901b60018801526118458761183560808c0160608d0161447d565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526118a98761188a60208b018b614403565b60405161189892919061449e565b604051809103902060b99190910152565b60d9870186905260016118bf60208b018b6143e3565b60ff16106118f1576118f1876118db60608c0160408d01614464565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156119505760a7545f90815260a460205260409020600201546099544291611943916143a2565b61194d91906143b5565b90505b6040518060800160405280428152602001826098544261197091906143a2565b61197a91906143a2565b815260200161198f60608d0160408e01614464565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3191906144ad565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590611a9990611a93908c018c614403565b5f613699565b5f611aa760408d018d614403565b6040518663ffffffff1660e01b8152600401611ac795949392919061450b565b602060405180830381865afa158015611ae2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0691906143c8565b611b785760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b611bc361344b565b5f81118015611bd457506099548114155b611c205760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8657505f5460ff8083169116105b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d335f5460ff1690565b60ff16600214611d855760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b81611df85760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab6020526040902054611e2157609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c5a565b611e8361344b565b6001600160a01b0381165f908152609f602052604090205460ff16611eea5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b611f4061344b565b611f495f6136ed565b565b5f54610100900460ff1615808015611f6957505f54600160ff909116105b80611f825750303b158015611f8257505f5460ff166001145b611ff45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff191660011790558015612032575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038616158061204f57506001600160a01b038516155b15612086576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166120dc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b6120e4613756565b6120ec6137da565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612285575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61229661344b565b6001600160a01b038116158015906122bc5750609c546001600160a01b03828116911614155b6123085760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61237961344b565b5f81118015612389575060648111155b8015612397575060a9548114155b6123e35760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c5a565b60a854156124715760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b61247961353e565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156124e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906143c8565b6125555760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b5f8061256186866134a5565b915091505f612574836001015160c01c90565b5f81815260a1602052604090205490915082146125d35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6125dc816132d1565b6126285760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291612681916143a2565b116126f7575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526126f29183919061385e565b612285565b6127028386866139ba565b61228581336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613b6d565b61274a61344b565b60aa80545f90915561275c8282613c39565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c5a565b6127a361344b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561281a5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f8061282684846134a5565b915091505f612839836001015160c01c90565b905080156128895760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f612895846079015190565b9050806128e45760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c156129395760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612945856019015190565b036129925760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146129be856039015190565b14612a0b5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612af361344b565b8015612c1457612b01613ce4565b60a65460ff1615612bd35760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612b559084906143a2565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612c1c613d3e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612bf6565b50565b335f908152609f602052604090205460ff16612ca45760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a85415612cf45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612cfc61353e565b60a65460ff1615612d4f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d5410612daa5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a160205260409020548114612e115760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b612e248267ffffffffffffffff16611326565b612e705760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612eeb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a260205260409020600101544210612f7b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fef91906144ad565b34101561303e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161319091815260200190565b60405180910390a35f609d5460016131a891906143a2565b90505b609e548111613200578267ffffffffffffffff1681146131ee576099545f82815260a26020526040812060010180549091906131e89084906143a2565b90915550505b806131f88161457e565b9150506131ab565b505060a6805460ff1916600117905550565b335f90815260a56020526040812054908190036132715760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a5602052604081205561328a8282613c39565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516132c591815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134e5750505f90815260a46020526040902060030154610100900460ff161590565b61332361344b565b5f8111801561333457506098548114155b6133805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c5a565b6133c661344b565b6001600160a01b0381166134425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b612c43816136ed565b6033546001600160a01b03163314611f495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134b28585613d77565b90505f8160ff165f036134d3576134c98686613de7565b9094509050613530565b8160ff166001036134e8576134c98686613e50565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610a70565b808420925050509250929050565b60655460ff1615611f495760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361359c575050565b8082035f5b82811015613648576101008184038111156135bb57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050506101008301925050610100810190506135a1565b50505050565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016136838161ffff871686613ea3565b82900390912095945050505050565b8082535050565b60605f808080806136ac888a018a6146a2565b95509550955095509550508187106136ca5794506136e69350505050565b8387106136de5782955050505050506136e6565b509293505050505b9392505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166137d25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49613f69565b5f54610100900460ff166138565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49613ff1565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156138e2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390691906144ad565b5f86815260a460205260409020600101549091506139259082906143a2565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906139649084906143a2565b909155505060405161397790849061473f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613a075760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f613a16846001015160c01c90565b90505f613a24856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613a53876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613b15885160f81c90565b858888866040518663ffffffff1660e01b8152600401613b3995949392919061476b565b5f6040518083038186803b158015613b4f575f80fd5b505afa158015613b61573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613b91908461479c565b613b9b91906147b3565b9050613ba781836143b5565b60aa5f828254613bb791906143a2565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613be39084906143a2565b9091555050604051613bf690849061473f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613ce0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080613cde5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613cec61353e565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d213390565b6040516001600160a01b03909116815260200160405180910390a1565b613d46614076565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613d21565b5f81613dc55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610a70565b82825f818110613dd757613dd76147eb565b919091013560f81c949350505050565b5f8160f9811015613e3a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040529250929050565b5f816101018114613e3a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610a70565b5f825f03613eb25750826136e6565b609b546001600160a01b03165f5b84811015613f5f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015613f26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f4a91906144ad565b87525060209095019460019384019301613ec0565b5093949350505050565b5f54610100900460ff16613fe55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff1661406d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49336136ed565b60655460ff16611f495760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f602082840312156140d8575f80fd5b5035919050565b80356001600160a01b03811681146140f5575f80fd5b919050565b5f6020828403121561410a575f80fd5b6136e6826140df565b5f8083601f840112614123575f80fd5b50813567ffffffffffffffff81111561413a575f80fd5b602083019150836020828501011115614151575f80fd5b9250929050565b5f805f6040848603121561416a575f80fd5b833567ffffffffffffffff811115614180575f80fd5b61418c86828701614113565b909790965060209590950135949350505050565b5f80602083850312156141b1575f80fd5b823567ffffffffffffffff8111156141c7575f80fd5b6141d385828601614113565b90969095509350505050565b5f80604083850312156141f0575f80fd5b823567ffffffffffffffff80821115614207575f80fd5b9084019060e0828703121561421a575f80fd5b9092506020840135908082111561422f575f80fd5b50830160608186031215614241575f80fd5b809150509250929050565b5f805f805f8060c08789031215614261575f80fd5b61426a876140df565b9550614278602088016140df565b9450614286604088016140df565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156142ba575f80fd5b843567ffffffffffffffff808211156142d1575f80fd5b6142dd88838901614113565b909650945060208701359150808211156142f5575f80fd5b5061430287828801614113565b95989497509550505050565b8015158114612c43575f80fd5b5f6020828403121561432b575f80fd5b81356136e68161430e565b803567ffffffffffffffff811681146140f5575f80fd5b5f806040838503121561435e575f80fd5b61436783614336565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134e5761134e614375565b8181038181111561134e5761134e614375565b5f602082840312156143d8575f80fd5b81516136e68161430e565b5f602082840312156143f3575f80fd5b813560ff811681146136e6575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614436575f80fd5b83018035915067ffffffffffffffff821115614450575f80fd5b602001915036819003821315614151575f80fd5b5f60208284031215614474575f80fd5b6136e682614336565b5f6020828403121561448d575f80fd5b813561ffff811681146136e6575f80fd5b818382375f9101908152919050565b5f602082840312156144bd575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156145555784516001600160a01b031683529383019391830191600101614530565b505087604086015284810360608601526145708187896144c4565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ae576145ae614375565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145f1575f80fd5b8135602067ffffffffffffffff8083111561460e5761460e6145b5565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614651576146516145b5565b6040529384526020818701810194908101925087851115614670575f80fd5b6020870191505b8482101561469757614688826140df565b83529183019190830190614677565b979650505050505050565b5f805f805f8060c087890312156146b7575f80fd5b86359550602087013567ffffffffffffffff808211156146d5575f80fd5b6146e18a838b016145e2565b96506040890135955060608901359150808211156146fd575f80fd5b6147098a838b016145e2565b94506080890135935060a0890135915080821115614725575f80fd5b5061473289828a016145e2565b9150509295509295509295565b5f82515f5b8181101561475e5760208186018101518583015201614744565b505f920191825250919050565b858152846020820152608060408201525f61478a6080830185876144c4565b90508260608301529695505050505050565b808202811582820484141761134e5761134e614375565b5f826147e6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c6343000818000a +0x60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e146109da578063e3fff1dd146109ef578063f2fde38b14610a0e578063fb1e8b0414610a2d575f80fd5b8063d279c1911461097d578063ddd8a3dc1461099c578063de8b3035146109bb575f80fd5b8063c5bde702116100c2578063c5bde70214610940578063cd4edc6914610955578063ce5db8d614610968575f80fd5b8063b35dac4e146108e3578063b3e0a50914610902578063bedb86fb14610921575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d14610884578063b31a77d3146108af578063b3484425146108c4575f80fd5b8063a415d8dc14610822578063a479265d14610850578063a4f209b014610865575f80fd5b80638f1d3776116101775780638f1d377614610722578063910129d4146107d257806397fc007c14610803575f80fd5b8063728cdbca146106cd57806388b1ea09146106ec5780638da5cb5b14610705575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461065057806368589dfa1461066f5780636c578c1d1461069a578063715018a6146106b9575f80fd5b80635c975abb1461058d5780635ef7a94a146105a45780635f77cf1d14610604575f80fd5b8063428868b511610242578063428868b5146105485780634e8f1d671461055b57806357e0af6c1461056e575f80fd5b80632b7ac3f3146104dd5780633b70c18a146105145780633e001b6614610533575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b506103556103413660046146ac565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046146de565b610a42565b005b3480156103b9575f80fd5b506103ac6103c836600461473c565b610b14565b3480156103d8575f80fd5b506103556103e73660046146ac565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e366004614784565b610e6d565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b506103556104523660046146ac565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b506103556104823660046146ac565b611364565b348015610492575f80fd5b5061037f6104a13660046146ac565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc3660046146ac565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546104fc906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561051f575f80fd5b50609b546104fc906001600160a01b031681565b34801561053e575f80fd5b5061037f60aa5481565b6103ac6105563660046147e9565b611392565b6103ac610569366004614849565b6114d4565b348015610579575f80fd5b506103ac6105883660046146ac565b611835565b348015610598575f80fd5b5060655460ff16610355565b3480156105af575f80fd5b506105e46105be3660046146ac565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b34801561060f575f80fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b34801561065b575f80fd5b506103ac61066a3660046146ac565b6118e0565b34801561067a575f80fd5b5061037f6106893660046146ac565b60ab6020525f908152604090205481565b3480156106a5575f80fd5b506103ac6106b43660046146de565b611af5565b3480156106c4575f80fd5b506103ac611bb2565b3480156106d8575f80fd5b506103ac6106e73660046148fa565b611bc5565b3480156106f7575f80fd5b5060a6546103559060ff1681565b348015610710575f80fd5b506033546001600160a01b03166104fc565b34801561072d575f80fd5b5061078e61073c3660046146ac565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b3480156107dd575f80fd5b506103556107ec3660046146ac565b5f90815260a4602052604090206003015460ff1690565b34801561080e575f80fd5b506103ac61081d3660046146de565b611f08565b34801561082d575f80fd5b5061035561083c3660046146de565b609f6020525f908152604090205460ff1681565b34801561085b575f80fd5b5061037f60995481565b348015610870575f80fd5b506103ac61087f3660046146ac565b611feb565b34801561088f575f80fd5b5061037f61089e3660046146de565b60a56020525f908152604090205481565b3480156108ba575f80fd5b5061037f60a85481565b3480156108cf575f80fd5b506103ac6108de366004614955565b61209b565b3480156108ee575f80fd5b506103ac6108fd3660046146de565b6123bc565b34801561090d575f80fd5b506103ac61091c366004614784565b612415565b34801561092c575f80fd5b506103ac61093b3660046149c9565b612765565b34801561094b575f80fd5b5061037f60ac5481565b6103ac6109633660046149fb565b6128c0565b348015610973575f80fd5b5061037f60985481565b348015610988575f80fd5b506103ac6109973660046146de565b612e8c565b3480156109a7575f80fd5b506097546104fc906001600160a01b031681565b3480156109c6575f80fd5b506103556109d53660046146ac565b612f4b565b3480156109e5575f80fd5b5061037f609a5481565b3480156109fa575f80fd5b506103ac610a093660046146ac565b612f95565b348015610a19575f80fd5b506103ac610a283660046146de565b613038565b348015610a38575f80fd5b5061037f60a95481565b610a4a6130c5565b6001600160a01b0381165f908152609f602052604090205460ff1615610ab75760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b1c6130c5565b5f8111610b6b5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610aae565b5f80610b77858561311f565b915091505f610b8a836001015160c01c90565b5f81815260a160205260409020549091508214610be95760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b5f60a181610bf78785614a50565b81526020019081526020015f205414610c775760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610aae565b609d548111610cee5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b610cf9600182614a63565b609e555b8315610e6557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d4581612f4b565b15610da0575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d90908490614a50565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610e1d575060a85481145b15610e27575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cfd575b505050505050565b60a85415610ebd5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b610ec56131b8565b5f80610ed1848461311f565b915091505f610ee4836001015160c01c90565b5f81815260a160205260409020549091508214610f435760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b610f4c81611364565b610f985760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b610fa181612f4b565b15610fee5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003015460ff161561104f5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610aae565b5f81815260a260205260409020600101544210156110af5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610aae565b605983015160a05f6110c2600185614a63565b81526020019081526020015f20541461111d5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f81815260a06020526040902054156111785760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610aae565b80609d54600101146111cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b609d819055600160a35f6111e1866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611230611223846011015160c01c90565b600985015160c01c61320b565b60a25f61123e600184614a63565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112779084614a63565b81526020019081526020015f205f905560a45f6001836112979190614a63565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611340866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061138c57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114229190614a76565b61146e5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b60a854156114be5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6114c66131b8565b6114d082826132c8565b5050565b60a854156115245760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b61152c6131b8565b60a65460ff161561157f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b5f6115956115906020890189614a91565b61311f565b5090505f6115a7826001015160c01c90565b9050609d5481146115fa5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b60ac54609e545f90815260a26020526040902054429161161991614a50565b101580156116b7575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116aa9190614af2565b6116b49190614a50565b10155b156116ee576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546116fd9190614a63565b9050801561177b575f611711836001614a50565b9050805b609e54811161173e575f81815260a160205260408120558061173681614b09565b915050611715565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161177191815260200190565b60405180910390a2505b609e82905561178a89896132c8565b5f80611796898961311f565b915091505f6117a9836001015160c01c90565b5f81815260a1602052604090205490915082146118085760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b6118128c846139f6565b61181d838989613c38565b6118278a8a610e6d565b505050505050505050505050565b61183d6130c5565b5f8111801561184e57506099548114155b61189a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610aae565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561190057505f5460ff8083169116105b6119725760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556119ad5f5460ff1690565b60ff166002146119ff5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610aae565b81611a725760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610aae565b609e545f90815260ab6020526040902054611a9b57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118d4565b611afd6130c5565b6001600160a01b0381165f908152609f602052604090205460ff16611b645760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610aae565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b09565b611bba6130c5565b611bc35f613deb565b565b5f54610100900460ff1615808015611be357505f54600160ff909116105b80611bfc5750303b158015611bfc57505f5460ff166001145b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f805460ff191660011790558015611cac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b0386161580611cc957506001600160a01b038516155b15611d00576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d565760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610aae565b611d5e613e54565b611d66613ed8565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f106130c5565b6001600160a01b03811615801590611f365750609c546001600160a01b03828116911614155b611f825760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610aae565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ff36130c5565b5f81118015612003575060648111155b8015612011575060a9548114155b61205d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610aae565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118d4565b60a854156120eb5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6120f36131b8565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561215f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121839190614a76565b6121cf5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b5f806121db868661311f565b915091505f6121ee836001015160c01c90565b5f81815260a16020526040902054909150821461224d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b61225681612f4b565b6122a25760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916122fb91614a50565b11612371575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236c91839190613f5c565b611eff565b61237c838686613c38565b611eff81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506140b8565b6123c46130c5565b60aa80545f9091556123d68282614184565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118d4565b61241d6130c5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124945760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610aae565b5f806124a0848461311f565b915091505f6124b3836001015160c01c90565b905080156125035760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610aae565b5f61250f846079015190565b90508061255e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610aae565b600984015160c01c156125b35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610aae565b5f6125bf856019015190565b0361260c5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610aae565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612638856039015190565b146126855760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610aae565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276d6130c5565b801561288e5761277b614229565b60a65460ff161561284d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cf908490614a50565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612896614283565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612870565b50565b335f908152609f602052604090205460ff1661291e5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610aae565b60a8541561296e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6129766131b8565b60a65460ff16156129c95760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b8167ffffffffffffffff16609d5410612a245760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a160205260409020548114612a8b5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b612a9e8267ffffffffffffffff16611364565b612aea5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b655760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a260205260409020600101544210612bf55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610aae565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c699190614af2565b341015612cb85760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e0a91815260200190565b60405180910390a35f609d546001612e229190614a50565b90505b609e548111612e7a578267ffffffffffffffff168114612e68576099545f82815260a2602052604081206001018054909190612e62908490614a50565b90915550505b80612e7281614b09565b915050612e25565b505060a6805460ff1916600117905550565b335f90815260a5602052604081205490819003612eeb5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610aae565b335f90815260a56020526040812055612f048282614184565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051612f3f91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061138c5750505f90815260a46020526040902060030154610100900460ff161590565b612f9d6130c5565b5f81118015612fae57506098548114155b612ffa5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610aae565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118d4565b6130406130c5565b6001600160a01b0381166130bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aae565b6128bd81613deb565b6033546001600160a01b03163314611bc35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aae565b5f805f61312c85856142bc565b90505f8160ff165f0361314d57613143868661432c565b90945090506131aa565b8160ff16600103613162576131438686614395565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610aae565b808420925050509250929050565b60655460ff1615611bc35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610aae565b805f03613216575050565b8082035f5b828110156132c25761010081840381111561323557508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613298575f80fd5b505af11580156132aa573d5f803e3d5ffd5b5050505061010083019250506101008101905061321b565b50505050565b6132d56020830183614b40565b60ff1615806132f357506132ec6020830183614b40565b60ff166001145b61333f5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610aae565b60808201356133905760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610aae565b60a08201356133e15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610aae565b5f806133f36115906020860186614a91565b915091505f613406836001015160c01c90565b90505f60a181613417846001614a50565b81526020019081526020015f2054146134725760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610aae565b609e5481146134c35760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b5f81815260a16020526040902054821461351f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610aae565b5f81815260ab602052604090205460808601351461357f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f61358e846011015160c01c90565b90505f6135ba6135a46060890160408a01614b60565b6135b460808a0160608b01614b79565b846143e8565b90506135cc6080880160608901614b79565b6001939093019261ffff1691909101905f8049156135eb575f4961360d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961361e60208a018a614b40565b60ff1660010361362d57506101015b6040805182810190915296506136528761364a60208c018c614b40565b60ff1661442c565b60c085901b60018801526136808761367060808c0160608d01614b79565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526136e4876136c560208b018b614a91565b6040516136d3929190614b9a565b604051809103902060b99190910152565b60d9870186905260016136fa60208b018b614b40565b60ff161061372c5761372c8761371660608c0160408d01614b60565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561378b5760a7545f90815260a46020526040902060020154609954429161377e91614a50565b6137889190614a63565b90505b604051806080016040528042815260200182609854426137ab9190614a50565b6137b59190614a50565b81526020016137ca60608d0160408e01614b60565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386c9190614af2565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b791508935906138d4906138ce908c018c614a91565b5f614433565b5f6138e260408d018d614a91565b6040518663ffffffff1660e01b8152600401613902959493929190614bf0565b602060405180830381865afa15801561391d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139419190614a76565b6139b35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613a086020840184614b40565b60ff1614613a585760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610aae565b600981015160c01c613a706080840160608501614b79565b61ffff1614613ac15760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610aae565b6059810151826080013514613b185760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60798101518260a0013514613b6f5760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60998101518260c0013514613bc65760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610aae565b5f613bd76115906020850185614a91565b915050613be58260d9015190565b8114613c335760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610aae565b505050565b80613c855760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610aae565b5f613c94846001015160c01c90565b90505f613ca2856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613cd1876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d93885160f81c90565b858888866040518663ffffffff1660e01b8152600401613db7959493929190614c63565b5f6040518083038186803b158015613dcd575f80fd5b505afa158015613ddf573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613ed05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc3614487565b5f54610100900460ff16613f545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc361450f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613fe0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140049190614af2565b5f86815260a46020526040902060010154909150614023908290614a50565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614062908490614a50565b9091555050604051614075908490614c94565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140dc9084614cc0565b6140e69190614cd7565b90506140f28183614a63565b60aa5f8282546141029190614a50565b90915550506001600160a01b0384165f90815260a560205260408120805483929061412e908490614a50565b9091555050604051614141908490614c94565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114d0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146141d3576040519150601f19603f3d011682016040523d82523d5f602084013e6141d8565b606091505b5050905080613c335760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610aae565b6142316131b8565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142663390565b6040516001600160a01b03909116815260200160405180910390a1565b61428b614594565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614266565b5f8161430a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610aae565b82825f81811061431c5761431c614d0f565b919091013560f81c949350505050565b5f8160f981101561437f5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610aae565b6040519150808483378082016040529250929050565b5f81610101811461437f5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610aae565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161441d8161ffff8716866145e6565b82900390912095945050505050565b8082535050565b60605f80808080614446888a018a614e29565b95509550955095509550508187106144645794506144809350505050565b838710614478578295505050505050614480565b509293505050505b9392505050565b5f54610100900460ff166145035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b6065805460ff19169055565b5f54610100900460ff1661458b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc333613deb565b60655460ff16611bc35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610aae565b5f825f036145f5575082614480565b609b546001600160a01b03165f5b848110156146a2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614669573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468d9190614af2565b87525060209095019460019384019301614603565b5093949350505050565b5f602082840312156146bc575f80fd5b5035919050565b80356001600160a01b03811681146146d9575f80fd5b919050565b5f602082840312156146ee575f80fd5b614480826146c3565b5f8083601f840112614707575f80fd5b50813567ffffffffffffffff81111561471e575f80fd5b602083019150836020828501011115614735575f80fd5b9250929050565b5f805f6040848603121561474e575f80fd5b833567ffffffffffffffff811115614764575f80fd5b614770868287016146f7565b909790965060209590950135949350505050565b5f8060208385031215614795575f80fd5b823567ffffffffffffffff8111156147ab575f80fd5b6147b7858286016146f7565b90969095509350505050565b5f60e082840312156147d3575f80fd5b50919050565b5f606082840312156147d3575f80fd5b5f80604083850312156147fa575f80fd5b823567ffffffffffffffff80821115614811575f80fd5b61481d868387016147c3565b93506020850135915080821115614832575f80fd5b5061483f858286016147d9565b9150509250929050565b5f805f805f806080878903121561485e575f80fd5b863567ffffffffffffffff80821115614875575f80fd5b6148818a838b016147c3565b97506020890135915080821115614896575f80fd5b6148a28a838b016147d9565b965060408901359150808211156148b7575f80fd5b6148c38a838b016146f7565b909650945060608901359150808211156148db575f80fd5b506148e889828a016146f7565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561490f575f80fd5b614918876146c3565b9550614926602088016146c3565b9450614934604088016146c3565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614968575f80fd5b843567ffffffffffffffff8082111561497f575f80fd5b61498b888389016146f7565b909650945060208701359150808211156149a3575f80fd5b506149b0878288016146f7565b95989497509550505050565b80151581146128bd575f80fd5b5f602082840312156149d9575f80fd5b8135614480816149bc565b803567ffffffffffffffff811681146146d9575f80fd5b5f8060408385031215614a0c575f80fd5b614a15836149e4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561138c5761138c614a23565b8181038181111561138c5761138c614a23565b5f60208284031215614a86575f80fd5b8151614480816149bc565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac4575f80fd5b83018035915067ffffffffffffffff821115614ade575f80fd5b602001915036819003821315614735575f80fd5b5f60208284031215614b02575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b3957614b39614a23565b5060010190565b5f60208284031215614b50575f80fd5b813560ff81168114614480575f80fd5b5f60208284031215614b70575f80fd5b614480826149e4565b5f60208284031215614b89575f80fd5b813561ffff81168114614480575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614c3a5784516001600160a01b031683529383019391830191600101614c15565b50508760408601528481036060860152614c55818789614ba9565b9a9950505050505050505050565b858152846020820152608060408201525f614c82608083018587614ba9565b90508260608301529695505050505050565b5f82515f5b81811015614cb35760208186018101518583015201614c99565b505f920191825250919050565b808202811582820484141761138c5761138c614a23565b5f82614d0a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d78575f80fd5b8135602067ffffffffffffffff80831115614d9557614d95614d3c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614dd857614dd8614d3c565b6040529384526020818701810194908101925087851115614df7575f80fd5b6020870191505b84821015614e1e57614e0f826146c3565b83529183019190830190614dfe565b979650505050505050565b5f805f805f8060c08789031215614e3e575f80fd5b86359550602087013567ffffffffffffffff80821115614e5c575f80fd5b614e688a838b01614d69565b9650604089013595506060890135915080821115614e84575f80fd5b614e908a838b01614d69565b94506080890135935060a0890135915080821115614eac575f80fd5b50614eb989828a01614d69565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle.go b/bindings/bindings/l1messagequeuewithgaspriceoracle.go index fca2a8623..c4e947e59 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle.go @@ -31,8 +31,8 @@ var ( // L1MessageQueueWithGasPriceOracleMetaData contains all meta data concerning the L1MessageQueueWithGasPriceOracle contract. var L1MessageQueueWithGasPriceOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801562000010575f80fd5b506040516200171438038062001714833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115086200020c5f395f818161030501526109d501525f818161021201526103c001525f818161027c015261087d01526115085ff3fe608060405234801561000f575f80fd5b5060043610610184575f3560e01c8063a85006ca116100dd578063d99bc80e11610088578063e3176bd511610063578063e3176bd51461037a578063f2fde38b14610383578063fd0ad31e14610396575f80fd5b8063d99bc80e1461033a578063da35a26f1461034d578063e172d3a114610360575f80fd5b8063bdc6f0a0116100b8578063bdc6f0a0146102ed578063c276067714610300578063d5ad4a9714610327575f80fd5b8063a85006ca146102b1578063ae453cd5146102ba578063bb7862ca146102cd575f80fd5b80635f9cd92e1161013d5780638da5cb5b116101185780638da5cb5b14610259578063927ede2d146102775780639b1597821461029e575f80fd5b80635f9cd92e146101f2578063715018a6146102055780638770d7071461020d575f80fd5b80633e4cbbe61161016d5780633e4cbbe6146101c35780635ad9945a146101d65780635e45da23146101e9575f80fd5b806329aa604b146101885780633c7f5283146101ae575b5f80fd5b61019b610196366004611173565b61039e565b6040519081526020015b60405180910390f35b6101c16101bc36600461118a565b6103bd565b005b61019b6101d13660046111cd565b61052e565b61019b6101e436600461123a565b6105e2565b61019b60685481565b6101c16102003660046112b6565b6107d2565b6101c1610867565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a5565b60335473ffffffffffffffffffffffffffffffffffffffff16610234565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102ac3660046112cf565b61087a565b61019b60675481565b61019b6102c8366004611173565b61095c565b606b546102349073ffffffffffffffffffffffffffffffffffffffff1681565b6101c16102fb366004611325565b6109d2565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c1610335366004611173565b610b03565b6101c1610348366004611173565b610b49565b6101c161035b366004611398565b610b8f565b61019b61036e3660046113c2565b60100261520801919050565b61019b60655481565b6101c16103913660046112b6565b610d48565b60665461019b565b606681815481106103ad575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104475760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156104995760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d657373616765730000000000000000000000604482015260640161043e565b81606754146104ea5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d61746368000000000000000000000000604482015260640161043e565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa15801561059c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c09190611401565b156105cc57505f6105dc565b6065546105d99083611427565b90505b92915050565b5f607e8161068c565b5f816105f957506001919050565b5b811561060f5760089190911c906001016105fa565b919050565b80608083106001811461064c5761062a846105eb565b60808101835360018301925084816020036008021b835280830192505061066d565b848415166001811461066057848353610665565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061069f60018c83610614565b90506106ad60018983610614565b90506106b98982610675565b90506106c760018b83610614565b9050600186146001811461072f576038871060018114610714576106ea886105eb565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610729565b87608001835360018301925087898437918701915b50610740565b61073d5f89355f1a84610614565b91505b5061074b8c82610675565b90508181035f80603883106001811461077e57610767846105eb565b60f78101600882021b851793506001019150610789565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b6107da610de5565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61086f610de5565b6108785f610e4c565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109255760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e676572000000000000000000000000000000000000000000606482015260840161043e565b610930838383610ec2565b337311110000000000000000000000000000000011110161095581865f878787610fbe565b5050505050565b6066545f9082106109af5760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e6765000000000000604482015260640161043e565b606682815481106109c2576109c2611463565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a7d5760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f6174657761790000000000000000000000000000000000000000000000000000606482015260840161043e565b73ffffffffffffffffffffffffffffffffffffffff86163b15610ae25760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f41000000000000000000000000000000000000000000000000604482015260640161043e565b610aed838383610ec2565b610afb868686868686610fbe565b505050505050565b610b0b610de5565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610522565b610b51610de5565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610522565b5f54610100900460ff1615808015610bad57505f54600160ff909116105b80610bc65750303b158015610bc657505f5460ff166001145b610c385760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161043e565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610c94575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610c9c61106f565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610d43575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d50610de5565b73ffffffffffffffffffffffffffffffffffffffff8116610dd95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161043e565b610de281610e4c565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108785760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043e565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610f3a5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d6974000000000000000000000000000000000000000000000000000000606482015260840161043e565b601081026152080180841015610fb85760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e7369632067617300000000000000000000000000606482015260840161043e565b50505050565b6066545f610fd18883888a8989896105e2565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e9061105d908a9087908b908b908b90611490565b60405180910390a35050505050505050565b5f54610100900460ff166110eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6108785f54610100900460ff1661116a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b61087833610e4c565b5f60208284031215611183575f80fd5b5035919050565b5f806040838503121561119b575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461060f575f80fd5b5f80604083850312156111de575f80fd5b6111e7836111aa565b946020939093013593505050565b5f8083601f840112611205575f80fd5b50813567ffffffffffffffff81111561121c575f80fd5b602083019150836020828501011115611233575f80fd5b9250929050565b5f805f805f805f60c0888a031215611250575f80fd5b611259886111aa565b96506020880135955060408801359450611275606089016111aa565b93506080880135925060a088013567ffffffffffffffff811115611297575f80fd5b6112a38a828b016111f5565b989b979a50959850939692959293505050565b5f602082840312156112c6575f80fd5b6105d9826111aa565b5f805f80606085870312156112e2575f80fd5b6112eb856111aa565b935060208501359250604085013567ffffffffffffffff81111561130d575f80fd5b611319878288016111f5565b95989497509550505050565b5f805f805f8060a0878903121561133a575f80fd5b611343876111aa565b9550611351602088016111aa565b94506040870135935060608701359250608087013567ffffffffffffffff81111561137a575f80fd5b61138689828a016111f5565b979a9699509497509295939492505050565b5f80604083850312156113a9575f80fd5b823591506113b9602084016111aa565b90509250929050565b5f80602083850312156113d3575f80fd5b823567ffffffffffffffff8111156113e9575f80fd5b6113f5858286016111f5565b90969095509350505050565b5f60208284031215611411575f80fd5b81518015158114611420575f80fd5b9392505050565b80820281158282048414176105dc577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstUnfinalizedMessageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getMessageEnqueueTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60e060405234801562000010575f80fd5b506040516200179538038062001795833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115896200020c5f395f818161035b0152610a4a01525f8181610233015261043501525f81816102bc01526108f201526115895ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b73660046111f4565b610413565b6040519081526020015b60405180910390f35b6101e26101dd36600461120b565b610432565b005b6101bc6101f236600461124e565b6105a3565b6101bc6102053660046112bb565b610657565b6101bc60685481565b6101e2610221366004611337565b610847565b6101e26108dc565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a63660046111f4565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611350565b6108ef565b6101bc60675481565b6101bc6103083660046111f4565b6109d1565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103513660046113a6565b610a47565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b3660046111f4565b610b78565b6101e261039e3660046111f4565b610bbe565b6101e26103b1366004611419565b610c04565b6101bc6103c4366004611443565b60100261520801919050565b6101bc60655481565b6101e26103e7366004611337565b610dbd565b6101bc6103fa3660046111f4565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104bc5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b61010081111561050e5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104b3565b816067541461055f5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104b3565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610611573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106359190611482565b1561064157505f610651565b60655461064e90836114a8565b90505b92915050565b5f607e81610701565b5f8161066e57506001919050565b5b81156106845760089190911c9060010161066f565b919050565b8060808310600181146106c15761069f84610660565b60808101835360018301925084816020036008021b83528083019250506106e2565b84841516600181146106d5578483536106da565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061071460018c83610689565b905061072260018983610689565b905061072e89826106ea565b905061073c60018b83610689565b905060018614600181146107a45760388710600181146107895761075f88610660565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161079e565b87608001835360018301925087898437918701915b506107b5565b6107b25f89355f1a84610689565b91505b506107c08c826106ea565b90508181035f8060388310600181146107f3576107dc84610660565b60f78101600882021b8517935060010191506107fe565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084f610e5a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e4610e5a565b6108ed5f610ec1565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461099a5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104b3565b6109a5838383610f37565b33731111000000000000000000000000000000001111016109ca81865f878787611033565b5050505050565b6066545f908210610a245760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104b3565b60668281548110610a3757610a376114e4565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610af25760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104b3565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b575760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104b3565b610b62838383610f37565b610b70868686868686611033565b505050505050565b610b80610e5a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610597565b610bc6610e5a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610597565b5f54610100900460ff1615808015610c2257505f54600160ff909116105b80610c3b5750303b158015610c3b57505f5460ff166001145b610cad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104b3565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d09575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d116110f0565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610db8575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dc5610e5a565b73ffffffffffffffffffffffffffffffffffffffff8116610e4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104b3565b610e5781610ec1565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b3565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610faf5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104b3565b60108102615208018084101561102d5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104b3565b50505050565b6066545f6110468883888a898989610657565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906110de908a9087908b908b908b90611511565b60405180910390a35050505050505050565b5f54610100900460ff1661116c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed5f54610100900460ff166111eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed33610ec1565b5f60208284031215611204575f80fd5b5035919050565b5f806040838503121561121c575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610684575f80fd5b5f806040838503121561125f575f80fd5b6112688361122b565b946020939093013593505050565b5f8083601f840112611286575f80fd5b50813567ffffffffffffffff81111561129d575f80fd5b6020830191508360208285010111156112b4575f80fd5b9250929050565b5f805f805f805f60c0888a0312156112d1575f80fd5b6112da8861122b565b965060208801359550604088013594506112f66060890161122b565b93506080880135925060a088013567ffffffffffffffff811115611318575f80fd5b6113248a828b01611276565b989b979a50959850939692959293505050565b5f60208284031215611347575f80fd5b61064e8261122b565b5f805f8060608587031215611363575f80fd5b61136c8561122b565b935060208501359250604085013567ffffffffffffffff81111561138e575f80fd5b61139a87828801611276565b95989497509550505050565b5f805f805f8060a087890312156113bb575f80fd5b6113c48761122b565b95506113d26020880161122b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156113fb575f80fd5b61140789828a01611276565b979a9699509497509295939492505050565b5f806040838503121561142a575f80fd5b8235915061143a6020840161122b565b90509250929050565b5f8060208385031215611454575f80fd5b823567ffffffffffffffff81111561146a575f80fd5b61147685828601611276565b90969095509350505050565b5f60208284031215611492575f80fd5b815180151581146114a1575f80fd5b9392505050565b8082028115828204841417610651577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", } // L1MessageQueueWithGasPriceOracleABI is the input ABI used to generate the binding from. @@ -419,6 +419,68 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerS return _L1MessageQueueWithGasPriceOracle.Contract.GetCrossDomainMessage(&_L1MessageQueueWithGasPriceOracle.CallOpts, _queueIndex) } +// GetFirstUnfinalizedMessageEnqueueTime is a free data retrieval call binding the contract method 0xb59b1a78. +// +// Solidity: function getFirstUnfinalizedMessageEnqueueTime() view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCaller) GetFirstUnfinalizedMessageEnqueueTime(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _L1MessageQueueWithGasPriceOracle.contract.Call(opts, &out, "getFirstUnfinalizedMessageEnqueueTime") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetFirstUnfinalizedMessageEnqueueTime is a free data retrieval call binding the contract method 0xb59b1a78. +// +// Solidity: function getFirstUnfinalizedMessageEnqueueTime() view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) GetFirstUnfinalizedMessageEnqueueTime() (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.GetFirstUnfinalizedMessageEnqueueTime(&_L1MessageQueueWithGasPriceOracle.CallOpts) +} + +// GetFirstUnfinalizedMessageEnqueueTime is a free data retrieval call binding the contract method 0xb59b1a78. +// +// Solidity: function getFirstUnfinalizedMessageEnqueueTime() view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerSession) GetFirstUnfinalizedMessageEnqueueTime() (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.GetFirstUnfinalizedMessageEnqueueTime(&_L1MessageQueueWithGasPriceOracle.CallOpts) +} + +// GetMessageEnqueueTimestamp is a free data retrieval call binding the contract method 0xf7ca0c51. +// +// Solidity: function getMessageEnqueueTimestamp(uint256 index) view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCaller) GetMessageEnqueueTimestamp(opts *bind.CallOpts, index *big.Int) (*big.Int, error) { + var out []interface{} + err := _L1MessageQueueWithGasPriceOracle.contract.Call(opts, &out, "getMessageEnqueueTimestamp", index) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMessageEnqueueTimestamp is a free data retrieval call binding the contract method 0xf7ca0c51. +// +// Solidity: function getMessageEnqueueTimestamp(uint256 index) view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) GetMessageEnqueueTimestamp(index *big.Int) (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.GetMessageEnqueueTimestamp(&_L1MessageQueueWithGasPriceOracle.CallOpts, index) +} + +// GetMessageEnqueueTimestamp is a free data retrieval call binding the contract method 0xf7ca0c51. +// +// Solidity: function getMessageEnqueueTimestamp(uint256 index) view returns(uint256 timestamp) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerSession) GetMessageEnqueueTimestamp(index *big.Int) (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.GetMessageEnqueueTimestamp(&_L1MessageQueueWithGasPriceOracle.CallOpts, index) +} + // L2BaseFee is a free data retrieval call binding the contract method 0xe3176bd5. // // Solidity: function l2BaseFee() view returns(uint256) @@ -481,6 +543,37 @@ func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerS return _L1MessageQueueWithGasPriceOracle.Contract.MaxGasLimit(&_L1MessageQueueWithGasPriceOracle.CallOpts) } +// MessageEnqueueTime is a free data retrieval call binding the contract method 0x8dc73d87. +// +// Solidity: function messageEnqueueTime(uint256 ) view returns(uint256) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCaller) MessageEnqueueTime(opts *bind.CallOpts, arg0 *big.Int) (*big.Int, error) { + var out []interface{} + err := _L1MessageQueueWithGasPriceOracle.contract.Call(opts, &out, "messageEnqueueTime", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// MessageEnqueueTime is a free data retrieval call binding the contract method 0x8dc73d87. +// +// Solidity: function messageEnqueueTime(uint256 ) view returns(uint256) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleSession) MessageEnqueueTime(arg0 *big.Int) (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.MessageEnqueueTime(&_L1MessageQueueWithGasPriceOracle.CallOpts, arg0) +} + +// MessageEnqueueTime is a free data retrieval call binding the contract method 0x8dc73d87. +// +// Solidity: function messageEnqueueTime(uint256 ) view returns(uint256) +func (_L1MessageQueueWithGasPriceOracle *L1MessageQueueWithGasPriceOracleCallerSession) MessageEnqueueTime(arg0 *big.Int) (*big.Int, error) { + return _L1MessageQueueWithGasPriceOracle.Contract.MessageEnqueueTime(&_L1MessageQueueWithGasPriceOracle.CallOpts, arg0) +} + // MessageQueue is a free data retrieval call binding the contract method 0x29aa604b. // // Solidity: function messageQueue(uint256 ) view returns(bytes32) diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go index 95974e781..11b599072 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1013_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1012_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"l2BaseFee\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_bytes32)dyn_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"pendingQueueIndex\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"maxGasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__droppedMessageBitmap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(BitMap)1014_storage\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__skippedMessageBitmap\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"whitelistChecker\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_address\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1012_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(BitMap)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"struct BitMapsUpgradeable.BitMap\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1014_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1013_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"l2BaseFee\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_uint256\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_bytes32)dyn_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"pendingQueueIndex\",\"offset\":0,\"slot\":\"103\",\"type\":\"t_uint256\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"maxGasLimit\",\"offset\":0,\"slot\":\"104\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__droppedMessageBitmap\",\"offset\":0,\"slot\":\"105\",\"type\":\"t_struct(BitMap)1015_storage\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"__skippedMessageBitmap\",\"offset\":0,\"slot\":\"106\",\"type\":\"t_mapping(t_uint256,t_uint256)\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"whitelistChecker\",\"offset\":0,\"slot\":\"107\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol:L1MessageQueueWithGasPriceOracle\",\"label\":\"messageEnqueueTime\",\"offset\":0,\"slot\":\"108\",\"type\":\"t_mapping(t_uint256,t_uint256)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"bytes32[]\",\"numberOfBytes\":\"32\"},\"t_array(t_uint256)1013_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1014_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_uint256,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_struct(BitMap)1015_storage\":{\"encoding\":\"inplace\",\"label\":\"struct BitMapsUpgradeable.BitMap\",\"numberOfBytes\":\"32\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var L1MessageQueueWithGasPriceOracleStorageLayout = new(solc.StorageLayout) -var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b5060043610610184575f3560e01c8063a85006ca116100dd578063d99bc80e11610088578063e3176bd511610063578063e3176bd51461037a578063f2fde38b14610383578063fd0ad31e14610396575f80fd5b8063d99bc80e1461033a578063da35a26f1461034d578063e172d3a114610360575f80fd5b8063bdc6f0a0116100b8578063bdc6f0a0146102ed578063c276067714610300578063d5ad4a9714610327575f80fd5b8063a85006ca146102b1578063ae453cd5146102ba578063bb7862ca146102cd575f80fd5b80635f9cd92e1161013d5780638da5cb5b116101185780638da5cb5b14610259578063927ede2d146102775780639b1597821461029e575f80fd5b80635f9cd92e146101f2578063715018a6146102055780638770d7071461020d575f80fd5b80633e4cbbe61161016d5780633e4cbbe6146101c35780635ad9945a146101d65780635e45da23146101e9575f80fd5b806329aa604b146101885780633c7f5283146101ae575b5f80fd5b61019b6101963660046112df565b61039e565b6040519081526020015b60405180910390f35b6101c16101bc3660046112f6565b6103bd565b005b61019b6101d1366004611339565b61057c565b61019b6101e43660046113a6565b610630565b61019b60685481565b6101c1610200366004611422565b610820565b6101c16108b5565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a5565b60335473ffffffffffffffffffffffffffffffffffffffff16610234565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102ac36600461143b565b6108c8565b61019b60675481565b61019b6102c83660046112df565b6109c4565b606b546102349073ffffffffffffffffffffffffffffffffffffffff1681565b6101c16102fb366004611491565b610a54565b6102347f000000000000000000000000000000000000000000000000000000000000000081565b6101c16103353660046112df565b610bb9565b6101c16103483660046112df565b610bff565b6101c161035b366004611504565b610c45565b61019b61036e36600461152e565b60100261520801919050565b61019b60655481565b6101c1610391366004611422565b610e18565b60665461019b565b606681815481106103ad575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156104cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d6573736167657300000000000000000000006044820152606401610458565b8160675414610538576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d617463680000000000000000000000006044820152606401610458565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa1580156105ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061060e919061156d565b1561061a57505f61062a565b6065546106279083611593565b90505b92915050565b5f607e816106da565b5f8161064757506001919050565b5b811561065d5760089190911c90600101610648565b919050565b80608083106001811461069a5761067884610639565b60808101835360018301925084816020036008021b83528083019250506106bb565b84841516600181146106ae578483536106b3565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b600560405101806106ed60018c83610662565b90506106fb60018983610662565b905061070789826106c3565b905061071560018b83610662565b9050600186146001811461077d5760388710600181146107625761073888610639565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610777565b87608001835360018301925087898437918701915b5061078e565b61078b5f89355f1a84610662565b91505b506107998c826106c3565b90508181035f8060388310600181146107cc576107b584610639565b60f78101600882021b8517935060010191506107d7565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610828610ecf565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108bd610ecf565b6108c65f610f50565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e6765720000000000000000000000000000000000000000006064820152608401610458565b610998838383610fc6565b33731111000000000000000000000000000000001111016109bd81865f8787876110f6565b5050505050565b6066545f908210610a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e67650000000000006044820152606401610458565b60668281548110610a4457610a446115cf565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f61746577617900000000000000000000000000000000000000000000000000006064820152608401610458565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f410000000000000000000000000000000000000000000000006044820152606401610458565b610ba3838383610fc6565b610bb18686868686866110f6565b505050505050565b610bc1610ecf565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610570565b610c07610ecf565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610570565b5f54610100900460ff1615808015610c6357505f54600160ff909116105b80610c7c5750303b158015610c7c57505f5460ff166001145b610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610458565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d64575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d6c6111a7565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610e13575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610e20610ecf565b73ffffffffffffffffffffffffffffffffffffffff8116610ec3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610458565b610ecc81610f50565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610458565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d69740000000000000000000000000000000000000000000000000000006064820152608401610458565b6010810261520801808410156110f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e73696320676173000000000000000000000000006064820152608401610458565b50505050565b6066545f6111098883888a898989610630565b606680546001810182555f919091527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540181905560405190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611195908a9087908b908b908b906115fc565b60405180910390a35050505050505050565b5f54610100900460ff1661123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610458565b6108c65f54610100900460ff166112d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610458565b6108c633610f50565b5f602082840312156112ef575f80fd5b5035919050565b5f8060408385031215611307575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff8116811461065d575f80fd5b5f806040838503121561134a575f80fd5b61135383611316565b946020939093013593505050565b5f8083601f840112611371575f80fd5b50813567ffffffffffffffff811115611388575f80fd5b60208301915083602082850101111561139f575f80fd5b9250929050565b5f805f805f805f60c0888a0312156113bc575f80fd5b6113c588611316565b965060208801359550604088013594506113e160608901611316565b93506080880135925060a088013567ffffffffffffffff811115611403575f80fd5b61140f8a828b01611361565b989b979a50959850939692959293505050565b5f60208284031215611432575f80fd5b61062782611316565b5f805f806060858703121561144e575f80fd5b61145785611316565b935060208501359250604085013567ffffffffffffffff811115611479575f80fd5b61148587828801611361565b95989497509550505050565b5f805f805f8060a087890312156114a6575f80fd5b6114af87611316565b95506114bd60208801611316565b94506040870135935060608701359250608087013567ffffffffffffffff8111156114e6575f80fd5b6114f289828a01611361565b979a9699509497509295939492505050565b5f8060408385031215611515575f80fd5b8235915061152560208401611316565b90509250929050565b5f806020838503121561153f575f80fd5b823567ffffffffffffffff811115611555575f80fd5b61156185828601611361565b90969095509350505050565b5f6020828403121561157d575f80fd5b8151801515811461158c575f80fd5b9392505050565b808202811582820484141761062a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" +var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611360565b610413565b6040519081526020015b60405180910390f35b6101e26101dd366004611377565b610432565b005b6101bc6101f23660046113ba565b6105f1565b6101bc610205366004611427565b6106a5565b6101bc60685481565b6101e26102213660046114a3565b610895565b6101e261092a565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611360565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec3660046114bc565b61093d565b6101bc60675481565b6101bc610308366004611360565b610a39565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e2610351366004611512565b610ac9565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b366004611360565b610c2e565b6101e261039e366004611360565b610c74565b6101e26103b1366004611585565b610cba565b6101bc6103c43660046115af565b60100261520801919050565b6101bc60655481565b6101e26103e73660046114a3565b610e8d565b6101bc6103fa366004611360565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104cd565b81606754146105ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104cd565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa15801561065f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068391906115ee565b1561068f57505f61069f565b60655461069c9083611614565b90505b92915050565b5f607e8161074f565b5f816106bc57506001919050565b5b81156106d25760089190911c906001016106bd565b919050565b80608083106001811461070f576106ed846106ae565b60808101835360018301925084816020036008021b8352808301925050610730565b848415166001811461072357848353610728565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061076260018c836106d7565b9050610770600189836106d7565b905061077c8982610738565b905061078a60018b836106d7565b905060018614600181146107f25760388710600181146107d7576107ad886106ae565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107ec565b87608001835360018301925087898437918701915b50610803565b6108005f89355f1a846106d7565b91505b5061080e8c82610738565b90508181035f8060388310600181146108415761082a846106ae565b60f78101600882021b85179350600101915061084c565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61089d610f44565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610932610f44565b61093b5f610fc5565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104cd565b610a0d83838361103b565b3373111100000000000000000000000000000000111101610a3281865f87878761116b565b5050505050565b6066545f908210610aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104cd565b60668281548110610ab957610ab9611650565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104cd565b73ffffffffffffffffffffffffffffffffffffffff86163b15610c0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104cd565b610c1883838361103b565b610c2686868686868661116b565b505050505050565b610c36610f44565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105e5565b610c7c610f44565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105e5565b5f54610100900460ff1615808015610cd857505f54600160ff909116105b80610cf15750303b158015610cf157505f5460ff166001145b610d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104cd565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610dd9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610de1611228565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610e88575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610e95610f44565b73ffffffffffffffffffffffffffffffffffffffff8116610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104cd565b610f4181610fc5565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104cd565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156110cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104cd565b601081026152080180841015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104cd565b50505050565b6066545f61117e8883888a8989896106a5565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611216908a9087908b908b908b9061167d565b60405180910390a35050505050505050565b5f54610100900460ff166112be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104cd565b61093b5f54610100900460ff16611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104cd565b61093b33610fc5565b5f60208284031215611370575f80fd5b5035919050565b5f8060408385031215611388575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d2575f80fd5b5f80604083850312156113cb575f80fd5b6113d483611397565b946020939093013593505050565b5f8083601f8401126113f2575f80fd5b50813567ffffffffffffffff811115611409575f80fd5b602083019150836020828501011115611420575f80fd5b9250929050565b5f805f805f805f60c0888a03121561143d575f80fd5b61144688611397565b9650602088013595506040880135945061146260608901611397565b93506080880135925060a088013567ffffffffffffffff811115611484575f80fd5b6114908a828b016113e2565b989b979a50959850939692959293505050565b5f602082840312156114b3575f80fd5b61069c82611397565b5f805f80606085870312156114cf575f80fd5b6114d885611397565b935060208501359250604085013567ffffffffffffffff8111156114fa575f80fd5b611506878288016113e2565b95989497509550505050565b5f805f805f8060a08789031215611527575f80fd5b61153087611397565b955061153e60208801611397565b94506040870135935060608701359250608087013567ffffffffffffffff811115611567575f80fd5b61157389828a016113e2565b979a9699509497509295939492505050565b5f8060408385031215611596575f80fd5b823591506115a660208401611397565b90509250929050565b5f80602083850312156115c0575f80fd5b823567ffffffffffffffff8111156115d6575f80fd5b6115e2858286016113e2565b90969095509350505050565b5f602082840312156115fe575f80fd5b8151801515811461160d575f80fd5b9392505050565b808202811582820484141761069f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(L1MessageQueueWithGasPriceOracleStorageLayoutJSON), L1MessageQueueWithGasPriceOracleStorageLayout); err != nil { diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 75ab0ee21..bb6430b2a 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620049833803806200498383398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516148256200015e5f395f81816105ec0152613a2901526148255ff3fe608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd146109b1578063f2fde38b146109d0578063fb1e8b04146109ef575f80fd5b8063ddd8a3dc1461095e578063de8b30351461097d578063dff7827e1461099c575f80fd5b8063cd4edc69116100b7578063cd4edc6914610917578063ce5db8d61461092a578063d279c1911461093f575f80fd5b8063b35dac4e146108ba578063b3e0a509146108d9578063bedb86fb146108f8575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d1461085b578063b31a77d314610886578063b34844251461089b575f80fd5b8063a415d8dc146107f9578063a479265d14610827578063a4f209b01461083c575f80fd5b80638f1d37761161016c5780638f1d3776146106f9578063910129d4146107a957806397fc007c146107da575f80fd5b8063728cdbca146106a457806388b1ea09146106c35780638da5cb5b146106dc575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa146106465780636c578c1d14610671578063715018a614610690575f80fd5b80635ef7a94a1461057b5780635f77cf1d146105db5780636126729014610627575f80fd5b8063428868b51161022c578063428868b51461053257806357e0af6c146105455780635c975abb14610564575f80fd5b80632b7ac3f3146104c75780633b70c18a146104fe5780633e001b661461051d575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b3660046140c8565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b506103966103913660046140fa565b610a04565b005b3480156103a3575f80fd5b506103966103b2366004614158565b610ad6565b3480156103c2575f80fd5b5061033f6103d13660046140c8565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b506103966104083660046141a0565b610e2f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c3660046140c8565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c3660046140c8565b611326565b34801561047c575f80fd5b5061036961048b3660046140c8565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b63660046140c8565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104e6906001600160a01b031681565b6040516001600160a01b03909116815260200161034b565b348015610509575f80fd5b50609b546104e6906001600160a01b031681565b348015610528575f80fd5b5061036960aa5481565b6103966105403660046141df565b611354565b348015610550575f80fd5b5061039661055f3660046140c8565b611bbb565b34801561056f575f80fd5b5060655460ff1661033f565b348015610586575f80fd5b506105bb6105953660046140c8565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b3480156105e6575f80fd5b5061060e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610632575f80fd5b506103966106413660046140c8565b611c66565b348015610651575f80fd5b506103696106603660046140c8565b60ab6020525f908152604090205481565b34801561067c575f80fd5b5061039661068b3660046140fa565b611e7b565b34801561069b575f80fd5b50610396611f38565b3480156106af575f80fd5b506103966106be36600461424c565b611f4b565b3480156106ce575f80fd5b5060a65461033f9060ff1681565b3480156106e7575f80fd5b506033546001600160a01b03166104e6565b348015610704575f80fd5b506107656107133660046140c8565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b3480156107b4575f80fd5b5061033f6107c33660046140c8565b5f90815260a4602052604090206003015460ff1690565b3480156107e5575f80fd5b506103966107f43660046140fa565b61228e565b348015610804575f80fd5b5061033f6108133660046140fa565b609f6020525f908152604090205460ff1681565b348015610832575f80fd5b5061036960995481565b348015610847575f80fd5b506103966108563660046140c8565b612371565b348015610866575f80fd5b506103696108753660046140fa565b60a56020525f908152604090205481565b348015610891575f80fd5b5061036960a85481565b3480156108a6575f80fd5b506103966108b53660046142a7565b612421565b3480156108c5575f80fd5b506103966108d43660046140fa565b612742565b3480156108e4575f80fd5b506103966108f33660046141a0565b61279b565b348015610903575f80fd5b5061039661091236600461431b565b612aeb565b61039661092536600461434d565b612c46565b348015610935575f80fd5b5061036960985481565b34801561094a575f80fd5b506103966109593660046140fa565b613212565b348015610969575f80fd5b506097546104e6906001600160a01b031681565b348015610988575f80fd5b5061033f6109973660046140c8565b6132d1565b3480156109a7575f80fd5b50610369609a5481565b3480156109bc575f80fd5b506103966109cb3660046140c8565b61331b565b3480156109db575f80fd5b506103966109ea3660046140fa565b6133be565b3480156109fa575f80fd5b5061036960a95481565b610a0c61344b565b6001600160a01b0381165f908152609f602052604090205460ff1615610a795760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610ade61344b565b5f8111610b2d5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610a70565b5f80610b3985856134a5565b915091505f610b4c836001015160c01c90565b5f81815260a160205260409020549091508214610bab5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b5f60a181610bb987856143a2565b81526020019081526020015f205414610c395760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610a70565b609d548111610cb05760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b610cbb6001826143b5565b609e555b8315610e2757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d07816132d1565b15610d62575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d529084906143a2565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610ddf575060a85481145b15610de9575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cbf575b505050505050565b60a85415610e7f5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b610e8761353e565b5f80610e9384846134a5565b915091505f610ea6836001015160c01c90565b5f81815260a160205260409020549091508214610f055760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b610f0e81611326565b610f5a5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b610f63816132d1565b15610fb05760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003015460ff16156110115760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610a70565b5f81815260a260205260409020600101544210156110715760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610a70565b605983015160a05f6110846001856143b5565b81526020019081526020015f2054146110df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f81815260a060205260409020541561113a5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610a70565b80609d546001011461118e5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b609d819055600160a35f6111a3866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a060205260409020556111f26111e5846011015160c01c90565b600985015160c01c613591565b60a25f6112006001846143b5565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061123990846143b5565b81526020019081526020015f205f905560a45f60018361125991906143b5565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611302866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061134e57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113e491906143c8565b6114305760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b60a854156114805760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b61148861353e565b61149560208301836143e3565b60ff1615806114b357506114ac60208301836143e3565b60ff166001145b6114ff5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610a70565b60808201356115505760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610a70565b60a08201356115a15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610a70565b5f806115b86115b36020860186614403565b6134a5565b915091505f6115cb836001015160c01c90565b90505f60a1816115dc8460016143a2565b81526020019081526020015f2054146116375760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610a70565b609e5481146116885760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610a70565b5f81815260a1602052604090205482146116e45760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610a70565b5f81815260ab60205260409020546080860135146117445760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610a70565b5f611753846011015160c01c90565b90505f61177f6117696060890160408a01614464565b61177960808a0160608b0161447d565b8461364e565b9050611791608088016060890161447d565b6001939093019261ffff1691909101905f8049156117b0575f496117d2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96117e360208a018a6143e3565b60ff166001036117f257506101015b6040805182810190915296506118178761180f60208c018c6143e3565b60ff16613692565b60c085901b60018801526118458761183560808c0160608d0161447d565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526118a98761188a60208b018b614403565b60405161189892919061449e565b604051809103902060b99190910152565b60d9870186905260016118bf60208b018b6143e3565b60ff16106118f1576118f1876118db60608c0160408d01614464565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156119505760a7545f90815260a460205260409020600201546099544291611943916143a2565b61194d91906143b5565b90505b6040518060800160405280428152602001826098544261197091906143a2565b61197a91906143a2565b815260200161198f60608d0160408e01614464565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611a0d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a3191906144ad565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590611a9990611a93908c018c614403565b5f613699565b5f611aa760408d018d614403565b6040518663ffffffff1660e01b8152600401611ac795949392919061450b565b602060405180830381865afa158015611ae2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b0691906143c8565b611b785760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610a70565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b611bc361344b565b5f81118015611bd457506099548114155b611c205760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610a70565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8657505f5460ff8083169116105b611cf85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d335f5460ff1690565b60ff16600214611d855760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610a70565b81611df85760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610a70565b609e545f90815260ab6020526040902054611e2157609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c5a565b611e8361344b565b6001600160a01b0381165f908152609f602052604090205460ff16611eea5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610a70565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610acb565b611f4061344b565b611f495f6136ed565b565b5f54610100900460ff1615808015611f6957505f54600160ff909116105b80611f825750303b158015611f8257505f5460ff166001145b611ff45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610a70565b5f805460ff191660011790558015612032575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b038616158061204f57506001600160a01b038516155b15612086576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0387166120dc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610a70565b6120e4613756565b6120ec6137da565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612285575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61229661344b565b6001600160a01b038116158015906122bc5750609c546001600160a01b03828116911614155b6123085760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610a70565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61237961344b565b5f81118015612389575060648111155b8015612397575060a9548114155b6123e35760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610a70565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c5a565b60a854156124715760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b61247961353e565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156124e5573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906143c8565b6125555760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610a70565b5f8061256186866134a5565b915091505f612574836001015160c01c90565b5f81815260a1602052604090205490915082146125d35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b6125dc816132d1565b6126285760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610a70565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff191690556099546002909101544291612681916143a2565b116126f7575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526126f29183919061385e565b612285565b6127028386866139ba565b61228581336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613b6d565b61274a61344b565b60aa80545f90915561275c8282613c39565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c5a565b6127a361344b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561281a5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610a70565b5f8061282684846134a5565b915091505f612839836001015160c01c90565b905080156128895760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610a70565b5f612895846079015190565b9050806128e45760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610a70565b600984015160c01c156129395760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610a70565b5f612945856019015190565b036129925760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610a70565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146129be856039015190565b14612a0b5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610a70565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612af361344b565b8015612c1457612b01613ce4565b60a65460ff1615612bd35760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612b559084906143a2565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612c1c613d3e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612bf6565b50565b335f908152609f602052604090205460ff16612ca45760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610a70565b60a85415612cf45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610a70565b612cfc61353e565b60a65460ff1615612d4f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610a70565b8167ffffffffffffffff16609d5410612daa5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a160205260409020548114612e115760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610a70565b612e248267ffffffffffffffff16611326565b612e705760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612eeb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610a70565b67ffffffffffffffff82165f90815260a260205260409020600101544210612f7b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610a70565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fcb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fef91906144ad565b34101561303e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610a70565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161319091815260200190565b60405180910390a35f609d5460016131a891906143a2565b90505b609e548111613200578267ffffffffffffffff1681146131ee576099545f82815260a26020526040812060010180549091906131e89084906143a2565b90915550505b806131f88161457e565b9150506131ab565b505060a6805460ff1916600117905550565b335f90815260a56020526040812054908190036132715760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610a70565b335f90815260a5602052604081205561328a8282613c39565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516132c591815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061134e5750505f90815260a46020526040902060030154610100900460ff161590565b61332361344b565b5f8111801561333457506098548114155b6133805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610a70565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c5a565b6133c661344b565b6001600160a01b0381166134425760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610a70565b612c43816136ed565b6033546001600160a01b03163314611f495760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a70565b5f805f6134b28585613d77565b90505f8160ff165f036134d3576134c98686613de7565b9094509050613530565b8160ff166001036134e8576134c98686613e50565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610a70565b808420925050509250929050565b60655460ff1615611f495760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610a70565b805f0361359c575050565b8082035f5b82811015613648576101008184038111156135bb57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561361e575f80fd5b505af1158015613630573d5f803e3d5ffd5b505050506101008301925050610100810190506135a1565b50505050565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016136838161ffff871686613ea3565b82900390912095945050505050565b8082535050565b60605f808080806136ac888a018a6146a2565b95509550955095509550508187106136ca5794506136e69350505050565b8387106136de5782955050505050506136e6565b509293505050505b9392505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166137d25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49613f69565b5f54610100900460ff166138565760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49613ff1565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af11580156138e2573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390691906144ad565b5f86815260a460205260409020600101549091506139259082906143a2565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906139649084906143a2565b909155505060405161397790849061473f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80613a075760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610a70565b5f613a16846001015160c01c90565b90505f613a24856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613a53876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613b15885160f81c90565b858888866040518663ffffffff1660e01b8152600401613b3995949392919061476b565b5f6040518083038186803b158015613b4f575f80fd5b505afa158015613b61573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a954909190606490613b91908461479c565b613b9b91906147b3565b9050613ba781836143b5565b60aa5f828254613bb791906143a2565b90915550506001600160a01b0384165f90815260a5602052604081208054839290613be39084906143a2565b9091555050604051613bf690849061473f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015613ce0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613c88576040519150601f19603f3d011682016040523d82523d5f602084013e613c8d565b606091505b5050905080613cde5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610a70565b505b5050565b613cec61353e565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258613d213390565b6040516001600160a01b03909116815260200160405180910390a1565b613d46614076565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613d21565b5f81613dc55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610a70565b82825f818110613dd757613dd76147eb565b919091013560f81c949350505050565b5f8160f9811015613e3a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610a70565b6040519150808483378082016040529250929050565b5f816101018114613e3a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610a70565b5f825f03613eb25750826136e6565b609b546001600160a01b03165f5b84811015613f5f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015613f26573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f4a91906144ad565b87525060209095019460019384019301613ec0565b5093949350505050565b5f54610100900460ff16613fe55760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b6065805460ff19169055565b5f54610100900460ff1661406d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610a70565b611f49336136ed565b60655460ff16611f495760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610a70565b5f602082840312156140d8575f80fd5b5035919050565b80356001600160a01b03811681146140f5575f80fd5b919050565b5f6020828403121561410a575f80fd5b6136e6826140df565b5f8083601f840112614123575f80fd5b50813567ffffffffffffffff81111561413a575f80fd5b602083019150836020828501011115614151575f80fd5b9250929050565b5f805f6040848603121561416a575f80fd5b833567ffffffffffffffff811115614180575f80fd5b61418c86828701614113565b909790965060209590950135949350505050565b5f80602083850312156141b1575f80fd5b823567ffffffffffffffff8111156141c7575f80fd5b6141d385828601614113565b90969095509350505050565b5f80604083850312156141f0575f80fd5b823567ffffffffffffffff80821115614207575f80fd5b9084019060e0828703121561421a575f80fd5b9092506020840135908082111561422f575f80fd5b50830160608186031215614241575f80fd5b809150509250929050565b5f805f805f8060c08789031215614261575f80fd5b61426a876140df565b9550614278602088016140df565b9450614286604088016140df565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156142ba575f80fd5b843567ffffffffffffffff808211156142d1575f80fd5b6142dd88838901614113565b909650945060208701359150808211156142f5575f80fd5b5061430287828801614113565b95989497509550505050565b8015158114612c43575f80fd5b5f6020828403121561432b575f80fd5b81356136e68161430e565b803567ffffffffffffffff811681146140f5575f80fd5b5f806040838503121561435e575f80fd5b61436783614336565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561134e5761134e614375565b8181038181111561134e5761134e614375565b5f602082840312156143d8575f80fd5b81516136e68161430e565b5f602082840312156143f3575f80fd5b813560ff811681146136e6575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614436575f80fd5b83018035915067ffffffffffffffff821115614450575f80fd5b602001915036819003821315614151575f80fd5b5f60208284031215614474575f80fd5b6136e682614336565b5f6020828403121561448d575f80fd5b813561ffff811681146136e6575f80fd5b818382375f9101908152919050565b5f602082840312156144bd575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156145555784516001600160a01b031683529383019391830191600101614530565b505087604086015284810360608601526145708187896144c4565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036145ae576145ae614375565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126145f1575f80fd5b8135602067ffffffffffffffff8083111561460e5761460e6145b5565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614651576146516145b5565b6040529384526020818701810194908101925087851115614670575f80fd5b6020870191505b8482101561469757614688826140df565b83529183019190830190614677565b979650505050505050565b5f805f805f8060c087890312156146b7575f80fd5b86359550602087013567ffffffffffffffff808211156146d5575f80fd5b6146e18a838b016145e2565b96506040890135955060608901359150808211156146fd575f80fd5b6147098a838b016145e2565b94506080890135935060a0890135915080821115614725575f80fd5b5061473289828a016145e2565b9150509295509295509295565b5f82515f5b8181101561475e5760208186018101518583015201614744565b505f920191825250919050565b858152846020820152608060408201525f61478a6080830185876144c4565b90508260608301529695505050505050565b808202811582820484141761134e5761134e614375565b5f826147e6577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeird\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620050313803806200503183398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614ed36200015e5f395f81816106150152613ca70152614ed35ff3fe60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e146109da578063e3fff1dd146109ef578063f2fde38b14610a0e578063fb1e8b0414610a2d575f80fd5b8063d279c1911461097d578063ddd8a3dc1461099c578063de8b3035146109bb575f80fd5b8063c5bde702116100c2578063c5bde70214610940578063cd4edc6914610955578063ce5db8d614610968575f80fd5b8063b35dac4e146108e3578063b3e0a50914610902578063bedb86fb14610921575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d14610884578063b31a77d3146108af578063b3484425146108c4575f80fd5b8063a415d8dc14610822578063a479265d14610850578063a4f209b014610865575f80fd5b80638f1d3776116101775780638f1d377614610722578063910129d4146107d257806397fc007c14610803575f80fd5b8063728cdbca146106cd57806388b1ea09146106ec5780638da5cb5b14610705575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461065057806368589dfa1461066f5780636c578c1d1461069a578063715018a6146106b9575f80fd5b80635c975abb1461058d5780635ef7a94a146105a45780635f77cf1d14610604575f80fd5b8063428868b511610242578063428868b5146105485780634e8f1d671461055b57806357e0af6c1461056e575f80fd5b80632b7ac3f3146104dd5780633b70c18a146105145780633e001b6614610533575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b506103556103413660046146ac565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046146de565b610a42565b005b3480156103b9575f80fd5b506103ac6103c836600461473c565b610b14565b3480156103d8575f80fd5b506103556103e73660046146ac565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e366004614784565b610e6d565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b506103556104523660046146ac565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b506103556104823660046146ac565b611364565b348015610492575f80fd5b5061037f6104a13660046146ac565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc3660046146ac565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546104fc906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561051f575f80fd5b50609b546104fc906001600160a01b031681565b34801561053e575f80fd5b5061037f60aa5481565b6103ac6105563660046147e9565b611392565b6103ac610569366004614849565b6114d4565b348015610579575f80fd5b506103ac6105883660046146ac565b611835565b348015610598575f80fd5b5060655460ff16610355565b3480156105af575f80fd5b506105e46105be3660046146ac565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b34801561060f575f80fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b34801561065b575f80fd5b506103ac61066a3660046146ac565b6118e0565b34801561067a575f80fd5b5061037f6106893660046146ac565b60ab6020525f908152604090205481565b3480156106a5575f80fd5b506103ac6106b43660046146de565b611af5565b3480156106c4575f80fd5b506103ac611bb2565b3480156106d8575f80fd5b506103ac6106e73660046148fa565b611bc5565b3480156106f7575f80fd5b5060a6546103559060ff1681565b348015610710575f80fd5b506033546001600160a01b03166104fc565b34801561072d575f80fd5b5061078e61073c3660046146ac565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b3480156107dd575f80fd5b506103556107ec3660046146ac565b5f90815260a4602052604090206003015460ff1690565b34801561080e575f80fd5b506103ac61081d3660046146de565b611f08565b34801561082d575f80fd5b5061035561083c3660046146de565b609f6020525f908152604090205460ff1681565b34801561085b575f80fd5b5061037f60995481565b348015610870575f80fd5b506103ac61087f3660046146ac565b611feb565b34801561088f575f80fd5b5061037f61089e3660046146de565b60a56020525f908152604090205481565b3480156108ba575f80fd5b5061037f60a85481565b3480156108cf575f80fd5b506103ac6108de366004614955565b61209b565b3480156108ee575f80fd5b506103ac6108fd3660046146de565b6123bc565b34801561090d575f80fd5b506103ac61091c366004614784565b612415565b34801561092c575f80fd5b506103ac61093b3660046149c9565b612765565b34801561094b575f80fd5b5061037f60ac5481565b6103ac6109633660046149fb565b6128c0565b348015610973575f80fd5b5061037f60985481565b348015610988575f80fd5b506103ac6109973660046146de565b612e8c565b3480156109a7575f80fd5b506097546104fc906001600160a01b031681565b3480156109c6575f80fd5b506103556109d53660046146ac565b612f4b565b3480156109e5575f80fd5b5061037f609a5481565b3480156109fa575f80fd5b506103ac610a093660046146ac565b612f95565b348015610a19575f80fd5b506103ac610a283660046146de565b613038565b348015610a38575f80fd5b5061037f60a95481565b610a4a6130c5565b6001600160a01b0381165f908152609f602052604090205460ff1615610ab75760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b1c6130c5565b5f8111610b6b5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610aae565b5f80610b77858561311f565b915091505f610b8a836001015160c01c90565b5f81815260a160205260409020549091508214610be95760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b5f60a181610bf78785614a50565b81526020019081526020015f205414610c775760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610aae565b609d548111610cee5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b610cf9600182614a63565b609e555b8315610e6557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d4581612f4b565b15610da0575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d90908490614a50565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610e1d575060a85481145b15610e27575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cfd575b505050505050565b60a85415610ebd5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b610ec56131b8565b5f80610ed1848461311f565b915091505f610ee4836001015160c01c90565b5f81815260a160205260409020549091508214610f435760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b610f4c81611364565b610f985760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b610fa181612f4b565b15610fee5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003015460ff161561104f5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610aae565b5f81815260a260205260409020600101544210156110af5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610aae565b605983015160a05f6110c2600185614a63565b81526020019081526020015f20541461111d5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f81815260a06020526040902054156111785760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610aae565b80609d54600101146111cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b609d819055600160a35f6111e1866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611230611223846011015160c01c90565b600985015160c01c61320b565b60a25f61123e600184614a63565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112779084614a63565b81526020019081526020015f205f905560a45f6001836112979190614a63565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611340866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061138c57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114229190614a76565b61146e5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b60a854156114be5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6114c66131b8565b6114d082826132c8565b5050565b60a854156115245760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b61152c6131b8565b60a65460ff161561157f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b5f6115956115906020890189614a91565b61311f565b5090505f6115a7826001015160c01c90565b9050609d5481146115fa5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b60ac54609e545f90815260a26020526040902054429161161991614a50565b101580156116b7575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116aa9190614af2565b6116b49190614a50565b10155b156116ee576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546116fd9190614a63565b9050801561177b575f611711836001614a50565b9050805b609e54811161173e575f81815260a160205260408120558061173681614b09565b915050611715565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161177191815260200190565b60405180910390a2505b609e82905561178a89896132c8565b5f80611796898961311f565b915091505f6117a9836001015160c01c90565b5f81815260a1602052604090205490915082146118085760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b6118128c846139f6565b61181d838989613c38565b6118278a8a610e6d565b505050505050505050505050565b61183d6130c5565b5f8111801561184e57506099548114155b61189a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610aae565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561190057505f5460ff8083169116105b6119725760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556119ad5f5460ff1690565b60ff166002146119ff5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610aae565b81611a725760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610aae565b609e545f90815260ab6020526040902054611a9b57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118d4565b611afd6130c5565b6001600160a01b0381165f908152609f602052604090205460ff16611b645760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610aae565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b09565b611bba6130c5565b611bc35f613deb565b565b5f54610100900460ff1615808015611be357505f54600160ff909116105b80611bfc5750303b158015611bfc57505f5460ff166001145b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f805460ff191660011790558015611cac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b0386161580611cc957506001600160a01b038516155b15611d00576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d565760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610aae565b611d5e613e54565b611d66613ed8565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f106130c5565b6001600160a01b03811615801590611f365750609c546001600160a01b03828116911614155b611f825760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610aae565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ff36130c5565b5f81118015612003575060648111155b8015612011575060a9548114155b61205d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610aae565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118d4565b60a854156120eb5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6120f36131b8565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561215f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121839190614a76565b6121cf5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b5f806121db868661311f565b915091505f6121ee836001015160c01c90565b5f81815260a16020526040902054909150821461224d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b61225681612f4b565b6122a25760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916122fb91614a50565b11612371575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236c91839190613f5c565b611eff565b61237c838686613c38565b611eff81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506140b8565b6123c46130c5565b60aa80545f9091556123d68282614184565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118d4565b61241d6130c5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124945760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610aae565b5f806124a0848461311f565b915091505f6124b3836001015160c01c90565b905080156125035760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610aae565b5f61250f846079015190565b90508061255e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610aae565b600984015160c01c156125b35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610aae565b5f6125bf856019015190565b0361260c5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610aae565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612638856039015190565b146126855760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610aae565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276d6130c5565b801561288e5761277b614229565b60a65460ff161561284d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cf908490614a50565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612896614283565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612870565b50565b335f908152609f602052604090205460ff1661291e5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610aae565b60a8541561296e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6129766131b8565b60a65460ff16156129c95760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b8167ffffffffffffffff16609d5410612a245760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a160205260409020548114612a8b5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b612a9e8267ffffffffffffffff16611364565b612aea5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b655760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a260205260409020600101544210612bf55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610aae565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c699190614af2565b341015612cb85760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e0a91815260200190565b60405180910390a35f609d546001612e229190614a50565b90505b609e548111612e7a578267ffffffffffffffff168114612e68576099545f82815260a2602052604081206001018054909190612e62908490614a50565b90915550505b80612e7281614b09565b915050612e25565b505060a6805460ff1916600117905550565b335f90815260a5602052604081205490819003612eeb5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610aae565b335f90815260a56020526040812055612f048282614184565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051612f3f91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061138c5750505f90815260a46020526040902060030154610100900460ff161590565b612f9d6130c5565b5f81118015612fae57506098548114155b612ffa5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610aae565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118d4565b6130406130c5565b6001600160a01b0381166130bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aae565b6128bd81613deb565b6033546001600160a01b03163314611bc35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aae565b5f805f61312c85856142bc565b90505f8160ff165f0361314d57613143868661432c565b90945090506131aa565b8160ff16600103613162576131438686614395565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610aae565b808420925050509250929050565b60655460ff1615611bc35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610aae565b805f03613216575050565b8082035f5b828110156132c25761010081840381111561323557508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613298575f80fd5b505af11580156132aa573d5f803e3d5ffd5b5050505061010083019250506101008101905061321b565b50505050565b6132d56020830183614b40565b60ff1615806132f357506132ec6020830183614b40565b60ff166001145b61333f5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610aae565b60808201356133905760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610aae565b60a08201356133e15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610aae565b5f806133f36115906020860186614a91565b915091505f613406836001015160c01c90565b90505f60a181613417846001614a50565b81526020019081526020015f2054146134725760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610aae565b609e5481146134c35760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b5f81815260a16020526040902054821461351f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610aae565b5f81815260ab602052604090205460808601351461357f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f61358e846011015160c01c90565b90505f6135ba6135a46060890160408a01614b60565b6135b460808a0160608b01614b79565b846143e8565b90506135cc6080880160608901614b79565b6001939093019261ffff1691909101905f8049156135eb575f4961360d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961361e60208a018a614b40565b60ff1660010361362d57506101015b6040805182810190915296506136528761364a60208c018c614b40565b60ff1661442c565b60c085901b60018801526136808761367060808c0160608d01614b79565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526136e4876136c560208b018b614a91565b6040516136d3929190614b9a565b604051809103902060b99190910152565b60d9870186905260016136fa60208b018b614b40565b60ff161061372c5761372c8761371660608c0160408d01614b60565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561378b5760a7545f90815260a46020526040902060020154609954429161377e91614a50565b6137889190614a63565b90505b604051806080016040528042815260200182609854426137ab9190614a50565b6137b59190614a50565b81526020016137ca60608d0160408e01614b60565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386c9190614af2565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b791508935906138d4906138ce908c018c614a91565b5f614433565b5f6138e260408d018d614a91565b6040518663ffffffff1660e01b8152600401613902959493929190614bf0565b602060405180830381865afa15801561391d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139419190614a76565b6139b35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613a086020840184614b40565b60ff1614613a585760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610aae565b600981015160c01c613a706080840160608501614b79565b61ffff1614613ac15760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610aae565b6059810151826080013514613b185760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60798101518260a0013514613b6f5760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60998101518260c0013514613bc65760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610aae565b5f613bd76115906020850185614a91565b915050613be58260d9015190565b8114613c335760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610aae565b505050565b80613c855760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610aae565b5f613c94846001015160c01c90565b90505f613ca2856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613cd1876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d93885160f81c90565b858888866040518663ffffffff1660e01b8152600401613db7959493929190614c63565b5f6040518083038186803b158015613dcd575f80fd5b505afa158015613ddf573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613ed05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc3614487565b5f54610100900460ff16613f545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc361450f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613fe0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140049190614af2565b5f86815260a46020526040902060010154909150614023908290614a50565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614062908490614a50565b9091555050604051614075908490614c94565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140dc9084614cc0565b6140e69190614cd7565b90506140f28183614a63565b60aa5f8282546141029190614a50565b90915550506001600160a01b0384165f90815260a560205260408120805483929061412e908490614a50565b9091555050604051614141908490614c94565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114d0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146141d3576040519150601f19603f3d011682016040523d82523d5f602084013e6141d8565b606091505b5050905080613c335760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610aae565b6142316131b8565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142663390565b6040516001600160a01b03909116815260200160405180910390a1565b61428b614594565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614266565b5f8161430a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610aae565b82825f81811061431c5761431c614d0f565b919091013560f81c949350505050565b5f8160f981101561437f5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610aae565b6040519150808483378082016040529250929050565b5f81610101811461437f5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610aae565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161441d8161ffff8716866145e6565b82900390912095945050505050565b8082535050565b60605f80808080614446888a018a614e29565b95509550955095509550508187106144645794506144809350505050565b838710614478578295505050505050614480565b509293505050505b9392505050565b5f54610100900460ff166145035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b6065805460ff19169055565b5f54610100900460ff1661458b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc333613deb565b60655460ff16611bc35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610aae565b5f825f036145f5575082614480565b609b546001600160a01b03165f5b848110156146a2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614669573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468d9190614af2565b87525060209095019460019384019301614603565b5093949350505050565b5f602082840312156146bc575f80fd5b5035919050565b80356001600160a01b03811681146146d9575f80fd5b919050565b5f602082840312156146ee575f80fd5b614480826146c3565b5f8083601f840112614707575f80fd5b50813567ffffffffffffffff81111561471e575f80fd5b602083019150836020828501011115614735575f80fd5b9250929050565b5f805f6040848603121561474e575f80fd5b833567ffffffffffffffff811115614764575f80fd5b614770868287016146f7565b909790965060209590950135949350505050565b5f8060208385031215614795575f80fd5b823567ffffffffffffffff8111156147ab575f80fd5b6147b7858286016146f7565b90969095509350505050565b5f60e082840312156147d3575f80fd5b50919050565b5f606082840312156147d3575f80fd5b5f80604083850312156147fa575f80fd5b823567ffffffffffffffff80821115614811575f80fd5b61481d868387016147c3565b93506020850135915080821115614832575f80fd5b5061483f858286016147d9565b9150509250929050565b5f805f805f806080878903121561485e575f80fd5b863567ffffffffffffffff80821115614875575f80fd5b6148818a838b016147c3565b97506020890135915080821115614896575f80fd5b6148a28a838b016147d9565b965060408901359150808211156148b7575f80fd5b6148c38a838b016146f7565b909650945060608901359150808211156148db575f80fd5b506148e889828a016146f7565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561490f575f80fd5b614918876146c3565b9550614926602088016146c3565b9450614934604088016146c3565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614968575f80fd5b843567ffffffffffffffff8082111561497f575f80fd5b61498b888389016146f7565b909650945060208701359150808211156149a3575f80fd5b506149b0878288016146f7565b95989497509550505050565b80151581146128bd575f80fd5b5f602082840312156149d9575f80fd5b8135614480816149bc565b803567ffffffffffffffff811681146146d9575f80fd5b5f8060408385031215614a0c575f80fd5b614a15836149e4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561138c5761138c614a23565b8181038181111561138c5761138c614a23565b5f60208284031215614a86575f80fd5b8151614480816149bc565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac4575f80fd5b83018035915067ffffffffffffffff821115614ade575f80fd5b602001915036819003821315614735575f80fd5b5f60208284031215614b02575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b3957614b39614a23565b5060010190565b5f60208284031215614b50575f80fd5b813560ff81168114614480575f80fd5b5f60208284031215614b70575f80fd5b614480826149e4565b5f60208284031215614b89575f80fd5b813561ffff81168114614480575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614c3a5784516001600160a01b031683529383019391830191600101614c15565b50508760408601528481036060860152614c55818789614ba9565b9a9950505050505050505050565b858152846020820152608060408201525f614c82608083018587614ba9565b90508260608301529695505050505050565b5f82515f5b81811015614cb35760208186018101518583015201614c99565b505f920191825250919050565b808202811582820484141761138c5761138c614a23565b5f82614d0a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d78575f80fd5b8135602067ffffffffffffffff80831115614d9557614d95614d3c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614dd857614dd8614d3c565b6040529384526020818701810194908101925087851115614df7575f80fd5b6020870191505b84821015614e1e57614e0f826146c3565b83529183019190830190614dfe565b979650505050505050565b5f805f805f8060c08789031215614e3e575f80fd5b86359550602087013567ffffffffffffffff80821115614e5c575f80fd5b614e688a838b01614d69565b9650604089013595506060890135915080821115614e84575f80fd5b614e908a838b01614d69565b94506080890135935060a0890135915080821115614eac575f80fd5b50614eb989828a01614d69565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1115,6 +1115,37 @@ func (_Rollup *RollupCallerSession) RevertReqIndex() (*big.Int, error) { return _Rollup.Contract.RevertReqIndex(&_Rollup.CallOpts) } +// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// +// Solidity: function rollupDelayPeird() view returns(uint256) +func (_Rollup *RollupCaller) RollupDelayPeird(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _Rollup.contract.Call(opts, &out, "rollupDelayPeird") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// +// Solidity: function rollupDelayPeird() view returns(uint256) +func (_Rollup *RollupSession) RollupDelayPeird() (*big.Int, error) { + return _Rollup.Contract.RollupDelayPeird(&_Rollup.CallOpts) +} + +// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// +// Solidity: function rollupDelayPeird() view returns(uint256) +func (_Rollup *RollupCallerSession) RollupDelayPeird() (*big.Int, error) { + return _Rollup.Contract.RollupDelayPeird(&_Rollup.CallOpts) +} + // Verifier is a free data retrieval call binding the contract method 0x2b7ac3f3. // // Solidity: function verifier() view returns(address) @@ -1282,6 +1313,27 @@ func (_Rollup *RollupTransactorSession) CommitBatch(batchDataInput IRollupBatchD return _Rollup.Contract.CommitBatch(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput) } +// CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. +// +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +func (_Rollup *RollupTransactor) CommitBatchWithProof(opts *bind.TransactOpts, batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "commitBatchWithProof", batchDataInput, batchSignatureInput, _batchHeader, _batchProof) +} + +// CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. +// +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +func (_Rollup *RollupSession) CommitBatchWithProof(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { + return _Rollup.Contract.CommitBatchWithProof(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput, _batchHeader, _batchProof) +} + +// CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. +// +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +func (_Rollup *RollupTransactorSession) CommitBatchWithProof(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { + return _Rollup.Contract.CommitBatchWithProof(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput, _batchHeader, _batchProof) +} + // FinalizeBatch is a paid mutator transaction binding the contract method 0x13361101. // // Solidity: function finalizeBatch(bytes _batchHeader) returns() @@ -3075,6 +3127,151 @@ func (_Rollup *RollupFilterer) ParseRevertBatch(log types.Log) (*RollupRevertBat return event, nil } +// RollupRevertBatchRangeIterator is returned from FilterRevertBatchRange and is used to iterate over the raw logs and unpacked data for RevertBatchRange events raised by the Rollup contract. +type RollupRevertBatchRangeIterator struct { + Event *RollupRevertBatchRange // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RollupRevertBatchRangeIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RollupRevertBatchRange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RollupRevertBatchRange) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RollupRevertBatchRangeIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RollupRevertBatchRangeIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RollupRevertBatchRange represents a RevertBatchRange event raised by the Rollup contract. +type RollupRevertBatchRange struct { + StartBatchIndex *big.Int + Count *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRevertBatchRange is a free log retrieval operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. +// +// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) +func (_Rollup *RollupFilterer) FilterRevertBatchRange(opts *bind.FilterOpts, startBatchIndex []*big.Int) (*RollupRevertBatchRangeIterator, error) { + + var startBatchIndexRule []interface{} + for _, startBatchIndexItem := range startBatchIndex { + startBatchIndexRule = append(startBatchIndexRule, startBatchIndexItem) + } + + logs, sub, err := _Rollup.contract.FilterLogs(opts, "RevertBatchRange", startBatchIndexRule) + if err != nil { + return nil, err + } + return &RollupRevertBatchRangeIterator{contract: _Rollup.contract, event: "RevertBatchRange", logs: logs, sub: sub}, nil +} + +// WatchRevertBatchRange is a free log subscription operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. +// +// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) +func (_Rollup *RollupFilterer) WatchRevertBatchRange(opts *bind.WatchOpts, sink chan<- *RollupRevertBatchRange, startBatchIndex []*big.Int) (event.Subscription, error) { + + var startBatchIndexRule []interface{} + for _, startBatchIndexItem := range startBatchIndex { + startBatchIndexRule = append(startBatchIndexRule, startBatchIndexItem) + } + + logs, sub, err := _Rollup.contract.WatchLogs(opts, "RevertBatchRange", startBatchIndexRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RollupRevertBatchRange) + if err := _Rollup.contract.UnpackLog(event, "RevertBatchRange", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRevertBatchRange is a log parse operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. +// +// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) +func (_Rollup *RollupFilterer) ParseRevertBatchRange(log types.Log) (*RollupRevertBatchRange, error) { + event := new(RollupRevertBatchRange) + if err := _Rollup.contract.UnpackLog(event, "RevertBatchRange", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RollupUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Rollup contract. type RollupUnpausedIterator struct { Event *RollupUnpaused // Event containing the contract specifics and raw log diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 126e8accf..a3b674a04 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1028_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1028_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1031_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1030_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1028_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1030_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1030_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1031_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1031_storage\"},\"t_struct(BatchChallenge)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"rollupDelayPeird\",\"offset\":0,\"slot\":\"172\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1031_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1032_storage\"},\"t_struct(BatchChallenge)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610306575f3560e01c8063728cdbca11610191578063b35dac4e116100dc578063ddd8a3dc11610087578063e3fff1dd11610062578063e3fff1dd14610a0c578063f2fde38b14610a2b578063fb1e8b0414610a4a575f80fd5b8063ddd8a3dc146109ac578063de8b3035146109d8578063dff7827e146109f7575f80fd5b8063cd4edc69116100b7578063cd4edc6914610965578063ce5db8d614610978578063d279c1911461098d575f80fd5b8063b35dac4e14610908578063b3e0a50914610927578063bedb86fb14610946575f80fd5b8063a415d8dc1161013c578063abc8d68d11610117578063abc8d68d146108a9578063b31a77d3146108d4578063b3484425146108e9575f80fd5b8063a415d8dc14610847578063a479265d14610875578063a4f209b01461088a575f80fd5b80638f1d37761161016c5780638f1d37761461072d578063910129d4146107f757806397fc007c14610828575f80fd5b8063728cdbca146106cb57806388b1ea09146106ea5780638da5cb5b14610703575f80fd5b80632b7ac3f3116102515780635ef7a94a116101fc57806368589dfa116101d757806368589dfa1461066d5780636c578c1d14610698578063715018a6146106b7575f80fd5b80635ef7a94a146105a25780635f77cf1d14610602578063612672901461064e575f80fd5b8063428868b51161022c578063428868b51461055957806357e0af6c1461056c5780635c975abb1461058b575f80fd5b80632b7ac3f3146104c75780633b70c18a146105185780633e001b6614610544575f80fd5b806313361101116102b157806321e2f9e01161028c57806321e2f9e0146104525780632362f03e146104715780632571098d1461049c575f80fd5b806313361101146103ee57806318463fb01461040d57806318af3b2b14610422575f80fd5b806310d44583116102e157806310d4458314610398578063116a1f42146103b7578063121dcd50146103d9575f80fd5b806304d7721514610311578063059def61146103545780630ceb678014610377575f80fd5b3661030d57005b5f80fd5b34801561031c575f80fd5b5061033f61032b366004614ba2565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561035f575f80fd5b50610369609d5481565b60405190815260200161034b565b348015610382575f80fd5b50610396610391366004614be1565b610a5f565b005b3480156103a3575f80fd5b506103966103b2366004614c3f565b610b83565b3480156103c2575f80fd5b5061033f6103d1366004614ba2565b609d54101590565b3480156103e4575f80fd5b50610369609e5481565b3480156103f9575f80fd5b50610396610408366004614c87565b610f6f565b348015610418575f80fd5b5061036960a75481565b34801561042d575f80fd5b5061033f61043c366004614ba2565b5f90815260a26020526040902060010154421090565b34801561045d575f80fd5b5061033f61046c366004614ba2565b61156e565b34801561047c575f80fd5b5061036961048b366004614ba2565b60a16020525f908152604090205481565b3480156104a7575f80fd5b506103696104b6366004614ba2565b60a06020525f908152604090205481565b3480156104d2575f80fd5b50609c546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034b565b348015610523575f80fd5b50609b546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b34801561054f575f80fd5b5061036960aa5481565b610396610567366004614cc6565b61159c565b348015610577575f80fd5b50610396610586366004614ba2565b611f48565b348015610596575f80fd5b5060655460ff1661033f565b3480156105ad575f80fd5b506105e26105bc366004614ba2565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161034b565b34801561060d575f80fd5b506106357f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161034b565b348015610659575f80fd5b50610396610668366004614ba2565b61200d565b348015610678575f80fd5b50610369610687366004614ba2565b60ab6020525f908152604090205481565b3480156106a3575f80fd5b506103966106b2366004614be1565b612270565b3480156106c2575f80fd5b5061039661237f565b3480156106d6575f80fd5b506103966106e5366004614d33565b612392565b3480156106f5575f80fd5b5060a65461033f9060ff1681565b34801561070e575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166104f3565b348015610738575f80fd5b506107a6610747366004614ba2565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c00161034b565b348015610802575f80fd5b5061033f610811366004614ba2565b5f90815260a4602052604090206003015460ff1690565b348015610833575f80fd5b50610396610842366004614be1565b61275b565b348015610852575f80fd5b5061033f610861366004614be1565b609f6020525f908152604090205460ff1681565b348015610880575f80fd5b5061036960995481565b348015610895575f80fd5b506103966108a4366004614ba2565b61287f565b3480156108b4575f80fd5b506103696108c3366004614be1565b60a56020525f908152604090205481565b3480156108df575f80fd5b5061036960a85481565b3480156108f4575f80fd5b50610396610903366004614d8e565b612949565b348015610913575f80fd5b50610396610922366004614be1565b612d28565b348015610932575f80fd5b50610396610941366004614c87565b612d8e565b348015610951575f80fd5b50610396610960366004614e02565b61317a565b610396610973366004614e34565b61330d565b348015610983575f80fd5b5061036960985481565b348015610998575f80fd5b506103966109a7366004614be1565b613a22565b3480156109b7575f80fd5b506097546104f39073ffffffffffffffffffffffffffffffffffffffff1681565b3480156109e3575f80fd5b5061033f6109f2366004614ba2565b613b08565b348015610a02575f80fd5b50610369609a5481565b348015610a17575f80fd5b50610396610a26366004614ba2565b613b5f565b348015610a36575f80fd5b50610396610a45366004614be1565b613c1c565b348015610a55575f80fd5b5061036960a95481565b610a67613cd0565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b8b613cd0565b5f8111610bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610af2565b5f80610c008585613d51565b915091505f610c13836001015160c01c90565b5f81815260a160205260409020549091508214610c8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b5f60a181610c9a8785614e89565b81526020019081526020015f205414610d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610af2565b609d548111610dc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b610dd0600182614e9c565b609e555b8315610f6757604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e1c81613b08565b15610ea2575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610e74908490614e89565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f1f575060a85481145b15610f29575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610dd4575b505050505050565b60a85415610fd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b610fe1613e04565b5f80610fed8484613d51565b915091505f611000836001015160c01c90565b5f81815260a160205260409020549091508214611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b6110828161156e565b6110e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b6110f181613b08565b15611158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003015460ff16156111d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610af2565b5f81815260a2602052604090206001015442101561124d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610af2565b605983015160a05f611260600185614e9c565b81526020019081526020015f2054146112d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f81815260a060205260409020541561134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610af2565b80609d54600101146113b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b609d819055600160a35f6113cd866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561143a61142d846011015160c01c90565b600985015160c01c613e71565b60a25f611448600184614e9c565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906114819084614e9c565b81526020019081526020015f205f905560a45f6001836114a19190614e9c565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61154a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061159657505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611622573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116469190614eaf565b6116ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610af2565b60a85415611716576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b61171e613e04565b61172b6020830183614eca565b60ff16158061174957506117426020830183614eca565b60ff166001145b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610af2565b608082013561181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610af2565b60a0820135611885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610af2565b5f8061189c6118976020860186614eea565b613d51565b915091505f6118af836001015160c01c90565b90505f60a1816118c0846001614e89565b81526020019081526020015f205414611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610af2565b609e5481146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610af2565b5f81815260a160205260409020548214611a16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610af2565b5f81815260ab6020526040902054608086013514611a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610af2565b5f611a9f846011015160c01c90565b90505f611acb611ab56060890160408a01614f4b565b611ac560808a0160608b01614f64565b84613f3b565b9050611add6080880160608901614f64565b6001939093019261ffff1691909101905f804915611afc575f49611b1e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f9611b2f60208a018a614eca565b60ff16600103611b3e57506101015b604080518281019091529650611b6387611b5b60208c018c614eca565b60ff16613f7f565b60c085901b6001880152611b9187611b8160808c0160608d01614f64565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a013560798901528901356099880152611bf587611bd660208b018b614eea565b604051611be4929190614f85565b604051809103902060b99190910152565b60d987018690526001611c0b60208b018b614eca565b60ff1610611c3d57611c3d87611c2760608c0160408d01614f4b565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff1615611c9c5760a7545f90815260a460205260409020600201546099544291611c8f91614e89565b611c999190614e9c565b90505b60405180608001604052804281526020018260985442611cbc9190614e89565b611cc69190614e89565b8152602001611cdb60608d0160408e01614f4b565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611d73573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d979190614f94565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b79150893590611e0c90611e06908c018c614eea565b5f613f86565b5f611e1a60408d018d614eea565b6040518663ffffffff1660e01b8152600401611e3a959493929190614ff2565b602060405180830381865afa158015611e55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e799190614eaf565b611f05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610af2565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b611f50613cd0565b5f81118015611f6157506099548114155b611fc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610af2565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561202d57505f5460ff8083169116105b6120b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556120f45f5460ff1690565b60ff16600214612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610af2565b816121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610af2565b609e545f90815260ab602052604090205461221657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001612001565b612278613cd0565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612306576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610af2565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b78565b612387613cd0565b6123905f613fda565b565b5f54610100900460ff16158080156123b057505f54600160ff909116105b806123c95750303b1580156123c957505f5460ff166001145b612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610af2565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156124b1575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806124e8575073ffffffffffffffffffffffffffffffffffffffff8516155b1561251f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871661259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610af2565b6125a4614050565b6125ac6140ee565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612752575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612763613cd0565b73ffffffffffffffffffffffffffffffffffffffff8116158015906127a35750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610af2565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612887613cd0565b5f81118015612897575060648111155b80156128a5575060a9548114155b61290b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610af2565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101612001565b60a854156129b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b6129bb613e04565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612a41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a659190614eaf565b612acb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610af2565b5f80612ad78686613d51565b915091505f612aea836001015160c01c90565b5f81815260a160205260409020549091508214612b63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b612b6c81613b08565b612bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610af2565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556099546002909101544291612c4991614e89565b11612cdd575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612cd89183919061418c565b612752565b612ce883868661430f565b61275281336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506144e9565b612d30613cd0565b60aa80545f909155612d4282826145cf565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101612001565b612d96613cd0565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610af2565b5f80612e338484613d51565b915091505f612e46836001015160c01c90565b90508015612eb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610af2565b5f612ebc846079015190565b905080612f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610af2565b600984015160c01c15612f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610af2565b5f612fa0856019015190565b03613007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610af2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014613033856039015190565b1461309a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610af2565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b613182613cd0565b80156132db576131906146a1565b60a65460ff161561328d5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a590925282208054919290916131f1908490614e89565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b6132e3614726565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336132b0565b50565b335f908152609f602052604090205460ff16613385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610af2565b60a854156133ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610af2565b6133f7613e04565b60a65460ff1615613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610af2565b8167ffffffffffffffff16609d54106134d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a16020526040902054811461355a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610af2565b61356d8267ffffffffffffffff1661156e565b6135d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610af2565b67ffffffffffffffff82165f90815260a26020526040902060010154421061371f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610af2565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613789573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ad9190614f94565b341015613816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610af2565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161398291815260200190565b60405180910390a35f609d54600161399a9190614e89565b90505b609e5481116139f2578267ffffffffffffffff1681146139e0576099545f82815260a26020526040812060010180549091906139da908490614e89565b90915550505b806139ea81615072565b91505061399d565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003613a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610af2565b335f90815260a56020526040812055613ab482826145cf565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613afc91815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115965750505f90815260a46020526040902060030154610100900460ff161590565b613b67613cd0565b5f81118015613b7857506098548114155b613bde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610af2565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101612001565b613c24613cd0565b73ffffffffffffffffffffffffffffffffffffffff8116613cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610af2565b61330a81613fda565b60335473ffffffffffffffffffffffffffffffffffffffff163314612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610af2565b5f805f613d5e858561477d565b90505f8160ff165f03613d7f57613d758686614807565b9094509050613df6565b8160ff16600103613d9457613d75868661488a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610af2565b808420925050509250929050565b60655460ff1615612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610af2565b805f03613e7c575050565b8082035f5b82811015613f3557610100818403811115613e9b57508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613f0b575f80fd5b505af1158015613f1d573d5f803e3d5ffd5b50505050610100830192505061010081019050613e81565b50505050565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101613f708161ffff8716866148f7565b82900390912095945050505050565b8082535050565b60605f80808080613f99888a018a615196565b9550955095509550955050818710613fb7579450613fd39350505050565b838710613fcb578295505050505050613fd3565b509293505050505b9392505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b6123906149d7565b5f54610100900460ff16614184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b612390614a97565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af115801561421d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142419190614f94565b5f86815260a46020526040902060010154909150614260908290614e89565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a5909152812080549091906142ac908490614e89565b90915550506040516142bf908490615233565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80614376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610af2565b5f614385846001015160c01c90565b90505f614393856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006143c2876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614491885160f81c90565b858888866040518663ffffffff1660e01b81526004016144b595949392919061525f565b5f6040518083038186803b1580156144cb575f80fd5b505afa1580156144dd573d5f803e3d5ffd5b50505050505050505050565b5f83815260a4602052604081206001015460a95490919060649061450d9084615290565b61451791906152a7565b90506145238183614e9c565b60aa5f8282546145339190614e89565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a560205260408120805483929061456c908490614e89565b909155505060405161457f908490615233565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b801561469d575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f811461462b576040519150601f19603f3d011682016040523d82523d5f602084013e614630565b606091505b505090508061469b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610af2565b505b5050565b6146a9613e04565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586146fc3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61472e614b36565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336146fc565b5f816147e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610af2565b82825f8181106147f7576147f76152df565b919091013560f81c949350505050565b5f8160f9811015614874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610af2565b6040519150808483378082016040529250929050565b5f816101018114614874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610af2565b5f825f03614906575082613fd3565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156149cd576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015614994573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149b89190614f94565b87525060209095019460019384019301614921565b5093949350505050565b5f54610100900460ff16614a6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16614b2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610af2565b61239033613fda565b60655460ff16612390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610af2565b5f60208284031215614bb2575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114614bdc575f80fd5b919050565b5f60208284031215614bf1575f80fd5b613fd382614bb9565b5f8083601f840112614c0a575f80fd5b50813567ffffffffffffffff811115614c21575f80fd5b602083019150836020828501011115614c38575f80fd5b9250929050565b5f805f60408486031215614c51575f80fd5b833567ffffffffffffffff811115614c67575f80fd5b614c7386828701614bfa565b909790965060209590950135949350505050565b5f8060208385031215614c98575f80fd5b823567ffffffffffffffff811115614cae575f80fd5b614cba85828601614bfa565b90969095509350505050565b5f8060408385031215614cd7575f80fd5b823567ffffffffffffffff80821115614cee575f80fd5b9084019060e08287031215614d01575f80fd5b90925060208401359080821115614d16575f80fd5b50830160608186031215614d28575f80fd5b809150509250929050565b5f805f805f8060c08789031215614d48575f80fd5b614d5187614bb9565b9550614d5f60208801614bb9565b9450614d6d60408801614bb9565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614da1575f80fd5b843567ffffffffffffffff80821115614db8575f80fd5b614dc488838901614bfa565b90965094506020870135915080821115614ddc575f80fd5b50614de987828801614bfa565b95989497509550505050565b801515811461330a575f80fd5b5f60208284031215614e12575f80fd5b8135613fd381614df5565b803567ffffffffffffffff81168114614bdc575f80fd5b5f8060408385031215614e45575f80fd5b614e4e83614e1d565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561159657611596614e5c565b8181038181111561159657611596614e5c565b5f60208284031215614ebf575f80fd5b8151613fd381614df5565b5f60208284031215614eda575f80fd5b813560ff81168114613fd3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f1d575f80fd5b83018035915067ffffffffffffffff821115614f37575f80fd5b602001915036819003821315614c38575f80fd5b5f60208284031215614f5b575f80fd5b613fd382614e1d565b5f60208284031215614f74575f80fd5b813561ffff81168114613fd3575f80fd5b818382375f9101908152919050565b5f60208284031215614fa4575f80fd5b5051919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561504957845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615017565b50508760408601528481036060860152615064818789614fab565b9a9950505050505050505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150a2576150a2614e5c565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126150e5575f80fd5b8135602067ffffffffffffffff80831115615102576151026150a9565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615145576151456150a9565b6040529384526020818701810194908101925087851115615164575f80fd5b6020870191505b8482101561518b5761517c82614bb9565b8352918301919083019061516b565b979650505050505050565b5f805f805f8060c087890312156151ab575f80fd5b86359550602087013567ffffffffffffffff808211156151c9575f80fd5b6151d58a838b016150d6565b96506040890135955060608901359150808211156151f1575f80fd5b6151fd8a838b016150d6565b94506080890135935060a0890135915080821115615219575f80fd5b5061522689828a016150d6565b9150509295509295509295565b5f82515f5b818110156152525760208186018101518583015201615238565b505f920191825250919050565b858152846020820152608060408201525f61527e608083018587614fab565b90508260608301529695505050505050565b808202811582820484141761159657611596614e5c565b5f826152da577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffdfea164736f6c6343000818000a" +var RollupDeployedBin = "0x60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a35578063e3fff1dd14610a4a578063f2fde38b14610a69578063fb1e8b0414610a88575f80fd5b8063d279c191146109cb578063ddd8a3dc146109ea578063de8b303514610a16575f80fd5b8063c5bde702116100c2578063c5bde7021461098e578063cd4edc69146109a3578063ce5db8d6146109b6575f80fd5b8063b35dac4e14610931578063b3e0a50914610950578063bedb86fb1461096f575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d146108d2578063b31a77d3146108fd578063b348442514610912575f80fd5b8063a415d8dc14610870578063a479265d1461089e578063a4f209b0146108b3575f80fd5b80638f1d3776116101775780638f1d377614610756578063910129d41461082057806397fc007c14610851575f80fd5b8063728cdbca146106f457806388b1ea09146107135780638da5cb5b1461072c575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461067757806368589dfa146106965780636c578c1d146106c1578063715018a6146106e0575f80fd5b80635c975abb146105b45780635ef7a94a146105cb5780635f77cf1d1461062b575f80fd5b8063428868b511610242578063428868b51461056f5780634e8f1d671461058257806357e0af6c14610595575f80fd5b80632b7ac3f3146104dd5780633b70c18a1461052e5780633e001b661461055a575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b50610355610341366004615297565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046152d6565b610a9d565b005b3480156103b9575f80fd5b506103ac6103c8366004615334565b610bc1565b3480156103d8575f80fd5b506103556103e7366004615297565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e36600461537c565b610fad565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b50610355610452366004615297565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b50610355610482366004615297565b6115ac565b348015610492575f80fd5b5061037f6104a1366004615297565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc366004615297565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546105099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610361565b348015610539575f80fd5b50609b546105099073ffffffffffffffffffffffffffffffffffffffff1681565b348015610565575f80fd5b5061037f60aa5481565b6103ac61057d3660046153e1565b6115da565b6103ac610590366004615441565b61176a565b3480156105a0575f80fd5b506103ac6105af366004615297565b611b40565b3480156105bf575f80fd5b5060655460ff16610355565b3480156105d6575f80fd5b5061060b6105e5366004615297565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b348015610636575f80fd5b5061065e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b348015610682575f80fd5b506103ac610691366004615297565b611c05565b3480156106a1575f80fd5b5061037f6106b0366004615297565b60ab6020525f908152604090205481565b3480156106cc575f80fd5b506103ac6106db3660046152d6565b611e68565b3480156106eb575f80fd5b506103ac611f77565b3480156106ff575f80fd5b506103ac61070e3660046154f2565b611f8a565b34801561071e575f80fd5b5060a6546103559060ff1681565b348015610737575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610509565b348015610761575f80fd5b506107cf610770366004615297565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b34801561082b575f80fd5b5061035561083a366004615297565b5f90815260a4602052604090206003015460ff1690565b34801561085c575f80fd5b506103ac61086b3660046152d6565b612353565b34801561087b575f80fd5b5061035561088a3660046152d6565b609f6020525f908152604090205460ff1681565b3480156108a9575f80fd5b5061037f60995481565b3480156108be575f80fd5b506103ac6108cd366004615297565b612477565b3480156108dd575f80fd5b5061037f6108ec3660046152d6565b60a56020525f908152604090205481565b348015610908575f80fd5b5061037f60a85481565b34801561091d575f80fd5b506103ac61092c36600461554d565b612541565b34801561093c575f80fd5b506103ac61094b3660046152d6565b612920565b34801561095b575f80fd5b506103ac61096a36600461537c565b612986565b34801561097a575f80fd5b506103ac6109893660046155c1565b612d72565b348015610999575f80fd5b5061037f60ac5481565b6103ac6109b13660046155f3565b612f05565b3480156109c1575f80fd5b5061037f60985481565b3480156109d6575f80fd5b506103ac6109e53660046152d6565b61361a565b3480156109f5575f80fd5b506097546105099073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a21575f80fd5b50610355610a30366004615297565b613700565b348015610a40575f80fd5b5061037f609a5481565b348015610a55575f80fd5b506103ac610a64366004615297565b613757565b348015610a74575f80fd5b506103ac610a833660046152d6565b613814565b348015610a93575f80fd5b5061037f60a95481565b610aa56138c8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610bc96138c8565b5f8111610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b30565b5f80610c3e8585613949565b915091505f610c51836001015160c01c90565b5f81815260a160205260409020549091508214610cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b5f60a181610cd88785615648565b81526020019081526020015f205414610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b30565b609d548111610e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b30565b610e0e60018261565b565b609e555b8315610fa557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e5a81613700565b15610ee0575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610eb2908490615648565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f5d575060a85481145b15610f67575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e12575b505050505050565b60a85415611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b61101f6139fc565b5f8061102b8484613949565b915091505f61103e836001015160c01c90565b5f81815260a1602052604090205490915082146110b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b6110c0816115ac565b611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b30565b61112f81613700565b15611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b30565b5f81815260a4602052604090206003015460ff1615611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b30565b5f81815260a2602052604090206001015442101561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b30565b605983015160a05f61129e60018561565b565b81526020019081526020015f205414611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b30565b5f81815260a0602052604090205415611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b30565b80609d54600101146113f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b609d819055600160a35f61140b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561147861146b846011015160c01c90565b600985015160c01c613a69565b60a25f61148660018461565b565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906114bf908461565b565b81526020019081526020015f205f905560a45f6001836114df919061565b565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611588866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906115d457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611660573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611684919061566e565b6116ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b30565b60a85415611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b61175c6139fc565b6117668282613b33565b5050565b60a854156117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b6117dc6139fc565b60a65460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b30565b5f61185f61185a6020890189615689565b613949565b5090505f611871826001015160c01c90565b9050609d5481146118de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b60ac54609e545f90815260a2602052604090205442916118fd91615648565b101580156119a8575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199b91906156ea565b6119a59190615648565b10155b156119df576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546119ee919061565b565b90508015611a6c575f611a02836001615648565b9050805b609e548111611a2f575f81815260a1602052604081205580611a2781615701565b915050611a06565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611a6291815260200190565b60405180910390a2505b609e829055611a7b8989613b33565b5f80611a878989613949565b915091505f611a9a836001015160c01c90565b5f81815260a160205260409020549091508214611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b611b1d8c84614358565b611b28838989614636565b611b328a8a610fad565b505050505050505050505050565b611b486138c8565b5f81118015611b5957506099548114155b611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b30565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c2557505f5460ff8083169116105b611cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b30565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611cec5f5460ff1690565b60ff16600214611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b30565b81611de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b30565b609e545f90815260ab6020526040902054611e0e57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611bf9565b611e706138c8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b30565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bb6565b611f7f6138c8565b611f885f614810565b565b5f54610100900460ff1615808015611fa857505f54600160ff909116105b80611fc15750303b158015611fc157505f5460ff166001145b61204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b30565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156120a9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806120e0575073ffffffffffffffffffffffffffffffffffffffff8516155b15612117576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b30565b61219c614886565b6121a4614924565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561234a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61235b6138c8565b73ffffffffffffffffffffffffffffffffffffffff81161580159061239b5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b30565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61247f6138c8565b5f8111801561248f575060648111155b801561249d575060a9548114155b612503576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b30565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611bf9565b60a854156125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b6125b36139fc565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612639573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265d919061566e565b6126c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b30565b5f806126cf8686613949565b915091505f6126e2836001015160c01c90565b5f81815260a16020526040902054909150821461275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b61276481613700565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b30565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161284191615648565b116128d5575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526128d0918391906149c2565b61234a565b6128e0838686614636565b61234a81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614b45565b6129286138c8565b60aa80545f90915561293a8282614c2b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611bf9565b61298e6138c8565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b30565b5f80612a2b8484613949565b915091505f612a3e836001015160c01c90565b90508015612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b30565b5f612ab4846079015190565b905080612b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b30565b600984015160c01c15612b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b30565b5f612b98856019015190565b03612bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b30565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c2b856039015190565b14612c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b30565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612d7a6138c8565b8015612ed357612d88614cf7565b60a65460ff1615612e855760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612de9908490615648565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612edb614d7c565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ea8565b50565b335f908152609f602052604090205460ff16612f7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b30565b60a85415612fe7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b612fef6139fc565b60a65460ff161561305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b30565b8167ffffffffffffffff16609d54106130d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a160205260409020548114613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b6131658267ffffffffffffffff166115ac565b6131cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561326d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a260205260409020600101544210613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b30565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133a591906156ea565b34101561340e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b30565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161357a91815260200190565b60405180910390a35f609d5460016135929190615648565b90505b609e5481116135ea578267ffffffffffffffff1681146135d8576099545f82815260a26020526040812060010180549091906135d2908490615648565b90915550505b806135e281615701565b915050613595565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b30565b335f90815260a560205260408120556136ac8282614c2b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516136f491815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115d45750505f90815260a46020526040902060030154610100900460ff161590565b61375f6138c8565b5f8111801561377057506098548114155b6137d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b30565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611bf9565b61381c6138c8565b73ffffffffffffffffffffffffffffffffffffffff81166138bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b30565b612f0281614810565b60335473ffffffffffffffffffffffffffffffffffffffff163314611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b30565b5f805f6139568585614dd3565b90505f8160ff165f036139775761396d8686614e5d565b90945090506139ee565b8160ff1660010361398c5761396d8686614ee0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b30565b808420925050509250929050565b60655460ff1615611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b30565b805f03613a74575050565b8082035f5b82811015613b2d57610100818403811115613a9357508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613b03575f80fd5b505af1158015613b15573d5f803e3d5ffd5b50505050610100830192505061010081019050613a79565b50505050565b613b406020830183615738565b60ff161580613b5e5750613b576020830183615738565b60ff166001145b613bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b30565b6080820135613c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b30565b60a0820135613c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b30565b5f80613cac61185a6020860186615689565b915091505f613cbf836001015160c01c90565b90505f60a181613cd0846001615648565b81526020019081526020015f205414613d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b30565b609e548114613db0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b5f81815260a160205260409020548214613e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b30565b5f81815260ab6020526040902054608086013514613ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b30565b5f613eaf846011015160c01c90565b90505f613edb613ec56060890160408a01615758565b613ed560808a0160608b01615771565b84614f4d565b9050613eed6080880160608901615771565b6001939093019261ffff1691909101905f804915613f0c575f49613f2e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f9613f3f60208a018a615738565b60ff16600103613f4e57506101015b604080518281019091529650613f7387613f6b60208c018c615738565b60ff16614f91565b60c085901b6001880152613fa187613f9160808c0160608d01615771565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261400587613fe660208b018b615689565b604051613ff4929190615792565b604051809103902060b99190910152565b60d98701869052600161401b60208b018b615738565b60ff161061404d5761404d8761403760608c0160408d01615758565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156140ac5760a7545f90815260a46020526040902060020154609954429161409f91615648565b6140a9919061565b565b90505b604051806080016040528042815260200182609854426140cc9190615648565b6140d69190615648565b81526020016140eb60608d0160408e01615758565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614183573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141a791906156ea565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061421c90614216908c018c615689565b5f614f98565b5f61422a60408d018d615689565b6040518663ffffffff1660e01b815260040161424a9594939291906157e8565b602060405180830381865afa158015614265573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614289919061566e565b614315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b30565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61436a6020840184615738565b60ff16146143d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b30565b600981015160c01c6143ec6080840160608501615771565b61ffff1614614457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b30565b60598101518260800135146144c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b30565b60798101518260a0013514614539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b30565b60998101518260c00135146145aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b30565b5f6145bb61185a6020850185615689565b9150506145c98260d9015190565b8114614631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b30565b505050565b8061469d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b30565b5f6146ac846001015160c01c90565b90505f6146ba856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006146e9876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a8486147b8885160f81c90565b858888866040518663ffffffff1660e01b81526004016147dc959493929190615868565b5f6040518083038186803b1580156147f2575f80fd5b505afa158015614804573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661491c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f88614fec565b5f54610100900460ff166149ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f886150ac565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614a53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a7791906156ea565b5f86815260a46020526040902060010154909150614a96908290615648565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614ae2908490615648565b9091555050604051614af5908490615899565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614b6990846158c5565b614b7391906158dc565b9050614b7f818361565b565b60aa5f828254614b8f9190615648565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614bc8908490615648565b9091555050604051614bdb908490615899565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015611766575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614c87576040519150601f19603f3d011682016040523d82523d5f602084013e614c8c565b606091505b5050905080614631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b30565b614cff6139fc565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614d523390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614d8461514b565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614d52565b5f81614e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b30565b82825f818110614e4d57614e4d615914565b919091013560f81c949350505050565b5f8160f9811015614eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b30565b6040519150808483378082016040529250929050565b5f816101018114614eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b30565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614f828161ffff8716866151b7565b82900390912095945050505050565b8082535050565b60605f80808080614fab888a018a615a2e565b9550955095509550955050818710614fc9579450614fe59350505050565b838710614fdd578295505050505050614fe5565b509293505050505b9392505050565b5f54610100900460ff16615082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f8833614810565b60655460ff16611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b30565b5f825f036151c6575082614fe5565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561528d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615254573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061527891906156ea565b875250602090950194600193840193016151e1565b5093949350505050565b5f602082840312156152a7575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146152d1575f80fd5b919050565b5f602082840312156152e6575f80fd5b614fe5826152ae565b5f8083601f8401126152ff575f80fd5b50813567ffffffffffffffff811115615316575f80fd5b60208301915083602082850101111561532d575f80fd5b9250929050565b5f805f60408486031215615346575f80fd5b833567ffffffffffffffff81111561535c575f80fd5b615368868287016152ef565b909790965060209590950135949350505050565b5f806020838503121561538d575f80fd5b823567ffffffffffffffff8111156153a3575f80fd5b6153af858286016152ef565b90969095509350505050565b5f60e082840312156153cb575f80fd5b50919050565b5f606082840312156153cb575f80fd5b5f80604083850312156153f2575f80fd5b823567ffffffffffffffff80821115615409575f80fd5b615415868387016153bb565b9350602085013591508082111561542a575f80fd5b50615437858286016153d1565b9150509250929050565b5f805f805f8060808789031215615456575f80fd5b863567ffffffffffffffff8082111561546d575f80fd5b6154798a838b016153bb565b9750602089013591508082111561548e575f80fd5b61549a8a838b016153d1565b965060408901359150808211156154af575f80fd5b6154bb8a838b016152ef565b909650945060608901359150808211156154d3575f80fd5b506154e089828a016152ef565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615507575f80fd5b615510876152ae565b955061551e602088016152ae565b945061552c604088016152ae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615560575f80fd5b843567ffffffffffffffff80821115615577575f80fd5b615583888389016152ef565b9096509450602087013591508082111561559b575f80fd5b506155a8878288016152ef565b95989497509550505050565b8015158114612f02575f80fd5b5f602082840312156155d1575f80fd5b8135614fe5816155b4565b803567ffffffffffffffff811681146152d1575f80fd5b5f8060408385031215615604575f80fd5b61560d836155dc565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156115d4576115d461561b565b818103818111156115d4576115d461561b565b5f6020828403121561567e575f80fd5b8151614fe5816155b4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126156bc575f80fd5b83018035915067ffffffffffffffff8211156156d6575f80fd5b60200191503681900382131561532d575f80fd5b5f602082840312156156fa575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157315761573161561b565b5060010190565b5f60208284031215615748575f80fd5b813560ff81168114614fe5575f80fd5b5f60208284031215615768575f80fd5b614fe5826155dc565b5f60208284031215615781575f80fd5b813561ffff81168114614fe5575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561583f57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161580d565b5050876040860152848103606086015261585a8187896157a1565b9a9950505050505050505050565b858152846020820152608060408201525f6158876080830185876157a1565b90508260608301529695505050505050565b5f82515f5b818110156158b8576020818601810151858301520161589e565b505f920191825250919050565b80820281158282048414176115d4576115d461561b565b5f8261590f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261597d575f80fd5b8135602067ffffffffffffffff8083111561599a5761599a615941565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156159dd576159dd615941565b60405293845260208187018101949081019250878511156159fc575f80fd5b6020870191505b84821015615a2357615a14826152ae565b83529183019190830190615a03565b979650505050505050565b5f805f805f8060c08789031215615a43575f80fd5b86359550602087013567ffffffffffffffff80821115615a61575f80fd5b615a6d8a838b0161596e565b9650604089013595506060890135915080821115615a89575f80fd5b615a958a838b0161596e565b94506080890135935060a0890135915080821115615ab1575f80fd5b50615abe89828a0161596e565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { From 31d04b590812f0fc6ac1577cdbb3ef4dd96f6fb8 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Mon, 5 Jan 2026 15:34:42 +0800 Subject: [PATCH 03/13] set init --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 181 +++++++++++++++++++++- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/IRollup.sol | 5 + contracts/contracts/l1/rollup/Rollup.sol | 14 ++ 5 files changed, 200 insertions(+), 4 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 606e26a86..aeded07f2 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e146109da578063e3fff1dd146109ef578063f2fde38b14610a0e578063fb1e8b0414610a2d575f80fd5b8063d279c1911461097d578063ddd8a3dc1461099c578063de8b3035146109bb575f80fd5b8063c5bde702116100c2578063c5bde70214610940578063cd4edc6914610955578063ce5db8d614610968575f80fd5b8063b35dac4e146108e3578063b3e0a50914610902578063bedb86fb14610921575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d14610884578063b31a77d3146108af578063b3484425146108c4575f80fd5b8063a415d8dc14610822578063a479265d14610850578063a4f209b014610865575f80fd5b80638f1d3776116101775780638f1d377614610722578063910129d4146107d257806397fc007c14610803575f80fd5b8063728cdbca146106cd57806388b1ea09146106ec5780638da5cb5b14610705575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461065057806368589dfa1461066f5780636c578c1d1461069a578063715018a6146106b9575f80fd5b80635c975abb1461058d5780635ef7a94a146105a45780635f77cf1d14610604575f80fd5b8063428868b511610242578063428868b5146105485780634e8f1d671461055b57806357e0af6c1461056e575f80fd5b80632b7ac3f3146104dd5780633b70c18a146105145780633e001b6614610533575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b506103556103413660046146ac565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046146de565b610a42565b005b3480156103b9575f80fd5b506103ac6103c836600461473c565b610b14565b3480156103d8575f80fd5b506103556103e73660046146ac565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e366004614784565b610e6d565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b506103556104523660046146ac565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b506103556104823660046146ac565b611364565b348015610492575f80fd5b5061037f6104a13660046146ac565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc3660046146ac565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546104fc906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561051f575f80fd5b50609b546104fc906001600160a01b031681565b34801561053e575f80fd5b5061037f60aa5481565b6103ac6105563660046147e9565b611392565b6103ac610569366004614849565b6114d4565b348015610579575f80fd5b506103ac6105883660046146ac565b611835565b348015610598575f80fd5b5060655460ff16610355565b3480156105af575f80fd5b506105e46105be3660046146ac565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b34801561060f575f80fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b34801561065b575f80fd5b506103ac61066a3660046146ac565b6118e0565b34801561067a575f80fd5b5061037f6106893660046146ac565b60ab6020525f908152604090205481565b3480156106a5575f80fd5b506103ac6106b43660046146de565b611af5565b3480156106c4575f80fd5b506103ac611bb2565b3480156106d8575f80fd5b506103ac6106e73660046148fa565b611bc5565b3480156106f7575f80fd5b5060a6546103559060ff1681565b348015610710575f80fd5b506033546001600160a01b03166104fc565b34801561072d575f80fd5b5061078e61073c3660046146ac565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b3480156107dd575f80fd5b506103556107ec3660046146ac565b5f90815260a4602052604090206003015460ff1690565b34801561080e575f80fd5b506103ac61081d3660046146de565b611f08565b34801561082d575f80fd5b5061035561083c3660046146de565b609f6020525f908152604090205460ff1681565b34801561085b575f80fd5b5061037f60995481565b348015610870575f80fd5b506103ac61087f3660046146ac565b611feb565b34801561088f575f80fd5b5061037f61089e3660046146de565b60a56020525f908152604090205481565b3480156108ba575f80fd5b5061037f60a85481565b3480156108cf575f80fd5b506103ac6108de366004614955565b61209b565b3480156108ee575f80fd5b506103ac6108fd3660046146de565b6123bc565b34801561090d575f80fd5b506103ac61091c366004614784565b612415565b34801561092c575f80fd5b506103ac61093b3660046149c9565b612765565b34801561094b575f80fd5b5061037f60ac5481565b6103ac6109633660046149fb565b6128c0565b348015610973575f80fd5b5061037f60985481565b348015610988575f80fd5b506103ac6109973660046146de565b612e8c565b3480156109a7575f80fd5b506097546104fc906001600160a01b031681565b3480156109c6575f80fd5b506103556109d53660046146ac565b612f4b565b3480156109e5575f80fd5b5061037f609a5481565b3480156109fa575f80fd5b506103ac610a093660046146ac565b612f95565b348015610a19575f80fd5b506103ac610a283660046146de565b613038565b348015610a38575f80fd5b5061037f60a95481565b610a4a6130c5565b6001600160a01b0381165f908152609f602052604090205460ff1615610ab75760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b1c6130c5565b5f8111610b6b5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610aae565b5f80610b77858561311f565b915091505f610b8a836001015160c01c90565b5f81815260a160205260409020549091508214610be95760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b5f60a181610bf78785614a50565b81526020019081526020015f205414610c775760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610aae565b609d548111610cee5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b610cf9600182614a63565b609e555b8315610e6557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d4581612f4b565b15610da0575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d90908490614a50565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610e1d575060a85481145b15610e27575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cfd575b505050505050565b60a85415610ebd5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b610ec56131b8565b5f80610ed1848461311f565b915091505f610ee4836001015160c01c90565b5f81815260a160205260409020549091508214610f435760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b610f4c81611364565b610f985760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b610fa181612f4b565b15610fee5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003015460ff161561104f5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610aae565b5f81815260a260205260409020600101544210156110af5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610aae565b605983015160a05f6110c2600185614a63565b81526020019081526020015f20541461111d5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f81815260a06020526040902054156111785760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610aae565b80609d54600101146111cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b609d819055600160a35f6111e1866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611230611223846011015160c01c90565b600985015160c01c61320b565b60a25f61123e600184614a63565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112779084614a63565b81526020019081526020015f205f905560a45f6001836112979190614a63565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611340866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061138c57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114229190614a76565b61146e5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b60a854156114be5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6114c66131b8565b6114d082826132c8565b5050565b60a854156115245760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b61152c6131b8565b60a65460ff161561157f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b5f6115956115906020890189614a91565b61311f565b5090505f6115a7826001015160c01c90565b9050609d5481146115fa5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b60ac54609e545f90815260a26020526040902054429161161991614a50565b101580156116b7575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116aa9190614af2565b6116b49190614a50565b10155b156116ee576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546116fd9190614a63565b9050801561177b575f611711836001614a50565b9050805b609e54811161173e575f81815260a160205260408120558061173681614b09565b915050611715565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161177191815260200190565b60405180910390a2505b609e82905561178a89896132c8565b5f80611796898961311f565b915091505f6117a9836001015160c01c90565b5f81815260a1602052604090205490915082146118085760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b6118128c846139f6565b61181d838989613c38565b6118278a8a610e6d565b505050505050505050505050565b61183d6130c5565b5f8111801561184e57506099548114155b61189a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610aae565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561190057505f5460ff8083169116105b6119725760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556119ad5f5460ff1690565b60ff166002146119ff5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610aae565b81611a725760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610aae565b609e545f90815260ab6020526040902054611a9b57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118d4565b611afd6130c5565b6001600160a01b0381165f908152609f602052604090205460ff16611b645760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610aae565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b09565b611bba6130c5565b611bc35f613deb565b565b5f54610100900460ff1615808015611be357505f54600160ff909116105b80611bfc5750303b158015611bfc57505f5460ff166001145b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f805460ff191660011790558015611cac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b0386161580611cc957506001600160a01b038516155b15611d00576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d565760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610aae565b611d5e613e54565b611d66613ed8565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f106130c5565b6001600160a01b03811615801590611f365750609c546001600160a01b03828116911614155b611f825760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610aae565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ff36130c5565b5f81118015612003575060648111155b8015612011575060a9548114155b61205d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610aae565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118d4565b60a854156120eb5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6120f36131b8565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561215f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121839190614a76565b6121cf5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b5f806121db868661311f565b915091505f6121ee836001015160c01c90565b5f81815260a16020526040902054909150821461224d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b61225681612f4b565b6122a25760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916122fb91614a50565b11612371575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236c91839190613f5c565b611eff565b61237c838686613c38565b611eff81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506140b8565b6123c46130c5565b60aa80545f9091556123d68282614184565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118d4565b61241d6130c5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124945760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610aae565b5f806124a0848461311f565b915091505f6124b3836001015160c01c90565b905080156125035760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610aae565b5f61250f846079015190565b90508061255e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610aae565b600984015160c01c156125b35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610aae565b5f6125bf856019015190565b0361260c5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610aae565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612638856039015190565b146126855760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610aae565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276d6130c5565b801561288e5761277b614229565b60a65460ff161561284d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cf908490614a50565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612896614283565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612870565b50565b335f908152609f602052604090205460ff1661291e5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610aae565b60a8541561296e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6129766131b8565b60a65460ff16156129c95760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b8167ffffffffffffffff16609d5410612a245760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a160205260409020548114612a8b5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b612a9e8267ffffffffffffffff16611364565b612aea5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b655760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a260205260409020600101544210612bf55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610aae565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c699190614af2565b341015612cb85760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e0a91815260200190565b60405180910390a35f609d546001612e229190614a50565b90505b609e548111612e7a578267ffffffffffffffff168114612e68576099545f82815260a2602052604081206001018054909190612e62908490614a50565b90915550505b80612e7281614b09565b915050612e25565b505060a6805460ff1916600117905550565b335f90815260a5602052604081205490819003612eeb5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610aae565b335f90815260a56020526040812055612f048282614184565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051612f3f91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061138c5750505f90815260a46020526040902060030154610100900460ff161590565b612f9d6130c5565b5f81118015612fae57506098548114155b612ffa5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610aae565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118d4565b6130406130c5565b6001600160a01b0381166130bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aae565b6128bd81613deb565b6033546001600160a01b03163314611bc35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aae565b5f805f61312c85856142bc565b90505f8160ff165f0361314d57613143868661432c565b90945090506131aa565b8160ff16600103613162576131438686614395565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610aae565b808420925050509250929050565b60655460ff1615611bc35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610aae565b805f03613216575050565b8082035f5b828110156132c25761010081840381111561323557508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613298575f80fd5b505af11580156132aa573d5f803e3d5ffd5b5050505061010083019250506101008101905061321b565b50505050565b6132d56020830183614b40565b60ff1615806132f357506132ec6020830183614b40565b60ff166001145b61333f5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610aae565b60808201356133905760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610aae565b60a08201356133e15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610aae565b5f806133f36115906020860186614a91565b915091505f613406836001015160c01c90565b90505f60a181613417846001614a50565b81526020019081526020015f2054146134725760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610aae565b609e5481146134c35760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b5f81815260a16020526040902054821461351f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610aae565b5f81815260ab602052604090205460808601351461357f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f61358e846011015160c01c90565b90505f6135ba6135a46060890160408a01614b60565b6135b460808a0160608b01614b79565b846143e8565b90506135cc6080880160608901614b79565b6001939093019261ffff1691909101905f8049156135eb575f4961360d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961361e60208a018a614b40565b60ff1660010361362d57506101015b6040805182810190915296506136528761364a60208c018c614b40565b60ff1661442c565b60c085901b60018801526136808761367060808c0160608d01614b79565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526136e4876136c560208b018b614a91565b6040516136d3929190614b9a565b604051809103902060b99190910152565b60d9870186905260016136fa60208b018b614b40565b60ff161061372c5761372c8761371660608c0160408d01614b60565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561378b5760a7545f90815260a46020526040902060020154609954429161377e91614a50565b6137889190614a63565b90505b604051806080016040528042815260200182609854426137ab9190614a50565b6137b59190614a50565b81526020016137ca60608d0160408e01614b60565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386c9190614af2565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b791508935906138d4906138ce908c018c614a91565b5f614433565b5f6138e260408d018d614a91565b6040518663ffffffff1660e01b8152600401613902959493929190614bf0565b602060405180830381865afa15801561391d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139419190614a76565b6139b35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613a086020840184614b40565b60ff1614613a585760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610aae565b600981015160c01c613a706080840160608501614b79565b61ffff1614613ac15760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610aae565b6059810151826080013514613b185760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60798101518260a0013514613b6f5760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60998101518260c0013514613bc65760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610aae565b5f613bd76115906020850185614a91565b915050613be58260d9015190565b8114613c335760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610aae565b505050565b80613c855760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610aae565b5f613c94846001015160c01c90565b90505f613ca2856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613cd1876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d93885160f81c90565b858888866040518663ffffffff1660e01b8152600401613db7959493929190614c63565b5f6040518083038186803b158015613dcd575f80fd5b505afa158015613ddf573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613ed05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc3614487565b5f54610100900460ff16613f545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc361450f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613fe0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140049190614af2565b5f86815260a46020526040902060010154909150614023908290614a50565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614062908490614a50565b9091555050604051614075908490614c94565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140dc9084614cc0565b6140e69190614cd7565b90506140f28183614a63565b60aa5f8282546141029190614a50565b90915550506001600160a01b0384165f90815260a560205260408120805483929061412e908490614a50565b9091555050604051614141908490614c94565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114d0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146141d3576040519150601f19603f3d011682016040523d82523d5f602084013e6141d8565b606091505b5050905080613c335760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610aae565b6142316131b8565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142663390565b6040516001600160a01b03909116815260200160405180910390a1565b61428b614594565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614266565b5f8161430a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610aae565b82825f81811061431c5761431c614d0f565b919091013560f81c949350505050565b5f8160f981101561437f5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610aae565b6040519150808483378082016040529250929050565b5f81610101811461437f5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610aae565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161441d8161ffff8716866145e6565b82900390912095945050505050565b8082535050565b60605f80808080614446888a018a614e29565b95509550955095509550508187106144645794506144809350505050565b838710614478578295505050505050614480565b509293505050505b9392505050565b5f54610100900460ff166145035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b6065805460ff19169055565b5f54610100900460ff1661458b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc333613deb565b60655460ff16611bc35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610aae565b5f825f036145f5575082614480565b609b546001600160a01b03165f5b848110156146a2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614669573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468d9190614af2565b87525060209095019460019384019301614603565b5093949350505050565b5f602082840312156146bc575f80fd5b5035919050565b80356001600160a01b03811681146146d9575f80fd5b919050565b5f602082840312156146ee575f80fd5b614480826146c3565b5f8083601f840112614707575f80fd5b50813567ffffffffffffffff81111561471e575f80fd5b602083019150836020828501011115614735575f80fd5b9250929050565b5f805f6040848603121561474e575f80fd5b833567ffffffffffffffff811115614764575f80fd5b614770868287016146f7565b909790965060209590950135949350505050565b5f8060208385031215614795575f80fd5b823567ffffffffffffffff8111156147ab575f80fd5b6147b7858286016146f7565b90969095509350505050565b5f60e082840312156147d3575f80fd5b50919050565b5f606082840312156147d3575f80fd5b5f80604083850312156147fa575f80fd5b823567ffffffffffffffff80821115614811575f80fd5b61481d868387016147c3565b93506020850135915080821115614832575f80fd5b5061483f858286016147d9565b9150509250929050565b5f805f805f806080878903121561485e575f80fd5b863567ffffffffffffffff80821115614875575f80fd5b6148818a838b016147c3565b97506020890135915080821115614896575f80fd5b6148a28a838b016147d9565b965060408901359150808211156148b7575f80fd5b6148c38a838b016146f7565b909650945060608901359150808211156148db575f80fd5b506148e889828a016146f7565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561490f575f80fd5b614918876146c3565b9550614926602088016146c3565b9450614934604088016146c3565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614968575f80fd5b843567ffffffffffffffff8082111561497f575f80fd5b61498b888389016146f7565b909650945060208701359150808211156149a3575f80fd5b506149b0878288016146f7565b95989497509550505050565b80151581146128bd575f80fd5b5f602082840312156149d9575f80fd5b8135614480816149bc565b803567ffffffffffffffff811681146146d9575f80fd5b5f8060408385031215614a0c575f80fd5b614a15836149e4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561138c5761138c614a23565b8181038181111561138c5761138c614a23565b5f60208284031215614a86575f80fd5b8151614480816149bc565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac4575f80fd5b83018035915067ffffffffffffffff821115614ade575f80fd5b602001915036819003821315614735575f80fd5b5f60208284031215614b02575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b3957614b39614a23565b5060010190565b5f60208284031215614b50575f80fd5b813560ff81168114614480575f80fd5b5f60208284031215614b70575f80fd5b614480826149e4565b5f60208284031215614b89575f80fd5b813561ffff81168114614480575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614c3a5784516001600160a01b031683529383019391830191600101614c15565b50508760408601528481036060860152614c55818789614ba9565b9a9950505050505050505050565b858152846020820152608060408201525f614c82608083018587614ba9565b90508260608301529695505050505050565b5f82515f5b81811015614cb35760208186018101518583015201614c99565b505f920191825250919050565b808202811582820484141761138c5761138c614a23565b5f82614d0a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d78575f80fd5b8135602067ffffffffffffffff80831115614d9557614d95614d3c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614dd857614dd8614d3c565b6040529384526020818701810194908101925087851115614df7575f80fd5b6020870191505b84821015614e1e57614e0f826146c3565b83529183019190830190614dfe565b979650505050505050565b5f805f805f8060c08789031215614e3e575f80fd5b86359550602087013567ffffffffffffffff80821115614e5c575f80fd5b614e688a838b01614d69565b9650604089013595506060890135915080821115614e84575f80fd5b614e908a838b01614d69565b94506080890135935060a0890135915080821115614eac575f80fd5b50614eb989828a01614d69565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046147f0565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614822565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614880565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046147f0565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148c8565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046147f0565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046147f0565b61137e565b3480156104a8575f80fd5b506103956104b73660046147f0565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046147f0565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461492d565b6113ac565b6103c261057f36600461498d565b6114ee565b34801561058f575f80fd5b506103c261059e3660046147f0565b61184f565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046147f0565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046147f0565b6118fa565b348015610690575f80fd5b5061039561069f3660046147f0565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614822565b611ad5565b3480156106da575f80fd5b506103c2611b92565b3480156106ee575f80fd5b506103c26106fd366004614a3e565b611ba5565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046147f0565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046147f0565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614822565b611eae565b348015610843575f80fd5b5061036b610852366004614822565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046147f0565b611f91565b3480156108a5575f80fd5b506103956108b4366004614822565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614a99565b612041565b348015610904575f80fd5b506103c2610913366004614822565b612345565b348015610923575f80fd5b506103c26109323660046148c8565b61239e565b348015610942575f80fd5b506103c2610951366004614b0d565b6126ee565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c26109853660046147f0565b61282c565b6103c2610998366004614b3f565b6128cf565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc3660046147f0565b612e61565b3480156109dc575f80fd5b506103c26109eb366004614822565b612fd0565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046147f0565b61308f565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046147f0565b6130d9565b348015610a6d575f80fd5b506103c2610a7c366004614822565b61317c565b348015610a8c575f80fd5b5061039560a95481565b610a9e613209565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613209565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613263565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614b94565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614ba7565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d998161308f565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614b94565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6132fc565b5f80610f088484613263565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd88161308f565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614ba7565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c61334f565b60a25f611275600184614ba7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614ba7565b81526020019081526020015f205f905560a45f6001836112ce9190614ba7565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bba565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06132fc565b6114ea828261340c565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6115466132fc565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614bd5565b613263565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614b94565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c36565b6116ce9190614b94565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614ba7565b90508015611795575f61172b836001614b94565b9050805b609e548111611758575f81815260a160205260408120558061175081614c4d565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a4898961340c565b5f806117b08989613263565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b3a565b611837838989613d7c565b6118418a8a610ea4565b505050505050505050505050565b611857613209565b5f8111801561186857506099548114155b6118b45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561191a57505f5460ff8083169116105b61198c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119aa5f5460ff1690565b60ff166002146119fc5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a6f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611a9857609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b611add613209565b6001600160a01b0381165f908152609f602052604090205460ff16611b445760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611b9a613209565b611ba35f613f2f565b565b5f54610100900460ff1615808015611bc357505f54600160ff909116105b80611bdc5750303b158015611bdc57505f5460ff166001145b611c4e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c6f575f805461ff0019166101001790555b6001600160a01b0386161580611c8c57506001600160a01b038516155b15611cc3576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d195760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d21613f98565b611d2961401c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ea5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eb6613209565b6001600160a01b03811615801590611edc5750609c546001600160a01b03828116911614155b611f285760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611f99613209565b5f81118015611fa9575060648111155b8015611fb7575060a9548114155b6120035760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118ee565b60a854156120915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120996132fc565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612105573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121299190614bba565b6121755760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121818686613263565b915091505f612194836001015160c01c90565b5f81815260a1602052604090205490915082146121f35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6121fc8161308f565b6122485760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161228491614b94565b116122fa575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526122f5918391906140a0565b611ea5565b612305838686613d7c565b611ea581336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506141fc565b61234d613209565b60aa80545f90915561235f82826142c8565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118ee565b6123a6613209565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561241d5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124298484613263565b915091505f61243c836001015160c01c90565b9050801561248c5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f612498846079015190565b9050806124e75760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c1561253c5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f612548856019015190565b036125955760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125c1856039015190565b1461260e5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126f6613209565b80156127fa5761270461436d565b60a65460ff16156127b95760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612758908490614b94565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128026143c7565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127dc565b50565b612834613209565b5f81118015612845575060ac548114155b6128915760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e91016118ee565b335f908152609f602052604090205460ff1661292d5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a8541561297d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129856132fc565b60a65460ff16156129d85760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a335760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612a9a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612aad8267ffffffffffffffff1661137e565b612af95760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b745760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c045760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c789190614c36565b341015612cc75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ddf91815260200190565b60405180910390a35f609d546001612df79190614b94565b90505b609e548111612e4f578267ffffffffffffffff168114612e3d576099545f82815260a2602052604081206001018054909190612e37908490614b94565b90915550505b80612e4781614c4d565b915050612dfa565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e8157505f5460ff8083169116105b612ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f555760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b335f90815260a560205260408120549081900361302f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561304882826142c8565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161308391815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130e1613209565b5f811180156130f257506098548114155b61313e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118ee565b613184613209565b6001600160a01b0381166132005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61282981613f2f565b6033546001600160a01b03163314611ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132708585614400565b90505f8160ff165f03613291576132878686614470565b90945090506132ee565b8160ff166001036132a65761328786866144d9565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611ba35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361335a575050565b8082035f5b828110156134065761010081840381111561337957508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133dc575f80fd5b505af11580156133ee573d5f803e3d5ffd5b5050505061010083019250506101008101905061335f565b50505050565b6134196020830183614c84565b60ff16158061343757506134306020830183614c84565b60ff166001145b6134835760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134d45760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135255760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135376115aa6020860186614bd5565b915091505f61354a836001015160c01c90565b90505f60a18161355b846001614b94565b81526020019081526020015f2054146135b65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136075760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136635760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136c35760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136d2846011015160c01c90565b90505f6136fe6136e86060890160408a01614ca4565b6136f860808a0160608b01614cbd565b8461452c565b90506137106080880160608901614cbd565b6001939093019261ffff1691909101905f80491561372f575f49613751565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961376260208a018a614c84565b60ff1660010361377157506101015b6040805182810190915296506137968761378e60208c018c614c84565b60ff16614570565b60c085901b60018801526137c4876137b460808c0160608d01614cbd565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138288761380960208b018b614bd5565b604051613817929190614cde565b604051809103902060b99190910152565b60d98701869052600161383e60208b018b614c84565b60ff1610613870576138708761385a60608c0160408d01614ca4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138cf5760a7545f90815260a4602052604090206002015460995442916138c291614b94565b6138cc9190614ba7565b90505b604051806080016040528042815260200182609854426138ef9190614b94565b6138f99190614b94565b815260200161390e60608d0160408e01614ca4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561398c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b09190614c36565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a1890613a12908c018c614bd5565b5f614577565b5f613a2660408d018d614bd5565b6040518663ffffffff1660e01b8152600401613a46959493929190614d34565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190614bba565b613af75760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b4c6020840184614c84565b60ff1614613b9c5760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bb46080840160608501614cbd565b61ffff1614613c055760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c5c5760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cb35760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d0a5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d1b6115aa6020850185614bd5565b915050613d298260d9015190565b8114613d775760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613dc95760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dd8846001015160c01c90565b90505f613de6856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e15876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613ed7885160f81c90565b858888866040518663ffffffff1660e01b8152600401613efb959493929190614da7565b5f6040518083038186803b158015613f11575f80fd5b505afa158015613f23573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140145760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba36145cb565b5f54610100900460ff166140985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba3614653565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141489190614c36565b5f86815260a46020526040902060010154909150614167908290614b94565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141a6908490614b94565b90915550506040516141b9908490614dd8565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142209084614e04565b61422a9190614e1b565b90506142368183614ba7565b60aa5f8282546142469190614b94565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614272908490614b94565b9091555050604051614285908490614dd8565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614317576040519150601f19603f3d011682016040523d82523d5f602084013e61431c565b606091505b5050905080613d775760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b6143756132fc565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143aa3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143cf6146d8565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143aa565b5f8161444e5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061446057614460614e53565b919091013560f81c949350505050565b5f8160f98110156144c35760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144c35760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145618161ffff87168661472a565b82900390912095945050505050565b8082535050565b60605f8080808061458a888a018a614f6d565b95509550955095509550508187106145a85794506145c49350505050565b8387106145bc5782955050505050506145c4565b509293505050505b9392505050565b5f54610100900460ff166146475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba333613f2f565b60655460ff16611ba35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036147395750826145c4565b609b546001600160a01b03165f5b848110156147e6576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d19190614c36565b87525060209095019460019384019301614747565b5093949350505050565b5f60208284031215614800575f80fd5b5035919050565b80356001600160a01b038116811461481d575f80fd5b919050565b5f60208284031215614832575f80fd5b6145c482614807565b5f8083601f84011261484b575f80fd5b50813567ffffffffffffffff811115614862575f80fd5b602083019150836020828501011115614879575f80fd5b9250929050565b5f805f60408486031215614892575f80fd5b833567ffffffffffffffff8111156148a8575f80fd5b6148b48682870161483b565b909790965060209590950135949350505050565b5f80602083850312156148d9575f80fd5b823567ffffffffffffffff8111156148ef575f80fd5b6148fb8582860161483b565b90969095509350505050565b5f60e08284031215614917575f80fd5b50919050565b5f60608284031215614917575f80fd5b5f806040838503121561493e575f80fd5b823567ffffffffffffffff80821115614955575f80fd5b61496186838701614907565b93506020850135915080821115614976575f80fd5b506149838582860161491d565b9150509250929050565b5f805f805f80608087890312156149a2575f80fd5b863567ffffffffffffffff808211156149b9575f80fd5b6149c58a838b01614907565b975060208901359150808211156149da575f80fd5b6149e68a838b0161491d565b965060408901359150808211156149fb575f80fd5b614a078a838b0161483b565b90965094506060890135915080821115614a1f575f80fd5b50614a2c89828a0161483b565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a53575f80fd5b614a5c87614807565b9550614a6a60208801614807565b9450614a7860408801614807565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614aac575f80fd5b843567ffffffffffffffff80821115614ac3575f80fd5b614acf8883890161483b565b90965094506020870135915080821115614ae7575f80fd5b50614af48782880161483b565b95989497509550505050565b8015158114612829575f80fd5b5f60208284031215614b1d575f80fd5b81356145c481614b00565b803567ffffffffffffffff8116811461481d575f80fd5b5f8060408385031215614b50575f80fd5b614b5983614b28565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b67565b818103818111156113a6576113a6614b67565b5f60208284031215614bca575f80fd5b81516145c481614b00565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c08575f80fd5b83018035915067ffffffffffffffff821115614c22575f80fd5b602001915036819003821315614879575f80fd5b5f60208284031215614c46575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7d57614c7d614b67565b5060010190565b5f60208284031215614c94575f80fd5b813560ff811681146145c4575f80fd5b5f60208284031215614cb4575f80fd5b6145c482614b28565b5f60208284031215614ccd575f80fd5b813561ffff811681146145c4575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d7e5784516001600160a01b031683529383019391830191600101614d59565b50508760408601528481036060860152614d99818789614ced565b9a9950505050505050505050565b858152846020820152608060408201525f614dc6608083018587614ced565b90508260608301529695505050505050565b5f82515f5b81811015614df75760208186018101518583015201614ddd565b505f920191825250919050565b80820281158282048414176113a6576113a6614b67565b5f82614e4e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ebc575f80fd5b8135602067ffffffffffffffff80831115614ed957614ed9614e80565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f1c57614f1c614e80565b6040529384526020818701810194908101925087851115614f3b575f80fd5b6020870191505b84821015614f6257614f5382614807565b83529183019190830190614f42565b979650505050505050565b5f805f805f8060c08789031215614f82575f80fd5b86359550602087013567ffffffffffffffff80821115614fa0575f80fd5b614fac8a838b01614ead565b9650604089013595506060890135915080821115614fc8575f80fd5b614fd48a838b01614ead565b94506080890135935060a0890135915080821115614ff0575f80fd5b50614ffd89828a01614ead565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index bb6430b2a..a2d8738ca 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeird\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620050313803806200503183398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614ed36200015e5f395f81816106150152613ca70152614ed35ff3fe60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e146109da578063e3fff1dd146109ef578063f2fde38b14610a0e578063fb1e8b0414610a2d575f80fd5b8063d279c1911461097d578063ddd8a3dc1461099c578063de8b3035146109bb575f80fd5b8063c5bde702116100c2578063c5bde70214610940578063cd4edc6914610955578063ce5db8d614610968575f80fd5b8063b35dac4e146108e3578063b3e0a50914610902578063bedb86fb14610921575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d14610884578063b31a77d3146108af578063b3484425146108c4575f80fd5b8063a415d8dc14610822578063a479265d14610850578063a4f209b014610865575f80fd5b80638f1d3776116101775780638f1d377614610722578063910129d4146107d257806397fc007c14610803575f80fd5b8063728cdbca146106cd57806388b1ea09146106ec5780638da5cb5b14610705575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461065057806368589dfa1461066f5780636c578c1d1461069a578063715018a6146106b9575f80fd5b80635c975abb1461058d5780635ef7a94a146105a45780635f77cf1d14610604575f80fd5b8063428868b511610242578063428868b5146105485780634e8f1d671461055b57806357e0af6c1461056e575f80fd5b80632b7ac3f3146104dd5780633b70c18a146105145780633e001b6614610533575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b506103556103413660046146ac565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046146de565b610a42565b005b3480156103b9575f80fd5b506103ac6103c836600461473c565b610b14565b3480156103d8575f80fd5b506103556103e73660046146ac565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e366004614784565b610e6d565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b506103556104523660046146ac565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b506103556104823660046146ac565b611364565b348015610492575f80fd5b5061037f6104a13660046146ac565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc3660046146ac565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546104fc906001600160a01b031681565b6040516001600160a01b039091168152602001610361565b34801561051f575f80fd5b50609b546104fc906001600160a01b031681565b34801561053e575f80fd5b5061037f60aa5481565b6103ac6105563660046147e9565b611392565b6103ac610569366004614849565b6114d4565b348015610579575f80fd5b506103ac6105883660046146ac565b611835565b348015610598575f80fd5b5060655460ff16610355565b3480156105af575f80fd5b506105e46105be3660046146ac565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b34801561060f575f80fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b34801561065b575f80fd5b506103ac61066a3660046146ac565b6118e0565b34801561067a575f80fd5b5061037f6106893660046146ac565b60ab6020525f908152604090205481565b3480156106a5575f80fd5b506103ac6106b43660046146de565b611af5565b3480156106c4575f80fd5b506103ac611bb2565b3480156106d8575f80fd5b506103ac6106e73660046148fa565b611bc5565b3480156106f7575f80fd5b5060a6546103559060ff1681565b348015610710575f80fd5b506033546001600160a01b03166104fc565b34801561072d575f80fd5b5061078e61073c3660046146ac565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b3480156107dd575f80fd5b506103556107ec3660046146ac565b5f90815260a4602052604090206003015460ff1690565b34801561080e575f80fd5b506103ac61081d3660046146de565b611f08565b34801561082d575f80fd5b5061035561083c3660046146de565b609f6020525f908152604090205460ff1681565b34801561085b575f80fd5b5061037f60995481565b348015610870575f80fd5b506103ac61087f3660046146ac565b611feb565b34801561088f575f80fd5b5061037f61089e3660046146de565b60a56020525f908152604090205481565b3480156108ba575f80fd5b5061037f60a85481565b3480156108cf575f80fd5b506103ac6108de366004614955565b61209b565b3480156108ee575f80fd5b506103ac6108fd3660046146de565b6123bc565b34801561090d575f80fd5b506103ac61091c366004614784565b612415565b34801561092c575f80fd5b506103ac61093b3660046149c9565b612765565b34801561094b575f80fd5b5061037f60ac5481565b6103ac6109633660046149fb565b6128c0565b348015610973575f80fd5b5061037f60985481565b348015610988575f80fd5b506103ac6109973660046146de565b612e8c565b3480156109a7575f80fd5b506097546104fc906001600160a01b031681565b3480156109c6575f80fd5b506103556109d53660046146ac565b612f4b565b3480156109e5575f80fd5b5061037f609a5481565b3480156109fa575f80fd5b506103ac610a093660046146ac565b612f95565b348015610a19575f80fd5b506103ac610a283660046146de565b613038565b348015610a38575f80fd5b5061037f60a95481565b610a4a6130c5565b6001600160a01b0381165f908152609f602052604090205460ff1615610ab75760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b1c6130c5565b5f8111610b6b5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610aae565b5f80610b77858561311f565b915091505f610b8a836001015160c01c90565b5f81815260a160205260409020549091508214610be95760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b5f60a181610bf78785614a50565b81526020019081526020015f205414610c775760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610aae565b609d548111610cee5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b610cf9600182614a63565b609e555b8315610e6557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d4581612f4b565b15610da0575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610d90908490614a50565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610e1d575060a85481145b15610e27575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610cfd575b505050505050565b60a85415610ebd5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b610ec56131b8565b5f80610ed1848461311f565b915091505f610ee4836001015160c01c90565b5f81815260a160205260409020549091508214610f435760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b610f4c81611364565b610f985760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b610fa181612f4b565b15610fee5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003015460ff161561104f5760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610aae565b5f81815260a260205260409020600101544210156110af5760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610aae565b605983015160a05f6110c2600185614a63565b81526020019081526020015f20541461111d5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f81815260a06020526040902054156111785760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610aae565b80609d54600101146111cc5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b609d819055600160a35f6111e1866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611230611223846011015160c01c90565b600985015160c01c61320b565b60a25f61123e600184614a63565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112779084614a63565b81526020019081526020015f205f905560a45f6001836112979190614a63565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611340866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061138c57505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156113fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114229190614a76565b61146e5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b60a854156114be5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6114c66131b8565b6114d082826132c8565b5050565b60a854156115245760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b61152c6131b8565b60a65460ff161561157f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b5f6115956115906020890189614a91565b61311f565b5090505f6115a7826001015160c01c90565b9050609d5481146115fa5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b60ac54609e545f90815260a26020526040902054429161161991614a50565b101580156116b7575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611686573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116aa9190614af2565b6116b49190614a50565b10155b156116ee576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546116fd9190614a63565b9050801561177b575f611711836001614a50565b9050805b609e54811161173e575f81815260a160205260408120558061173681614b09565b915050611715565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161177191815260200190565b60405180910390a2505b609e82905561178a89896132c8565b5f80611796898961311f565b915091505f6117a9836001015160c01c90565b5f81815260a1602052604090205490915082146118085760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b6118128c846139f6565b61181d838989613c38565b6118278a8a610e6d565b505050505050505050505050565b61183d6130c5565b5f8111801561184e57506099548114155b61189a5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610aae565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561190057505f5460ff8083169116105b6119725760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556119ad5f5460ff1690565b60ff166002146119ff5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610aae565b81611a725760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610aae565b609e545f90815260ab6020526040902054611a9b57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118d4565b611afd6130c5565b6001600160a01b0381165f908152609f602052604090205460ff16611b645760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610aae565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b09565b611bba6130c5565b611bc35f613deb565b565b5f54610100900460ff1615808015611be357505f54600160ff909116105b80611bfc5750303b158015611bfc57505f5460ff166001145b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aae565b5f805460ff191660011790558015611cac575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6001600160a01b0386161580611cc957506001600160a01b038516155b15611d00576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d565760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610aae565b611d5e613e54565b611d66613ed8565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f106130c5565b6001600160a01b03811615801590611f365750609c546001600160a01b03828116911614155b611f825760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610aae565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611ff36130c5565b5f81118015612003575060648111155b8015612011575060a9548114155b61205d5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610aae565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118d4565b60a854156120eb5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6120f36131b8565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561215f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121839190614a76565b6121cf5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610aae565b5f806121db868661311f565b915091505f6121ee836001015160c01c90565b5f81815260a16020526040902054909150821461224d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b61225681612f4b565b6122a25760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610aae565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a6805460ff1916905560995460029091015442916122fb91614a50565b11612371575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236c91839190613f5c565b611eff565b61237c838686613c38565b611eff81336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506140b8565b6123c46130c5565b60aa80545f9091556123d68282614184565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118d4565b61241d6130c5565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124945760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610aae565b5f806124a0848461311f565b915091505f6124b3836001015160c01c90565b905080156125035760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610aae565b5f61250f846079015190565b90508061255e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610aae565b600984015160c01c156125b35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610aae565b5f6125bf856019015190565b0361260c5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610aae565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612638856039015190565b146126855760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610aae565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276d6130c5565b801561288e5761277b614229565b60a65460ff161561284d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cf908490614a50565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612896614283565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612870565b50565b335f908152609f602052604090205460ff1661291e5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610aae565b60a8541561296e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610aae565b6129766131b8565b60a65460ff16156129c95760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610aae565b8167ffffffffffffffff16609d5410612a245760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a160205260409020548114612a8b5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610aae565b612a9e8267ffffffffffffffff16611364565b612aea5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b655760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610aae565b67ffffffffffffffff82165f90815260a260205260409020600101544210612bf55760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610aae565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c699190614af2565b341015612cb85760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610aae565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e0a91815260200190565b60405180910390a35f609d546001612e229190614a50565b90505b609e548111612e7a578267ffffffffffffffff168114612e68576099545f82815260a2602052604081206001018054909190612e62908490614a50565b90915550505b80612e7281614b09565b915050612e25565b505060a6805460ff1916600117905550565b335f90815260a5602052604081205490819003612eeb5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610aae565b335f90815260a56020526040812055612f048282614184565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051612f3f91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b03161580159061138c5750505f90815260a46020526040902060030154610100900460ff161590565b612f9d6130c5565b5f81118015612fae57506098548114155b612ffa5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610aae565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118d4565b6130406130c5565b6001600160a01b0381166130bc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610aae565b6128bd81613deb565b6033546001600160a01b03163314611bc35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610aae565b5f805f61312c85856142bc565b90505f8160ff165f0361314d57613143868661432c565b90945090506131aa565b8160ff16600103613162576131438686614395565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610aae565b808420925050509250929050565b60655460ff1615611bc35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610aae565b805f03613216575050565b8082035f5b828110156132c25761010081840381111561323557508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613298575f80fd5b505af11580156132aa573d5f803e3d5ffd5b5050505061010083019250506101008101905061321b565b50505050565b6132d56020830183614b40565b60ff1615806132f357506132ec6020830183614b40565b60ff166001145b61333f5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610aae565b60808201356133905760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610aae565b60a08201356133e15760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610aae565b5f806133f36115906020860186614a91565b915091505f613406836001015160c01c90565b90505f60a181613417846001614a50565b81526020019081526020015f2054146134725760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610aae565b609e5481146134c35760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610aae565b5f81815260a16020526040902054821461351f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610aae565b5f81815260ab602052604090205460808601351461357f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610aae565b5f61358e846011015160c01c90565b90505f6135ba6135a46060890160408a01614b60565b6135b460808a0160608b01614b79565b846143e8565b90506135cc6080880160608901614b79565b6001939093019261ffff1691909101905f8049156135eb575f4961360d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961361e60208a018a614b40565b60ff1660010361362d57506101015b6040805182810190915296506136528761364a60208c018c614b40565b60ff1661442c565b60c085901b60018801526136808761367060808c0160608d01614b79565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526136e4876136c560208b018b614a91565b6040516136d3929190614b9a565b604051809103902060b99190910152565b60d9870186905260016136fa60208b018b614b40565b60ff161061372c5761372c8761371660608c0160408d01614b60565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561378b5760a7545f90815260a46020526040902060020154609954429161377e91614a50565b6137889190614a63565b90505b604051806080016040528042815260200182609854426137ab9190614a50565b6137b59190614a50565b81526020016137ca60608d0160408e01614b60565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613848573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061386c9190614af2565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b791508935906138d4906138ce908c018c614a91565b5f614433565b5f6138e260408d018d614a91565b6040518663ffffffff1660e01b8152600401613902959493929190614bf0565b602060405180830381865afa15801561391d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139419190614a76565b6139b35760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610aae565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613a086020840184614b40565b60ff1614613a585760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610aae565b600981015160c01c613a706080840160608501614b79565b61ffff1614613ac15760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610aae565b6059810151826080013514613b185760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60798101518260a0013514613b6f5760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610aae565b60998101518260c0013514613bc65760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610aae565b5f613bd76115906020850185614a91565b915050613be58260d9015190565b8114613c335760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610aae565b505050565b80613c855760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610aae565b5f613c94846001015160c01c90565b90505f613ca2856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613cd1876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d93885160f81c90565b858888866040518663ffffffff1660e01b8152600401613db7959493929190614c63565b5f6040518083038186803b158015613dcd575f80fd5b505afa158015613ddf573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613ed05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc3614487565b5f54610100900460ff16613f545760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc361450f565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613fe0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140049190614af2565b5f86815260a46020526040902060010154909150614023908290614a50565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614062908490614a50565b9091555050604051614075908490614c94565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140dc9084614cc0565b6140e69190614cd7565b90506140f28183614a63565b60aa5f8282546141029190614a50565b90915550506001600160a01b0384165f90815260a560205260408120805483929061412e908490614a50565b9091555050604051614141908490614c94565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114d0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146141d3576040519150601f19603f3d011682016040523d82523d5f602084013e6141d8565b606091505b5050905080613c335760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610aae565b6142316131b8565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142663390565b6040516001600160a01b03909116815260200160405180910390a1565b61428b614594565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614266565b5f8161430a5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610aae565b82825f81811061431c5761431c614d0f565b919091013560f81c949350505050565b5f8160f981101561437f5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610aae565b6040519150808483378082016040529250929050565b5f81610101811461437f5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610aae565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161441d8161ffff8716866145e6565b82900390912095945050505050565b8082535050565b60605f80808080614446888a018a614e29565b95509550955095509550508187106144645794506144809350505050565b838710614478578295505050505050614480565b509293505050505b9392505050565b5f54610100900460ff166145035760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b6065805460ff19169055565b5f54610100900460ff1661458b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aae565b611bc333613deb565b60655460ff16611bc35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610aae565b5f825f036145f5575082614480565b609b546001600160a01b03165f5b848110156146a2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614669573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061468d9190614af2565b87525060209095019460019384019301614603565b5093949350505050565b5f602082840312156146bc575f80fd5b5035919050565b80356001600160a01b03811681146146d9575f80fd5b919050565b5f602082840312156146ee575f80fd5b614480826146c3565b5f8083601f840112614707575f80fd5b50813567ffffffffffffffff81111561471e575f80fd5b602083019150836020828501011115614735575f80fd5b9250929050565b5f805f6040848603121561474e575f80fd5b833567ffffffffffffffff811115614764575f80fd5b614770868287016146f7565b909790965060209590950135949350505050565b5f8060208385031215614795575f80fd5b823567ffffffffffffffff8111156147ab575f80fd5b6147b7858286016146f7565b90969095509350505050565b5f60e082840312156147d3575f80fd5b50919050565b5f606082840312156147d3575f80fd5b5f80604083850312156147fa575f80fd5b823567ffffffffffffffff80821115614811575f80fd5b61481d868387016147c3565b93506020850135915080821115614832575f80fd5b5061483f858286016147d9565b9150509250929050565b5f805f805f806080878903121561485e575f80fd5b863567ffffffffffffffff80821115614875575f80fd5b6148818a838b016147c3565b97506020890135915080821115614896575f80fd5b6148a28a838b016147d9565b965060408901359150808211156148b7575f80fd5b6148c38a838b016146f7565b909650945060608901359150808211156148db575f80fd5b506148e889828a016146f7565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561490f575f80fd5b614918876146c3565b9550614926602088016146c3565b9450614934604088016146c3565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614968575f80fd5b843567ffffffffffffffff8082111561497f575f80fd5b61498b888389016146f7565b909650945060208701359150808211156149a3575f80fd5b506149b0878288016146f7565b95989497509550505050565b80151581146128bd575f80fd5b5f602082840312156149d9575f80fd5b8135614480816149bc565b803567ffffffffffffffff811681146146d9575f80fd5b5f8060408385031215614a0c575f80fd5b614a15836149e4565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561138c5761138c614a23565b8181038181111561138c5761138c614a23565b5f60208284031215614a86575f80fd5b8151614480816149bc565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac4575f80fd5b83018035915067ffffffffffffffff821115614ade575f80fd5b602001915036819003821315614735575f80fd5b5f60208284031215614b02575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b3957614b39614a23565b5060010190565b5f60208284031215614b50575f80fd5b813560ff81168114614480575f80fd5b5f60208284031215614b70575f80fd5b614480826149e4565b5f60208284031215614b89575f80fd5b813561ffff81168114614480575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614c3a5784516001600160a01b031683529383019391830191600101614c15565b50508760408601528481036060860152614c55818789614ba9565b9a9950505050505050505050565b858152846020820152608060408201525f614c82608083018587614ba9565b90508260608301529695505050505050565b5f82515f5b81811015614cb35760208186018101518583015201614c99565b505f920191825250919050565b808202811582820484141761138c5761138c614a23565b5f82614d0a577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d78575f80fd5b8135602067ffffffffffffffff80831115614d9557614d95614d3c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614dd857614dd8614d3c565b6040529384526020818701810194908101925087851115614df7575f80fd5b6020870191505b84821015614e1e57614e0f826146c3565b83529183019190830190614dfe565b979650505050505050565b5f805f805f8060c08789031215614e3e575f80fd5b86359550602087013567ffffffffffffffff80821115614e5c575f80fd5b614e688a838b01614d69565b9650604089013595506060890135915080821115614e84575f80fd5b614e908a838b01614d69565b94506080890135935060a0890135915080821115614eac575f80fd5b50614eb989828a01614d69565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeirdUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeird\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeird\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeird\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620051753803806200517583398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516150176200015e5f395f818161062b0152613deb01526150175ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046147f0565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614822565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614880565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046147f0565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148c8565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046147f0565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046147f0565b61137e565b3480156104a8575f80fd5b506103956104b73660046147f0565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046147f0565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461492d565b6113ac565b6103c261057f36600461498d565b6114ee565b34801561058f575f80fd5b506103c261059e3660046147f0565b61184f565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046147f0565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046147f0565b6118fa565b348015610690575f80fd5b5061039561069f3660046147f0565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614822565b611ad5565b3480156106da575f80fd5b506103c2611b92565b3480156106ee575f80fd5b506103c26106fd366004614a3e565b611ba5565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046147f0565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046147f0565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614822565b611eae565b348015610843575f80fd5b5061036b610852366004614822565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046147f0565b611f91565b3480156108a5575f80fd5b506103956108b4366004614822565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614a99565b612041565b348015610904575f80fd5b506103c2610913366004614822565b612345565b348015610923575f80fd5b506103c26109323660046148c8565b61239e565b348015610942575f80fd5b506103c2610951366004614b0d565b6126ee565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c26109853660046147f0565b61282c565b6103c2610998366004614b3f565b6128cf565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc3660046147f0565b612e61565b3480156109dc575f80fd5b506103c26109eb366004614822565b612fd0565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046147f0565b61308f565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046147f0565b6130d9565b348015610a6d575f80fd5b506103c2610a7c366004614822565b61317c565b348015610a8c575f80fd5b5061039560a95481565b610a9e613209565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613209565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613263565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614b94565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614ba7565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d998161308f565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614b94565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6132fc565b5f80610f088484613263565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd88161308f565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614ba7565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c61334f565b60a25f611275600184614ba7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614ba7565b81526020019081526020015f205f905560a45f6001836112ce9190614ba7565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bba565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06132fc565b6114ea828261340c565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6115466132fc565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614bd5565b613263565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614b94565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c36565b6116ce9190614b94565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614ba7565b90508015611795575f61172b836001614b94565b9050805b609e548111611758575f81815260a160205260408120558061175081614c4d565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a4898961340c565b5f806117b08989613263565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b3a565b611837838989613d7c565b6118418a8a610ea4565b505050505050505050505050565b611857613209565b5f8111801561186857506099548114155b6118b45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561191a57505f5460ff8083169116105b61198c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119aa5f5460ff1690565b60ff166002146119fc5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a6f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611a9857609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b611add613209565b6001600160a01b0381165f908152609f602052604090205460ff16611b445760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611b9a613209565b611ba35f613f2f565b565b5f54610100900460ff1615808015611bc357505f54600160ff909116105b80611bdc5750303b158015611bdc57505f5460ff166001145b611c4e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c6f575f805461ff0019166101001790555b6001600160a01b0386161580611c8c57506001600160a01b038516155b15611cc3576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d195760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d21613f98565b611d2961401c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ea5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eb6613209565b6001600160a01b03811615801590611edc5750609c546001600160a01b03828116911614155b611f285760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611f99613209565b5f81118015611fa9575060648111155b8015611fb7575060a9548114155b6120035760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118ee565b60a854156120915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120996132fc565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612105573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121299190614bba565b6121755760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121818686613263565b915091505f612194836001015160c01c90565b5f81815260a1602052604090205490915082146121f35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6121fc8161308f565b6122485760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161228491614b94565b116122fa575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526122f5918391906140a0565b611ea5565b612305838686613d7c565b611ea581336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506141fc565b61234d613209565b60aa80545f90915561235f82826142c8565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118ee565b6123a6613209565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561241d5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124298484613263565b915091505f61243c836001015160c01c90565b9050801561248c5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f612498846079015190565b9050806124e75760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c1561253c5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f612548856019015190565b036125955760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125c1856039015190565b1461260e5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126f6613209565b80156127fa5761270461436d565b60a65460ff16156127b95760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612758908490614b94565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128026143c7565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127dc565b50565b612834613209565b5f81118015612845575060ac548114155b6128915760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e91016118ee565b335f908152609f602052604090205460ff1661292d5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a8541561297d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129856132fc565b60a65460ff16156129d85760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a335760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612a9a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612aad8267ffffffffffffffff1661137e565b612af95760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b745760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c045760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c789190614c36565b341015612cc75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ddf91815260200190565b60405180910390a35f609d546001612df79190614b94565b90505b609e548111612e4f578267ffffffffffffffff168114612e3d576099545f82815260a2602052604081206001018054909190612e37908490614b94565b90915550505b80612e4781614c4d565b915050612dfa565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e8157505f5460ff8083169116105b612ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f555760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b335f90815260a560205260408120549081900361302f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561304882826142c8565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161308391815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130e1613209565b5f811180156130f257506098548114155b61313e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118ee565b613184613209565b6001600160a01b0381166132005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61282981613f2f565b6033546001600160a01b03163314611ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132708585614400565b90505f8160ff165f03613291576132878686614470565b90945090506132ee565b8160ff166001036132a65761328786866144d9565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611ba35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361335a575050565b8082035f5b828110156134065761010081840381111561337957508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133dc575f80fd5b505af11580156133ee573d5f803e3d5ffd5b5050505061010083019250506101008101905061335f565b50505050565b6134196020830183614c84565b60ff16158061343757506134306020830183614c84565b60ff166001145b6134835760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134d45760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135255760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135376115aa6020860186614bd5565b915091505f61354a836001015160c01c90565b90505f60a18161355b846001614b94565b81526020019081526020015f2054146135b65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136075760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136635760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136c35760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136d2846011015160c01c90565b90505f6136fe6136e86060890160408a01614ca4565b6136f860808a0160608b01614cbd565b8461452c565b90506137106080880160608901614cbd565b6001939093019261ffff1691909101905f80491561372f575f49613751565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961376260208a018a614c84565b60ff1660010361377157506101015b6040805182810190915296506137968761378e60208c018c614c84565b60ff16614570565b60c085901b60018801526137c4876137b460808c0160608d01614cbd565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138288761380960208b018b614bd5565b604051613817929190614cde565b604051809103902060b99190910152565b60d98701869052600161383e60208b018b614c84565b60ff1610613870576138708761385a60608c0160408d01614ca4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138cf5760a7545f90815260a4602052604090206002015460995442916138c291614b94565b6138cc9190614ba7565b90505b604051806080016040528042815260200182609854426138ef9190614b94565b6138f99190614b94565b815260200161390e60608d0160408e01614ca4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561398c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b09190614c36565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a1890613a12908c018c614bd5565b5f614577565b5f613a2660408d018d614bd5565b6040518663ffffffff1660e01b8152600401613a46959493929190614d34565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190614bba565b613af75760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b4c6020840184614c84565b60ff1614613b9c5760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bb46080840160608501614cbd565b61ffff1614613c055760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c5c5760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cb35760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d0a5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d1b6115aa6020850185614bd5565b915050613d298260d9015190565b8114613d775760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613dc95760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dd8846001015160c01c90565b90505f613de6856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e15876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613ed7885160f81c90565b858888866040518663ffffffff1660e01b8152600401613efb959493929190614da7565b5f6040518083038186803b158015613f11575f80fd5b505afa158015613f23573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140145760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba36145cb565b5f54610100900460ff166140985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba3614653565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141489190614c36565b5f86815260a46020526040902060010154909150614167908290614b94565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141a6908490614b94565b90915550506040516141b9908490614dd8565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142209084614e04565b61422a9190614e1b565b90506142368183614ba7565b60aa5f8282546142469190614b94565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614272908490614b94565b9091555050604051614285908490614dd8565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614317576040519150601f19603f3d011682016040523d82523d5f602084013e61431c565b606091505b5050905080613d775760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b6143756132fc565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143aa3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143cf6146d8565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143aa565b5f8161444e5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061446057614460614e53565b919091013560f81c949350505050565b5f8160f98110156144c35760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144c35760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145618161ffff87168661472a565b82900390912095945050505050565b8082535050565b60605f8080808061458a888a018a614f6d565b95509550955095509550508187106145a85794506145c49350505050565b8387106145bc5782955050505050506145c4565b509293505050505b9392505050565b5f54610100900460ff166146475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba333613f2f565b60655460ff16611ba35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036147395750826145c4565b609b546001600160a01b03165f5b848110156147e6576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d19190614c36565b87525060209095019460019384019301614747565b5093949350505050565b5f60208284031215614800575f80fd5b5035919050565b80356001600160a01b038116811461481d575f80fd5b919050565b5f60208284031215614832575f80fd5b6145c482614807565b5f8083601f84011261484b575f80fd5b50813567ffffffffffffffff811115614862575f80fd5b602083019150836020828501011115614879575f80fd5b9250929050565b5f805f60408486031215614892575f80fd5b833567ffffffffffffffff8111156148a8575f80fd5b6148b48682870161483b565b909790965060209590950135949350505050565b5f80602083850312156148d9575f80fd5b823567ffffffffffffffff8111156148ef575f80fd5b6148fb8582860161483b565b90969095509350505050565b5f60e08284031215614917575f80fd5b50919050565b5f60608284031215614917575f80fd5b5f806040838503121561493e575f80fd5b823567ffffffffffffffff80821115614955575f80fd5b61496186838701614907565b93506020850135915080821115614976575f80fd5b506149838582860161491d565b9150509250929050565b5f805f805f80608087890312156149a2575f80fd5b863567ffffffffffffffff808211156149b9575f80fd5b6149c58a838b01614907565b975060208901359150808211156149da575f80fd5b6149e68a838b0161491d565b965060408901359150808211156149fb575f80fd5b614a078a838b0161483b565b90965094506060890135915080821115614a1f575f80fd5b50614a2c89828a0161483b565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a53575f80fd5b614a5c87614807565b9550614a6a60208801614807565b9450614a7860408801614807565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614aac575f80fd5b843567ffffffffffffffff80821115614ac3575f80fd5b614acf8883890161483b565b90965094506020870135915080821115614ae7575f80fd5b50614af48782880161483b565b95989497509550505050565b8015158114612829575f80fd5b5f60208284031215614b1d575f80fd5b81356145c481614b00565b803567ffffffffffffffff8116811461481d575f80fd5b5f8060408385031215614b50575f80fd5b614b5983614b28565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b67565b818103818111156113a6576113a6614b67565b5f60208284031215614bca575f80fd5b81516145c481614b00565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c08575f80fd5b83018035915067ffffffffffffffff821115614c22575f80fd5b602001915036819003821315614879575f80fd5b5f60208284031215614c46575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7d57614c7d614b67565b5060010190565b5f60208284031215614c94575f80fd5b813560ff811681146145c4575f80fd5b5f60208284031215614cb4575f80fd5b6145c482614b28565b5f60208284031215614ccd575f80fd5b813561ffff811681146145c4575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d7e5784516001600160a01b031683529383019391830191600101614d59565b50508760408601528481036060860152614d99818789614ced565b9a9950505050505050505050565b858152846020820152608060408201525f614dc6608083018587614ced565b90508260608301529695505050505050565b5f82515f5b81811015614df75760208186018101518583015201614ddd565b505f920191825250919050565b80820281158282048414176113a6576113a6614b67565b5f82614e4e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ebc575f80fd5b8135602067ffffffffffffffff80831115614ed957614ed9614e80565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f1c57614f1c614e80565b6040529384526020818701810194908101925087851115614f3b575f80fd5b6020870191505b84821015614f6257614f5382614807565b83529183019190830190614f42565b979650505050505050565b5f805f805f8060c08789031215614f82575f80fd5b86359550602087013567ffffffffffffffff80821115614fa0575f80fd5b614fac8a838b01614ead565b9650604089013595506060890135915080821115614fc8575f80fd5b614fd48a838b01614ead565b94506080890135935060a0890135915080821115614ff0575f80fd5b50614ffd89828a01614ead565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1418,6 +1418,27 @@ func (_Rollup *RollupTransactorSession) Initialize2(_prevStateRoot [32]byte) (*t return _Rollup.Contract.Initialize2(&_Rollup.TransactOpts, _prevStateRoot) } +// Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. +// +// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() +func (_Rollup *RollupTransactor) Initialize3(opts *bind.TransactOpts, _rollupDelayPeird *big.Int) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "initialize3", _rollupDelayPeird) +} + +// Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. +// +// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() +func (_Rollup *RollupSession) Initialize3(_rollupDelayPeird *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeird) +} + +// Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. +// +// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() +func (_Rollup *RollupTransactorSession) Initialize3(_rollupDelayPeird *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeird) +} + // ProveState is a paid mutator transaction binding the contract method 0xb3484425. // // Solidity: function proveState(bytes _batchHeader, bytes _batchProof) returns() @@ -1607,6 +1628,27 @@ func (_Rollup *RollupTransactorSession) UpdateRewardPercentage(_newProofRewardPe return _Rollup.Contract.UpdateRewardPercentage(&_Rollup.TransactOpts, _newProofRewardPercent) } +// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// +// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() +func (_Rollup *RollupTransactor) UpdateRollupDelayPeird(opts *bind.TransactOpts, _newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "updateRollupDelayPeird", _newPeriod) +} + +// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// +// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() +func (_Rollup *RollupSession) UpdateRollupDelayPeird(_newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.UpdateRollupDelayPeird(&_Rollup.TransactOpts, _newPeriod) +} + +// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// +// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() +func (_Rollup *RollupTransactorSession) UpdateRollupDelayPeird(_newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.UpdateRollupDelayPeird(&_Rollup.TransactOpts, _newPeriod) +} + // UpdateVerifier is a paid mutator transaction binding the contract method 0x97fc007c. // // Solidity: function updateVerifier(address _newVerifier) returns() @@ -3272,6 +3314,141 @@ func (_Rollup *RollupFilterer) ParseRevertBatchRange(log types.Log) (*RollupReve return event, nil } +// RollupRollupDelayPeirdUpdateIterator is returned from FilterRollupDelayPeirdUpdate and is used to iterate over the raw logs and unpacked data for RollupDelayPeirdUpdate events raised by the Rollup contract. +type RollupRollupDelayPeirdUpdateIterator struct { + Event *RollupRollupDelayPeirdUpdate // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RollupRollupDelayPeirdUpdateIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RollupRollupDelayPeirdUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RollupRollupDelayPeirdUpdate) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RollupRollupDelayPeirdUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RollupRollupDelayPeirdUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RollupRollupDelayPeirdUpdate represents a RollupDelayPeirdUpdate event raised by the Rollup contract. +type RollupRollupDelayPeirdUpdate struct { + OldPeriod *big.Int + NewPeriod *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRollupDelayPeirdUpdate is a free log retrieval operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// +// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) FilterRollupDelayPeirdUpdate(opts *bind.FilterOpts) (*RollupRollupDelayPeirdUpdateIterator, error) { + + logs, sub, err := _Rollup.contract.FilterLogs(opts, "RollupDelayPeirdUpdate") + if err != nil { + return nil, err + } + return &RollupRollupDelayPeirdUpdateIterator{contract: _Rollup.contract, event: "RollupDelayPeirdUpdate", logs: logs, sub: sub}, nil +} + +// WatchRollupDelayPeirdUpdate is a free log subscription operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// +// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) WatchRollupDelayPeirdUpdate(opts *bind.WatchOpts, sink chan<- *RollupRollupDelayPeirdUpdate) (event.Subscription, error) { + + logs, sub, err := _Rollup.contract.WatchLogs(opts, "RollupDelayPeirdUpdate") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RollupRollupDelayPeirdUpdate) + if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeirdUpdate", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseRollupDelayPeirdUpdate is a log parse operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// +// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) ParseRollupDelayPeirdUpdate(log types.Log) (*RollupRollupDelayPeirdUpdate, error) { + event := new(RollupRollupDelayPeirdUpdate) + if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeirdUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RollupUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Rollup contract. type RollupUnpausedIterator struct { Event *RollupUnpaused // Event containing the contract specifics and raw log diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index a3b674a04..99687bdb8 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x60806040526004361061031c575f3560e01c8063728cdbca1161019c578063b35dac4e116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a35578063e3fff1dd14610a4a578063f2fde38b14610a69578063fb1e8b0414610a88575f80fd5b8063d279c191146109cb578063ddd8a3dc146109ea578063de8b303514610a16575f80fd5b8063c5bde702116100c2578063c5bde7021461098e578063cd4edc69146109a3578063ce5db8d6146109b6575f80fd5b8063b35dac4e14610931578063b3e0a50914610950578063bedb86fb1461096f575f80fd5b8063a415d8dc11610147578063abc8d68d11610122578063abc8d68d146108d2578063b31a77d3146108fd578063b348442514610912575f80fd5b8063a415d8dc14610870578063a479265d1461089e578063a4f209b0146108b3575f80fd5b80638f1d3776116101775780638f1d377614610756578063910129d41461082057806397fc007c14610851575f80fd5b8063728cdbca146106f457806388b1ea09146107135780638da5cb5b1461072c575f80fd5b80632b7ac3f3116102675780635c975abb1161021257806361267290116101ed578063612672901461067757806368589dfa146106965780636c578c1d146106c1578063715018a6146106e0575f80fd5b80635c975abb146105b45780635ef7a94a146105cb5780635f77cf1d1461062b575f80fd5b8063428868b511610242578063428868b51461056f5780634e8f1d671461058257806357e0af6c14610595575f80fd5b80632b7ac3f3146104dd5780633b70c18a1461052e5780633e001b661461055a575f80fd5b806313361101116102c757806321e2f9e0116102a257806321e2f9e0146104685780632362f03e146104875780632571098d146104b2575f80fd5b8063133611011461040457806318463fb01461042357806318af3b2b14610438575f80fd5b806310d44583116102f757806310d44583146103ae578063116a1f42146103cd578063121dcd50146103ef575f80fd5b806304d7721514610327578063059def611461036a5780630ceb67801461038d575f80fd5b3661032357005b5f80fd5b348015610332575f80fd5b50610355610341366004615297565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610375575f80fd5b5061037f609d5481565b604051908152602001610361565b348015610398575f80fd5b506103ac6103a73660046152d6565b610a9d565b005b3480156103b9575f80fd5b506103ac6103c8366004615334565b610bc1565b3480156103d8575f80fd5b506103556103e7366004615297565b609d54101590565b3480156103fa575f80fd5b5061037f609e5481565b34801561040f575f80fd5b506103ac61041e36600461537c565b610fad565b34801561042e575f80fd5b5061037f60a75481565b348015610443575f80fd5b50610355610452366004615297565b5f90815260a26020526040902060010154421090565b348015610473575f80fd5b50610355610482366004615297565b6115ac565b348015610492575f80fd5b5061037f6104a1366004615297565b60a16020525f908152604090205481565b3480156104bd575f80fd5b5061037f6104cc366004615297565b60a06020525f908152604090205481565b3480156104e8575f80fd5b50609c546105099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610361565b348015610539575f80fd5b50609b546105099073ffffffffffffffffffffffffffffffffffffffff1681565b348015610565575f80fd5b5061037f60aa5481565b6103ac61057d3660046153e1565b6115da565b6103ac610590366004615441565b61176a565b3480156105a0575f80fd5b506103ac6105af366004615297565b611b40565b3480156105bf575f80fd5b5060655460ff16610355565b3480156105d6575f80fd5b5061060b6105e5366004615297565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610361565b348015610636575f80fd5b5061065e7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610361565b348015610682575f80fd5b506103ac610691366004615297565b611c05565b3480156106a1575f80fd5b5061037f6106b0366004615297565b60ab6020525f908152604090205481565b3480156106cc575f80fd5b506103ac6106db3660046152d6565b611e68565b3480156106eb575f80fd5b506103ac611f77565b3480156106ff575f80fd5b506103ac61070e3660046154f2565b611f8a565b34801561071e575f80fd5b5060a6546103559060ff1681565b348015610737575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff16610509565b348015610761575f80fd5b506107cf610770366004615297565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610361565b34801561082b575f80fd5b5061035561083a366004615297565b5f90815260a4602052604090206003015460ff1690565b34801561085c575f80fd5b506103ac61086b3660046152d6565b612353565b34801561087b575f80fd5b5061035561088a3660046152d6565b609f6020525f908152604090205460ff1681565b3480156108a9575f80fd5b5061037f60995481565b3480156108be575f80fd5b506103ac6108cd366004615297565b612477565b3480156108dd575f80fd5b5061037f6108ec3660046152d6565b60a56020525f908152604090205481565b348015610908575f80fd5b5061037f60a85481565b34801561091d575f80fd5b506103ac61092c36600461554d565b612541565b34801561093c575f80fd5b506103ac61094b3660046152d6565b612920565b34801561095b575f80fd5b506103ac61096a36600461537c565b612986565b34801561097a575f80fd5b506103ac6109893660046155c1565b612d72565b348015610999575f80fd5b5061037f60ac5481565b6103ac6109b13660046155f3565b612f05565b3480156109c1575f80fd5b5061037f60985481565b3480156109d6575f80fd5b506103ac6109e53660046152d6565b61361a565b3480156109f5575f80fd5b506097546105099073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a21575f80fd5b50610355610a30366004615297565b613700565b348015610a40575f80fd5b5061037f609a5481565b348015610a55575f80fd5b506103ac610a64366004615297565b613757565b348015610a74575f80fd5b506103ac610a833660046152d6565b613814565b348015610a93575f80fd5b5061037f60a95481565b610aa56138c8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610bc96138c8565b5f8111610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b30565b5f80610c3e8585613949565b915091505f610c51836001015160c01c90565b5f81815260a160205260409020549091508214610cca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b5f60a181610cd88785615648565b81526020019081526020015f205414610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b30565b609d548111610e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b30565b610e0e60018261565b565b609e555b8315610fa557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610e5a81613700565b15610ee0575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610eb2908490615648565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610f5d575060a85481145b15610f67575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e12575b505050505050565b60a85415611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b61101f6139fc565b5f8061102b8484613949565b915091505f61103e836001015160c01c90565b5f81815260a1602052604090205490915082146110b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b6110c0816115ac565b611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b30565b61112f81613700565b15611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b30565b5f81815260a4602052604090206003015460ff1615611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b30565b5f81815260a2602052604090206001015442101561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b30565b605983015160a05f61129e60018561565b565b81526020019081526020015f205414611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b30565b5f81815260a0602052604090205415611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b30565b80609d54600101146113f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b609d819055600160a35f61140b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a0602052604090205561147861146b846011015160c01c90565b600985015160c01c613a69565b60a25f61148660018461565b565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906114bf908461565b565b81526020019081526020015f205f905560a45f6001836114df919061565b565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611588866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906115d457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015611660573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611684919061566e565b6116ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b30565b60a85415611754576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b61175c6139fc565b6117668282613b33565b5050565b60a854156117d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b6117dc6139fc565b60a65460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b30565b5f61185f61185a6020890189615689565b613949565b5090505f611871826001015160c01c90565b9050609d5481146118de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b60ac54609e545f90815260a2602052604090205442916118fd91615648565b101580156119a8575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611977573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199b91906156ea565b6119a59190615648565b10155b156119df576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546119ee919061565b565b90508015611a6c575f611a02836001615648565b9050805b609e548111611a2f575f81815260a1602052604081205580611a2781615701565b915050611a06565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611a6291815260200190565b60405180910390a2505b609e829055611a7b8989613b33565b5f80611a878989613949565b915091505f611a9a836001015160c01c90565b5f81815260a160205260409020549091508214611b13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b611b1d8c84614358565b611b28838989614636565b611b328a8a610fad565b505050505050505050505050565b611b486138c8565b5f81118015611b5957506099548114155b611bbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b30565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c2557505f5460ff8083169116105b611cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b30565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611cec5f5460ff1690565b60ff16600214611d58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b30565b81611de5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b30565b609e545f90815260ab6020526040902054611e0e57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611bf9565b611e706138c8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b30565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610bb6565b611f7f6138c8565b611f885f614810565b565b5f54610100900460ff1615808015611fa857505f54600160ff909116105b80611fc15750303b158015611fc157505f5460ff166001145b61204d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b30565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156120a9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806120e0575073ffffffffffffffffffffffffffffffffffffffff8516155b15612117576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b30565b61219c614886565b6121a4614924565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561234a575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b61235b6138c8565b73ffffffffffffffffffffffffffffffffffffffff81161580159061239b5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b30565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61247f6138c8565b5f8111801561248f575060648111155b801561249d575060a9548114155b612503576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b30565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611bf9565b60a854156125ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b6125b36139fc565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612639573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265d919061566e565b6126c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b30565b5f806126cf8686613949565b915091505f6126e2836001015160c01c90565b5f81815260a16020526040902054909150821461275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b61276481613700565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b30565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161284191615648565b116128d5575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526128d0918391906149c2565b61234a565b6128e0838686614636565b61234a81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614b45565b6129286138c8565b60aa80545f90915561293a8282614c2b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611bf9565b61298e6138c8565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b30565b5f80612a2b8484613949565b915091505f612a3e836001015160c01c90565b90508015612aa8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b30565b5f612ab4846079015190565b905080612b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b30565b600984015160c01c15612b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b30565b5f612b98856019015190565b03612bff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b30565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c2b856039015190565b14612c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b30565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612d7a6138c8565b8015612ed357612d88614cf7565b60a65460ff1615612e855760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612de9908490615648565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612edb614d7c565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ea8565b50565b335f908152609f602052604090205460ff16612f7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b30565b60a85415612fe7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b30565b612fef6139fc565b60a65460ff161561305c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b30565b8167ffffffffffffffff16609d54106130d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a160205260409020548114613152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b30565b6131658267ffffffffffffffff166115ac565b6131cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561326d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b30565b67ffffffffffffffff82165f90815260a260205260409020600101544210613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b30565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613381573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133a591906156ea565b34101561340e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b30565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161357a91815260200190565b60405180910390a35f609d5460016135929190615648565b90505b609e5481116135ea578267ffffffffffffffff1681146135d8576099545f82815260a26020526040812060010180549091906135d2908490615648565b90915550505b806135e281615701565b915050613595565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b335f90815260a5602052604081205490819003613693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b30565b335f90815260a560205260408120556136ac8282614c2b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516136f491815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906115d45750505f90815260a46020526040902060030154610100900460ff161590565b61375f6138c8565b5f8111801561377057506098548114155b6137d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b30565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611bf9565b61381c6138c8565b73ffffffffffffffffffffffffffffffffffffffff81166138bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b30565b612f0281614810565b60335473ffffffffffffffffffffffffffffffffffffffff163314611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b30565b5f805f6139568585614dd3565b90505f8160ff165f036139775761396d8686614e5d565b90945090506139ee565b8160ff1660010361398c5761396d8686614ee0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b30565b808420925050509250929050565b60655460ff1615611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b30565b805f03613a74575050565b8082035f5b82811015613b2d57610100818403811115613a9357508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613b03575f80fd5b505af1158015613b15573d5f803e3d5ffd5b50505050610100830192505061010081019050613a79565b50505050565b613b406020830183615738565b60ff161580613b5e5750613b576020830183615738565b60ff166001145b613bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b30565b6080820135613c2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b30565b60a0820135613c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b30565b5f80613cac61185a6020860186615689565b915091505f613cbf836001015160c01c90565b90505f60a181613cd0846001615648565b81526020019081526020015f205414613d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b30565b609e548114613db0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b30565b5f81815260a160205260409020548214613e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b30565b5f81815260ab6020526040902054608086013514613ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b30565b5f613eaf846011015160c01c90565b90505f613edb613ec56060890160408a01615758565b613ed560808a0160608b01615771565b84614f4d565b9050613eed6080880160608901615771565b6001939093019261ffff1691909101905f804915613f0c575f49613f2e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f9613f3f60208a018a615738565b60ff16600103613f4e57506101015b604080518281019091529650613f7387613f6b60208c018c615738565b60ff16614f91565b60c085901b6001880152613fa187613f9160808c0160608d01615771565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261400587613fe660208b018b615689565b604051613ff4929190615792565b604051809103902060b99190910152565b60d98701869052600161401b60208b018b615738565b60ff161061404d5761404d8761403760608c0160408d01615758565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156140ac5760a7545f90815260a46020526040902060020154609954429161409f91615648565b6140a9919061565b565b90505b604051806080016040528042815260200182609854426140cc9190615648565b6140d69190615648565b81526020016140eb60608d0160408e01615758565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614183573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141a791906156ea565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061421c90614216908c018c615689565b5f614f98565b5f61422a60408d018d615689565b6040518663ffffffff1660e01b815260040161424a9594939291906157e8565b602060405180830381865afa158015614265573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614289919061566e565b614315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b30565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61436a6020840184615738565b60ff16146143d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b30565b600981015160c01c6143ec6080840160608501615771565b61ffff1614614457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b30565b60598101518260800135146144c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b30565b60798101518260a0013514614539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b30565b60998101518260c00135146145aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b30565b5f6145bb61185a6020850185615689565b9150506145c98260d9015190565b8114614631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b30565b505050565b8061469d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b30565b5f6146ac846001015160c01c90565b90505f6146ba856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006146e9876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a8486147b8885160f81c90565b858888866040518663ffffffff1660e01b81526004016147dc959493929190615868565b5f6040518083038186803b1580156147f2575f80fd5b505afa158015614804573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661491c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f88614fec565b5f54610100900460ff166149ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f886150ac565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614a53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a7791906156ea565b5f86815260a46020526040902060010154909150614a96908290615648565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614ae2908490615648565b9091555050604051614af5908490615899565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614b6990846158c5565b614b7391906158dc565b9050614b7f818361565b565b60aa5f828254614b8f9190615648565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614bc8908490615648565b9091555050604051614bdb908490615899565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b8015611766575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614c87576040519150601f19603f3d011682016040523d82523d5f602084013e614c8c565b606091505b5050905080614631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b30565b614cff6139fc565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614d523390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614d8461514b565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614d52565b5f81614e3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b30565b82825f818110614e4d57614e4d615914565b919091013560f81c949350505050565b5f8160f9811015614eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b30565b6040519150808483378082016040529250929050565b5f816101018114614eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b30565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614f828161ffff8716866151b7565b82900390912095945050505050565b8082535050565b60605f80808080614fab888a018a615a2e565b9550955095509550955050818710614fc9579450614fe59350505050565b838710614fdd578295505050505050614fe5565b509293505050505b9392505050565b5f54610100900460ff16615082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b30565b611f8833614810565b60655460ff16611f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b30565b5f825f036151c6575082614fe5565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561528d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615254573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061527891906156ea565b875250602090950194600193840193016151e1565b5093949350505050565b5f602082840312156152a7575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146152d1575f80fd5b919050565b5f602082840312156152e6575f80fd5b614fe5826152ae565b5f8083601f8401126152ff575f80fd5b50813567ffffffffffffffff811115615316575f80fd5b60208301915083602082850101111561532d575f80fd5b9250929050565b5f805f60408486031215615346575f80fd5b833567ffffffffffffffff81111561535c575f80fd5b615368868287016152ef565b909790965060209590950135949350505050565b5f806020838503121561538d575f80fd5b823567ffffffffffffffff8111156153a3575f80fd5b6153af858286016152ef565b90969095509350505050565b5f60e082840312156153cb575f80fd5b50919050565b5f606082840312156153cb575f80fd5b5f80604083850312156153f2575f80fd5b823567ffffffffffffffff80821115615409575f80fd5b615415868387016153bb565b9350602085013591508082111561542a575f80fd5b50615437858286016153d1565b9150509250929050565b5f805f805f8060808789031215615456575f80fd5b863567ffffffffffffffff8082111561546d575f80fd5b6154798a838b016153bb565b9750602089013591508082111561548e575f80fd5b61549a8a838b016153d1565b965060408901359150808211156154af575f80fd5b6154bb8a838b016152ef565b909650945060608901359150808211156154d3575f80fd5b506154e089828a016152ef565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615507575f80fd5b615510876152ae565b955061551e602088016152ae565b945061552c604088016152ae565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615560575f80fd5b843567ffffffffffffffff80821115615577575f80fd5b615583888389016152ef565b9096509450602087013591508082111561559b575f80fd5b506155a8878288016152ef565b95989497509550505050565b8015158114612f02575f80fd5b5f602082840312156155d1575f80fd5b8135614fe5816155b4565b803567ffffffffffffffff811681146152d1575f80fd5b5f8060408385031215615604575f80fd5b61560d836155dc565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156115d4576115d461561b565b818103818111156115d4576115d461561b565b5f6020828403121561567e575f80fd5b8151614fe5816155b4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126156bc575f80fd5b83018035915067ffffffffffffffff8211156156d6575f80fd5b60200191503681900382131561532d575f80fd5b5f602082840312156156fa575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157315761573161561b565b5060010190565b5f60208284031215615748575f80fd5b813560ff81168114614fe5575f80fd5b5f60208284031215615768575f80fd5b614fe5826155dc565b5f60208284031215615781575f80fd5b813561ffff81168114614fe5575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561583f57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161580d565b5050876040860152848103606086015261585a8187896157a1565b9a9950505050505050505050565b858152846020820152608060408201525f6158876080830185876157a1565b90508260608301529695505050505050565b5f82515f5b818110156158b8576020818601810151858301520161589e565b505f920191825250919050565b80820281158282048414176115d4576115d461561b565b5f8261590f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f83011261597d575f80fd5b8135602067ffffffffffffffff8083111561599a5761599a615941565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156159dd576159dd615941565b60405293845260208187018101949081019250878511156159fc575f80fd5b6020870191505b84821015615a2357615a14826152ae565b83529183019190830190615a03565b979650505050505050565b5f805f805f8060c08789031215615a43575f80fd5b86359550602087013567ffffffffffffffff80821115615a61575f80fd5b615a6d8a838b0161596e565b9650604089013595506060890135915080821115615a89575f80fd5b615a958a838b0161596e565b94506080890135935060a0890135915080821115615ab1575f80fd5b50615abe89828a0161596e565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d279c19114610a1f578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063cd4edc69116100c2578063cd4edc69146109d8578063ce5db8d6146109eb578063cf9a674514610a00575f80fd5b8063bedb86fb14610985578063c5bde702146109a4578063c7e25a34146109b9575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615585565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155c4565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615622565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615585565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461566a565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615585565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615585565b611600565b3480156104a8575f80fd5b506103956104b7366004615585565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615585565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156cf565b61162e565b6103c26105a636600461572f565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615585565b611b94565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615585565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615585565b611c59565b3480156106b7575f80fd5b506103956106c6366004615585565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155c4565b611ebc565b348015610701575f80fd5b506103c2611fcb565b348015610715575f80fd5b506103c26107243660046157e0565b611fde565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615585565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615585565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155c4565b6123a7565b348015610891575f80fd5b5061036b6108a03660046155c4565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615585565b6124cb565b3480156108f3575f80fd5b506103956109023660046155c4565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461583b565b612595565b348015610952575f80fd5b506103c26109613660046155c4565b612974565b348015610971575f80fd5b506103c261098036600461566a565b6129da565b348015610990575f80fd5b506103c261099f3660046158af565b612dc6565b3480156109af575f80fd5b5061039560ac5481565b3480156109c4575f80fd5b506103c26109d3366004615585565b612f59565b6103c26109e63660046158e1565b613016565b3480156109f6575f80fd5b5061039560985481565b348015610a0b575f80fd5b506103c2610a1a366004615585565b61372b565b348015610a2a575f80fd5b506103c2610a393660046155c4565b613908565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615585565b6139ee565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615585565b613a45565b348015610ac8575f80fd5b506103c2610ad73660046155c4565b613b02565b348015610ae7575f80fd5b5061039560a95481565b610af9613bb6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bb6565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c37565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c8785615936565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e62600182615949565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae816139ee565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f06908490615936565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cea565b5f8061107f8484613c37565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b611183816139ee565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f2600185615949565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d57565b60a25f6114da600184615949565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115139084615949565b81526020019081526020015f205f905560a45f6001836115339190615949565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d8919061595c565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cea565b6117ba8282613e21565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cea565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae6020890189615977565b613c37565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a26020526040902054429161195191615936565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159d8565b6119f99190615936565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a429190615949565b90508015611ac0575f611a56836001615936565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b816159ef565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e21565b5f80611adb8989613c37565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c84614646565b611b7c838989614924565b611b868a8a611001565b505050505050505050505050565b611b9c613bb6565b5f81118015611bad57506099548114155b611c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c7957505f5460ff8083169116105b611d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d405f5460ff1690565b60ff16600214611dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e6257609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c4d565b611ec4613bb6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fd3613bb6565b611fdc5f614afe565b565b5f54610100900460ff1615808015611ffc57505f54600160ff909116105b806120155750303b15801561201557505f5460ff166001145b6120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156120fd575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612134575073ffffffffffffffffffffffffffffffffffffffff8516155b1561216b576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6121f0614b74565b6121f8614c12565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561239e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123af613bb6565b73ffffffffffffffffffffffffffffffffffffffff8116158015906123ef5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124d3613bb6565b5f811180156124e3575060648111155b80156124f1575060a9548114155b612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c4d565b60a854156125ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612607613cea565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b1919061595c565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127238686613c37565b915091505f612736836001015160c01c90565b5f81815260a1602052604090205490915082146127af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127b8816139ee565b61281e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161289591615936565b11612929575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261292491839190614cb0565b61239e565b612934838686614924565b61239e81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e33565b61297c613bb6565b60aa80545f90915561298e8282614f19565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c4d565b6129e2613bb6565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a7f8484613c37565b915091505f612a92836001015160c01c90565b90508015612afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b08846079015190565b905080612b71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612bec856019015190565b03612c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c7f856039015190565b14612ce6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612dce613bb6565b8015612f2757612ddc614fe5565b60a65460ff1615612ed95760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e3d908490615936565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f2f61506a565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612efc565b50565b612f61613bb6565b5f81118015612f72575060ac548114155b612fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611c4d565b335f908152609f602052604090205460ff1661308e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156130f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613100613cea565b60a65460ff161561316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6132768267ffffffffffffffff16611600565b6132dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561337e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a260205260409020600101544210613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b691906159d8565b34101561351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161368b91815260200190565b60405180910390a35f609d5460016136a39190615936565b90505b609e5481116136fb578267ffffffffffffffff1681146136e9576099545f82815260a26020526040812060010180549091906136e3908490615936565b90915550505b806136f3816159ef565b9150506136a6565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561374b57505f5460ff8083169116105b6137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b84565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c4d565b335f90815260a5602052604081205490819003613981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a5602052604081205561399a8282614f19565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139e291815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a4d613bb6565b5f81118015613a5e57506098548114155b613ac4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c4d565b613b0a613bb6565b73ffffffffffffffffffffffffffffffffffffffff8116613bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f5681614afe565b60335473ffffffffffffffffffffffffffffffffffffffff163314611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c4485856150c1565b90505f8160ff165f03613c6557613c5b868661514b565b9094509050613cdc565b8160ff16600103613c7a57613c5b86866151ce565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d62575050565b8082035f5b82811015613e1b57610100818403811115613d8157508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613df1575f80fd5b505af1158015613e03573d5f803e3d5ffd5b50505050610100830192505061010081019050613d67565b50505050565b613e2e6020830183615a26565b60ff161580613e4c5750613e456020830183615a26565b60ff166001145b613eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613f9a6118ae6020860186615977565b915091505f613fad836001015160c01c90565b90505f60a181613fbe846001615936565b81526020019081526020015f205414614033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e54811461409e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab602052604090205460808601351461418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f61419d846011015160c01c90565b90505f6141c96141b36060890160408a01615a46565b6141c360808a0160608b01615a5f565b8461523b565b90506141db6080880160608901615a5f565b6001939093019261ffff1691909101905f8049156141fa575f4961421c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961422d60208a018a615a26565b60ff1660010361423c57506101015b6040805182810190915296506142618761425960208c018c615a26565b60ff1661527f565b60c085901b600188015261428f8761427f60808c0160608d01615a5f565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526142f3876142d460208b018b615977565b6040516142e2929190615a80565b604051809103902060b99190910152565b60d98701869052600161430960208b018b615a26565b60ff161061433b5761433b8761432560608c0160408d01615a46565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561439a5760a7545f90815260a46020526040902060020154609954429161438d91615936565b6143979190615949565b90505b604051806080016040528042815260200182609854426143ba9190615936565b6143c49190615936565b81526020016143d960608d0160408e01615a46565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614471573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061449591906159d8565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061450a90614504908c018c615977565b5f615286565b5f61451860408d018d615977565b6040518663ffffffff1660e01b8152600401614538959493929190615ad6565b602060405180830381865afa158015614553573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614577919061595c565b614603576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c6146586020840184615a26565b60ff16146146c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146da6080840160608501615a5f565b61ffff1614614745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a0013514614827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c0013514614898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148a96118ae6020850185615977565b9150506148b78260d9015190565b811461491f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061498b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f61499a846001015160c01c90565b90505f6149a8856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149d7876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aa6885160f81c90565b858888866040518663ffffffff1660e01b8152600401614aca959493929190615b56565b5f6040518083038186803b158015614ae0575f80fd5b505afa158015614af2573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc6152da565b5f54610100900460ff16614ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc61539a565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d6591906159d8565b5f86815260a46020526040902060010154909150614d84908290615936565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614dd0908490615936565b9091555050604051614de3908490615b87565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e579084615bb3565b614e619190615bca565b9050614e6d8183615949565b60aa5f828254614e7d9190615936565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eb6908490615936565b9091555050604051614ec9908490615b87565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f75576040519150601f19603f3d011682016040523d82523d5f602084013e614f7a565b606091505b505090508061491f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b614fed613cea565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150403390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b615072615439565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615040565b5f81615129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061513b5761513b615c02565b919091013560f81c949350505050565b5f8160f98110156151b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152708161ffff8716866154a5565b82900390912095945050505050565b8082535050565b60605f80808080615299888a018a615d1c565b95509550955095509550508187106152b75794506152d39350505050565b8387106152cb5782955050505050506152d3565b509293505050505b9392505050565b5f54610100900460ff16615370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc33614afe565b60655460ff16611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154b45750826152d3565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561557b576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615542573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061556691906159d8565b875250602090950194600193840193016154cf565b5093949350505050565b5f60208284031215615595575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155bf575f80fd5b919050565b5f602082840312156155d4575f80fd5b6152d38261559c565b5f8083601f8401126155ed575f80fd5b50813567ffffffffffffffff811115615604575f80fd5b60208301915083602082850101111561561b575f80fd5b9250929050565b5f805f60408486031215615634575f80fd5b833567ffffffffffffffff81111561564a575f80fd5b615656868287016155dd565b909790965060209590950135949350505050565b5f806020838503121561567b575f80fd5b823567ffffffffffffffff811115615691575f80fd5b61569d858286016155dd565b90969095509350505050565b5f60e082840312156156b9575f80fd5b50919050565b5f606082840312156156b9575f80fd5b5f80604083850312156156e0575f80fd5b823567ffffffffffffffff808211156156f7575f80fd5b615703868387016156a9565b93506020850135915080821115615718575f80fd5b50615725858286016156bf565b9150509250929050565b5f805f805f8060808789031215615744575f80fd5b863567ffffffffffffffff8082111561575b575f80fd5b6157678a838b016156a9565b9750602089013591508082111561577c575f80fd5b6157888a838b016156bf565b9650604089013591508082111561579d575f80fd5b6157a98a838b016155dd565b909650945060608901359150808211156157c1575f80fd5b506157ce89828a016155dd565b979a9699509497509295939492505050565b5f805f805f8060c087890312156157f5575f80fd5b6157fe8761559c565b955061580c6020880161559c565b945061581a6040880161559c565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561584e575f80fd5b843567ffffffffffffffff80821115615865575f80fd5b615871888389016155dd565b90965094506020870135915080821115615889575f80fd5b50615896878288016155dd565b95989497509550505050565b8015158114612f56575f80fd5b5f602082840312156158bf575f80fd5b81356152d3816158a2565b803567ffffffffffffffff811681146155bf575f80fd5b5f80604083850312156158f2575f80fd5b6158fb836158ca565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615909565b8181038181111561162857611628615909565b5f6020828403121561596c575f80fd5b81516152d3816158a2565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159aa575f80fd5b83018035915067ffffffffffffffff8211156159c4575f80fd5b60200191503681900382131561561b575f80fd5b5f602082840312156159e8575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a1f57615a1f615909565b5060010190565b5f60208284031215615a36575f80fd5b813560ff811681146152d3575f80fd5b5f60208284031215615a56575f80fd5b6152d3826158ca565b5f60208284031215615a6f575f80fd5b813561ffff811681146152d3575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b2d57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615afb565b50508760408601528481036060860152615b48818789615a8f565b9a9950505050505050505050565b858152846020820152608060408201525f615b75608083018587615a8f565b90508260608301529695505050505050565b5f82515f5b81811015615ba65760208186018101518583015201615b8c565b505f920191825250919050565b808202811582820484141761162857611628615909565b5f82615bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c6b575f80fd5b8135602067ffffffffffffffff80831115615c8857615c88615c2f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ccb57615ccb615c2f565b6040529384526020818701810194908101925087851115615cea575f80fd5b6020870191505b84821015615d1157615d028261559c565b83529183019190830190615cf1565b979650505050505050565b5f805f805f8060c08789031215615d31575f80fd5b86359550602087013567ffffffffffffffff80821115615d4f575f80fd5b615d5b8a838b01615c5c565b9650604089013595506060890135915080821115615d77575f80fd5b615d838a838b01615c5c565b94506080890135935060a0890135915080821115615d9f575f80fd5b50615dac89828a01615c5c565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 6fbf2a572..5eef0038a 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -126,6 +126,11 @@ interface IRollup { /// @param newPercent The new proofRewardPercent. event UpdateProofRewardPercent(uint256 oldPercent, uint256 newPercent); + /// @notice Emitted when the rollup delay period is updated. + /// @param oldPeriod The old rollupDelayPeird. + /// @param newPeriod The new rollupDelayPeird. + event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod); + /// @notice Emit when prove remaining claimed. /// @param receiver receiver address. /// @param amount claimed amount. diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index 736f5f418..905ea7259 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -185,6 +185,11 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } } + function initialize3(uint256 _rollupDelayPeird) external reinitializer(3) { + require(_rollupDelayPeird != 0, "invalid rollup delay peird"); + rollupDelayPeird = _rollupDelayPeird; + emit RollupDelayPeirdUpdate(0, _rollupDelayPeird); + } /************************ * Restricted Functions * ************************/ @@ -462,6 +467,15 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { emit UpdateFinalizationPeriodSeconds(_oldFinalizationPeriodSeconds, finalizationPeriodSeconds); } + /// @notice Update rollupDelayPeird. + /// @param _newPeriod New rollup delay period. + function updateRollupDelayPeird(uint256 _newPeriod) external onlyOwner { + require(_newPeriod > 0 && _newPeriod != rollupDelayPeird, "invalid new rollup delay period"); + uint256 _oldRollupDelayPeird = rollupDelayPeird; + rollupDelayPeird = _newPeriod; + emit RollupDelayPeirdUpdate(_oldRollupDelayPeird, rollupDelayPeird); + } + /// @notice Add an account to the challenger list. /// @param _account The address of account to add. function addChallenger(address _account) external onlyOwner { From cc9ed4c4d9a6f774bfe3bb759491c2930bc14e99 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Tue, 6 Jan 2026 15:06:51 +0800 Subject: [PATCH 04/13] fix finalize --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 2 +- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/Rollup.sol | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index aeded07f2..f19a309db 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046147f0565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614822565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614880565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046147f0565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148c8565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046147f0565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046147f0565b61137e565b3480156104a8575f80fd5b506103956104b73660046147f0565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046147f0565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461492d565b6113ac565b6103c261057f36600461498d565b6114ee565b34801561058f575f80fd5b506103c261059e3660046147f0565b61184f565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046147f0565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046147f0565b6118fa565b348015610690575f80fd5b5061039561069f3660046147f0565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614822565b611ad5565b3480156106da575f80fd5b506103c2611b92565b3480156106ee575f80fd5b506103c26106fd366004614a3e565b611ba5565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046147f0565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046147f0565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614822565b611eae565b348015610843575f80fd5b5061036b610852366004614822565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046147f0565b611f91565b3480156108a5575f80fd5b506103956108b4366004614822565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614a99565b612041565b348015610904575f80fd5b506103c2610913366004614822565b612345565b348015610923575f80fd5b506103c26109323660046148c8565b61239e565b348015610942575f80fd5b506103c2610951366004614b0d565b6126ee565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c26109853660046147f0565b61282c565b6103c2610998366004614b3f565b6128cf565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc3660046147f0565b612e61565b3480156109dc575f80fd5b506103c26109eb366004614822565b612fd0565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046147f0565b61308f565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046147f0565b6130d9565b348015610a6d575f80fd5b506103c2610a7c366004614822565b61317c565b348015610a8c575f80fd5b5061039560a95481565b610a9e613209565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613209565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613263565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614b94565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614ba7565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d998161308f565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614b94565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6132fc565b5f80610f088484613263565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd88161308f565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614ba7565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c61334f565b60a25f611275600184614ba7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614ba7565b81526020019081526020015f205f905560a45f6001836112ce9190614ba7565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bba565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06132fc565b6114ea828261340c565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6115466132fc565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614bd5565b613263565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614b94565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c36565b6116ce9190614b94565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614ba7565b90508015611795575f61172b836001614b94565b9050805b609e548111611758575f81815260a160205260408120558061175081614c4d565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a4898961340c565b5f806117b08989613263565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b3a565b611837838989613d7c565b6118418a8a610ea4565b505050505050505050505050565b611857613209565b5f8111801561186857506099548114155b6118b45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561191a57505f5460ff8083169116105b61198c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119aa5f5460ff1690565b60ff166002146119fc5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a6f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611a9857609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b611add613209565b6001600160a01b0381165f908152609f602052604090205460ff16611b445760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611b9a613209565b611ba35f613f2f565b565b5f54610100900460ff1615808015611bc357505f54600160ff909116105b80611bdc5750303b158015611bdc57505f5460ff166001145b611c4e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c6f575f805461ff0019166101001790555b6001600160a01b0386161580611c8c57506001600160a01b038516155b15611cc3576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d195760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d21613f98565b611d2961401c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ea5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eb6613209565b6001600160a01b03811615801590611edc5750609c546001600160a01b03828116911614155b611f285760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611f99613209565b5f81118015611fa9575060648111155b8015611fb7575060a9548114155b6120035760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118ee565b60a854156120915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120996132fc565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612105573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121299190614bba565b6121755760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121818686613263565b915091505f612194836001015160c01c90565b5f81815260a1602052604090205490915082146121f35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6121fc8161308f565b6122485760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161228491614b94565b116122fa575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526122f5918391906140a0565b611ea5565b612305838686613d7c565b611ea581336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506141fc565b61234d613209565b60aa80545f90915561235f82826142c8565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118ee565b6123a6613209565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561241d5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124298484613263565b915091505f61243c836001015160c01c90565b9050801561248c5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f612498846079015190565b9050806124e75760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c1561253c5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f612548856019015190565b036125955760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125c1856039015190565b1461260e5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126f6613209565b80156127fa5761270461436d565b60a65460ff16156127b95760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612758908490614b94565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128026143c7565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127dc565b50565b612834613209565b5f81118015612845575060ac548114155b6128915760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e91016118ee565b335f908152609f602052604090205460ff1661292d5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a8541561297d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129856132fc565b60a65460ff16156129d85760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a335760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612a9a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612aad8267ffffffffffffffff1661137e565b612af95760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b745760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c045760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c789190614c36565b341015612cc75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ddf91815260200190565b60405180910390a35f609d546001612df79190614b94565b90505b609e548111612e4f578267ffffffffffffffff168114612e3d576099545f82815260a2602052604081206001018054909190612e37908490614b94565b90915550505b80612e4781614c4d565b915050612dfa565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e8157505f5460ff8083169116105b612ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f555760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b335f90815260a560205260408120549081900361302f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561304882826142c8565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161308391815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130e1613209565b5f811180156130f257506098548114155b61313e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118ee565b613184613209565b6001600160a01b0381166132005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61282981613f2f565b6033546001600160a01b03163314611ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132708585614400565b90505f8160ff165f03613291576132878686614470565b90945090506132ee565b8160ff166001036132a65761328786866144d9565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611ba35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361335a575050565b8082035f5b828110156134065761010081840381111561337957508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133dc575f80fd5b505af11580156133ee573d5f803e3d5ffd5b5050505061010083019250506101008101905061335f565b50505050565b6134196020830183614c84565b60ff16158061343757506134306020830183614c84565b60ff166001145b6134835760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134d45760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135255760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135376115aa6020860186614bd5565b915091505f61354a836001015160c01c90565b90505f60a18161355b846001614b94565b81526020019081526020015f2054146135b65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136075760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136635760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136c35760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136d2846011015160c01c90565b90505f6136fe6136e86060890160408a01614ca4565b6136f860808a0160608b01614cbd565b8461452c565b90506137106080880160608901614cbd565b6001939093019261ffff1691909101905f80491561372f575f49613751565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961376260208a018a614c84565b60ff1660010361377157506101015b6040805182810190915296506137968761378e60208c018c614c84565b60ff16614570565b60c085901b60018801526137c4876137b460808c0160608d01614cbd565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138288761380960208b018b614bd5565b604051613817929190614cde565b604051809103902060b99190910152565b60d98701869052600161383e60208b018b614c84565b60ff1610613870576138708761385a60608c0160408d01614ca4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138cf5760a7545f90815260a4602052604090206002015460995442916138c291614b94565b6138cc9190614ba7565b90505b604051806080016040528042815260200182609854426138ef9190614b94565b6138f99190614b94565b815260200161390e60608d0160408e01614ca4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561398c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b09190614c36565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a1890613a12908c018c614bd5565b5f614577565b5f613a2660408d018d614bd5565b6040518663ffffffff1660e01b8152600401613a46959493929190614d34565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190614bba565b613af75760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b4c6020840184614c84565b60ff1614613b9c5760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bb46080840160608501614cbd565b61ffff1614613c055760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c5c5760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cb35760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d0a5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d1b6115aa6020850185614bd5565b915050613d298260d9015190565b8114613d775760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613dc95760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dd8846001015160c01c90565b90505f613de6856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e15876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613ed7885160f81c90565b858888866040518663ffffffff1660e01b8152600401613efb959493929190614da7565b5f6040518083038186803b158015613f11575f80fd5b505afa158015613f23573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140145760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba36145cb565b5f54610100900460ff166140985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba3614653565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141489190614c36565b5f86815260a46020526040902060010154909150614167908290614b94565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141a6908490614b94565b90915550506040516141b9908490614dd8565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142209084614e04565b61422a9190614e1b565b90506142368183614ba7565b60aa5f8282546142469190614b94565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614272908490614b94565b9091555050604051614285908490614dd8565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614317576040519150601f19603f3d011682016040523d82523d5f602084013e61431c565b606091505b5050905080613d775760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b6143756132fc565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143aa3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143cf6146d8565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143aa565b5f8161444e5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061446057614460614e53565b919091013560f81c949350505050565b5f8160f98110156144c35760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144c35760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145618161ffff87168661472a565b82900390912095945050505050565b8082535050565b60605f8080808061458a888a018a614f6d565b95509550955095509550508187106145a85794506145c49350505050565b8387106145bc5782955050505050506145c4565b509293505050505b9392505050565b5f54610100900460ff166146475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba333613f2f565b60655460ff16611ba35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036147395750826145c4565b609b546001600160a01b03165f5b848110156147e6576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d19190614c36565b87525060209095019460019384019301614747565b5093949350505050565b5f60208284031215614800575f80fd5b5035919050565b80356001600160a01b038116811461481d575f80fd5b919050565b5f60208284031215614832575f80fd5b6145c482614807565b5f8083601f84011261484b575f80fd5b50813567ffffffffffffffff811115614862575f80fd5b602083019150836020828501011115614879575f80fd5b9250929050565b5f805f60408486031215614892575f80fd5b833567ffffffffffffffff8111156148a8575f80fd5b6148b48682870161483b565b909790965060209590950135949350505050565b5f80602083850312156148d9575f80fd5b823567ffffffffffffffff8111156148ef575f80fd5b6148fb8582860161483b565b90969095509350505050565b5f60e08284031215614917575f80fd5b50919050565b5f60608284031215614917575f80fd5b5f806040838503121561493e575f80fd5b823567ffffffffffffffff80821115614955575f80fd5b61496186838701614907565b93506020850135915080821115614976575f80fd5b506149838582860161491d565b9150509250929050565b5f805f805f80608087890312156149a2575f80fd5b863567ffffffffffffffff808211156149b9575f80fd5b6149c58a838b01614907565b975060208901359150808211156149da575f80fd5b6149e68a838b0161491d565b965060408901359150808211156149fb575f80fd5b614a078a838b0161483b565b90965094506060890135915080821115614a1f575f80fd5b50614a2c89828a0161483b565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a53575f80fd5b614a5c87614807565b9550614a6a60208801614807565b9450614a7860408801614807565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614aac575f80fd5b843567ffffffffffffffff80821115614ac3575f80fd5b614acf8883890161483b565b90965094506020870135915080821115614ae7575f80fd5b50614af48782880161483b565b95989497509550505050565b8015158114612829575f80fd5b5f60208284031215614b1d575f80fd5b81356145c481614b00565b803567ffffffffffffffff8116811461481d575f80fd5b5f8060408385031215614b50575f80fd5b614b5983614b28565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b67565b818103818111156113a6576113a6614b67565b5f60208284031215614bca575f80fd5b81516145c481614b00565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c08575f80fd5b83018035915067ffffffffffffffff821115614c22575f80fd5b602001915036819003821315614879575f80fd5b5f60208284031215614c46575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7d57614c7d614b67565b5060010190565b5f60208284031215614c94575f80fd5b813560ff811681146145c4575f80fd5b5f60208284031215614cb4575f80fd5b6145c482614b28565b5f60208284031215614ccd575f80fd5b813561ffff811681146145c4575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d7e5784516001600160a01b031683529383019391830191600101614d59565b50508760408601528481036060860152614d99818789614ced565b9a9950505050505050505050565b858152846020820152608060408201525f614dc6608083018587614ced565b90508260608301529695505050505050565b5f82515f5b81811015614df75760208186018101518583015201614ddd565b505f920191825250919050565b80820281158282048414176113a6576113a6614b67565b5f82614e4e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ebc575f80fd5b8135602067ffffffffffffffff80831115614ed957614ed9614e80565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f1c57614f1c614e80565b6040529384526020818701810194908101925087851115614f3b575f80fd5b6020870191505b84821015614f6257614f5382614807565b83529183019190830190614f42565b979650505050505050565b5f805f805f8060c08789031215614f82575f80fd5b86359550602087013567ffffffffffffffff80821115614fa0575f80fd5b614fac8a838b01614ead565b9650604089013595506060890135915080821115614fc8575f80fd5b614fd48a838b01614ead565b94506080890135935060a0890135915080821115614ff0575f80fd5b50614ffd89828a01614ead565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c2610985366004614804565b612840565b6103c2610998366004614b53565b6128e3565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc366004614804565b612e75565b3480156109dc575f80fd5b506103c26109eb366004614836565b612fe4565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index a2d8738ca..449e6a6f6 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -50,7 +50,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeirdUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeird\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeird\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeird\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620051753803806200517583398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b6080516150176200015e5f395f818161062b0152613deb01526150175ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046147f0565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614822565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614880565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046147f0565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148c8565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046147f0565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046147f0565b61137e565b3480156104a8575f80fd5b506103956104b73660046147f0565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046147f0565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461492d565b6113ac565b6103c261057f36600461498d565b6114ee565b34801561058f575f80fd5b506103c261059e3660046147f0565b61184f565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046147f0565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046147f0565b6118fa565b348015610690575f80fd5b5061039561069f3660046147f0565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614822565b611ad5565b3480156106da575f80fd5b506103c2611b92565b3480156106ee575f80fd5b506103c26106fd366004614a3e565b611ba5565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046147f0565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046147f0565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614822565b611eae565b348015610843575f80fd5b5061036b610852366004614822565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046147f0565b611f91565b3480156108a5575f80fd5b506103956108b4366004614822565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614a99565b612041565b348015610904575f80fd5b506103c2610913366004614822565b612345565b348015610923575f80fd5b506103c26109323660046148c8565b61239e565b348015610942575f80fd5b506103c2610951366004614b0d565b6126ee565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c26109853660046147f0565b61282c565b6103c2610998366004614b3f565b6128cf565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc3660046147f0565b612e61565b3480156109dc575f80fd5b506103c26109eb366004614822565b612fd0565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046147f0565b61308f565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046147f0565b6130d9565b348015610a6d575f80fd5b506103c2610a7c366004614822565b61317c565b348015610a8c575f80fd5b5061039560a95481565b610a9e613209565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613209565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613263565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614b94565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614ba7565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d998161308f565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614b94565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6132fc565b5f80610f088484613263565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd88161308f565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614ba7565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c61334f565b60a25f611275600184614ba7565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614ba7565b81526020019081526020015f205f905560a45f6001836112ce9190614ba7565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bba565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06132fc565b6114ea828261340c565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6115466132fc565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614bd5565b613263565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614b94565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c36565b6116ce9190614b94565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614ba7565b90508015611795575f61172b836001614b94565b9050805b609e548111611758575f81815260a160205260408120558061175081614c4d565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a4898961340c565b5f806117b08989613263565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b3a565b611837838989613d7c565b6118418a8a610ea4565b505050505050505050505050565b611857613209565b5f8111801561186857506099548114155b6118b45760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561191a57505f5460ff8083169116105b61198c5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119aa5f5460ff1690565b60ff166002146119fc5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a6f5760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611a9857609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b611add613209565b6001600160a01b0381165f908152609f602052604090205460ff16611b445760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611b9a613209565b611ba35f613f2f565b565b5f54610100900460ff1615808015611bc357505f54600160ff909116105b80611bdc5750303b158015611bdc57505f5460ff166001145b611c4e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c6f575f805461ff0019166101001790555b6001600160a01b0386161580611c8c57506001600160a01b038516155b15611cc3576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d195760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d21613f98565b611d2961401c565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ea5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eb6613209565b6001600160a01b03811615801590611edc5750609c546001600160a01b03828116911614155b611f285760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611f99613209565b5f81118015611fa9575060648111155b8015611fb7575060a9548114155b6120035760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016118ee565b60a854156120915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120996132fc565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612105573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121299190614bba565b6121755760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121818686613263565b915091505f612194836001015160c01c90565b5f81815260a1602052604090205490915082146121f35760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6121fc8161308f565b6122485760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161228491614b94565b116122fa575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526122f5918391906140a0565b611ea5565b612305838686613d7c565b611ea581336040518060400160405280600d81526020017f50726f6f662073756363657373000000000000000000000000000000000000008152506141fc565b61234d613209565b60aa80545f90915561235f82826142c8565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016118ee565b6123a6613209565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea541561241d5760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124298484613263565b915091505f61243c836001015160c01c90565b9050801561248c5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f612498846079015190565b9050806124e75760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c1561253c5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f612548856019015190565b036125955760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125c1856039015190565b1461260e5760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6126f6613209565b80156127fa5761270461436d565b60a65460ff16156127b95760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091612758908490614b94565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128026143c7565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127dc565b50565b612834613209565b5f81118015612845575060ac548114155b6128915760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e91016118ee565b335f908152609f602052604090205460ff1661292d5760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a8541561297d5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129856132fc565b60a65460ff16156129d85760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a335760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612a9a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612aad8267ffffffffffffffff1661137e565b612af95760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b745760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c045760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c54573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c789190614c36565b341015612cc75760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612ddf91815260200190565b60405180910390a35f609d546001612df79190614b94565b90505b609e548111612e4f578267ffffffffffffffff168114612e3d576099545f82815260a2602052604081206001018054909190612e37908490614b94565b90915550505b80612e4781614c4d565b915050612dfa565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e8157505f5460ff8083169116105b612ef35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f555760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016118ee565b335f90815260a560205260408120549081900361302f5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561304882826142c8565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161308391815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130e1613209565b5f811180156130f257506098548114155b61313e5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016118ee565b613184613209565b6001600160a01b0381166132005760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61282981613f2f565b6033546001600160a01b03163314611ba35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132708585614400565b90505f8160ff165f03613291576132878686614470565b90945090506132ee565b8160ff166001036132a65761328786866144d9565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611ba35760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361335a575050565b8082035f5b828110156134065761010081840381111561337957508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133dc575f80fd5b505af11580156133ee573d5f803e3d5ffd5b5050505061010083019250506101008101905061335f565b50505050565b6134196020830183614c84565b60ff16158061343757506134306020830183614c84565b60ff166001145b6134835760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134d45760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135255760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135376115aa6020860186614bd5565b915091505f61354a836001015160c01c90565b90505f60a18161355b846001614b94565b81526020019081526020015f2054146135b65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136075760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136635760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136c35760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136d2846011015160c01c90565b90505f6136fe6136e86060890160408a01614ca4565b6136f860808a0160608b01614cbd565b8461452c565b90506137106080880160608901614cbd565b6001939093019261ffff1691909101905f80491561372f575f49613751565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961376260208a018a614c84565b60ff1660010361377157506101015b6040805182810190915296506137968761378e60208c018c614c84565b60ff16614570565b60c085901b60018801526137c4876137b460808c0160608d01614cbd565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138288761380960208b018b614bd5565b604051613817929190614cde565b604051809103902060b99190910152565b60d98701869052600161383e60208b018b614c84565b60ff1610613870576138708761385a60608c0160408d01614ca4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138cf5760a7545f90815260a4602052604090206002015460995442916138c291614b94565b6138cc9190614ba7565b90505b604051806080016040528042815260200182609854426138ef9190614b94565b6138f99190614b94565b815260200161390e60608d0160408e01614ca4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561398c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139b09190614c36565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a1890613a12908c018c614bd5565b5f614577565b5f613a2660408d018d614bd5565b6040518663ffffffff1660e01b8152600401613a46959493929190614d34565b602060405180830381865afa158015613a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a859190614bba565b613af75760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b4c6020840184614c84565b60ff1614613b9c5760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bb46080840160608501614cbd565b61ffff1614613c055760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c5c5760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cb35760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d0a5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d1b6115aa6020850185614bd5565b915050613d298260d9015190565b8114613d775760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613dc95760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dd8846001015160c01c90565b90505f613de6856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e15876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613ed7885160f81c90565b858888866040518663ffffffff1660e01b8152600401613efb959493929190614da7565b5f6040518083038186803b158015613f11575f80fd5b505afa158015613f23573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140145760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba36145cb565b5f54610100900460ff166140985760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba3614653565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614124573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141489190614c36565b5f86815260a46020526040902060010154909150614167908290614b94565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141a6908490614b94565b90915550506040516141b9908490614dd8565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142209084614e04565b61422a9190614e1b565b90506142368183614ba7565b60aa5f8282546142469190614b94565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614272908490614b94565b9091555050604051614285908490614dd8565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614317576040519150601f19603f3d011682016040523d82523d5f602084013e61431c565b606091505b5050905080613d775760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b6143756132fc565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143aa3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143cf6146d8565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143aa565b5f8161444e5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061446057614460614e53565b919091013560f81c949350505050565b5f8160f98110156144c35760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144c35760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145618161ffff87168661472a565b82900390912095945050505050565b8082535050565b60605f8080808061458a888a018a614f6d565b95509550955095509550508187106145a85794506145c49350505050565b8387106145bc5782955050505050506145c4565b509293505050505b9392505050565b5f54610100900460ff166146475760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146cf5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611ba333613f2f565b60655460ff16611ba35760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036147395750826145c4565b609b546001600160a01b03165f5b848110156147e6576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d19190614c36565b87525060209095019460019384019301614747565b5093949350505050565b5f60208284031215614800575f80fd5b5035919050565b80356001600160a01b038116811461481d575f80fd5b919050565b5f60208284031215614832575f80fd5b6145c482614807565b5f8083601f84011261484b575f80fd5b50813567ffffffffffffffff811115614862575f80fd5b602083019150836020828501011115614879575f80fd5b9250929050565b5f805f60408486031215614892575f80fd5b833567ffffffffffffffff8111156148a8575f80fd5b6148b48682870161483b565b909790965060209590950135949350505050565b5f80602083850312156148d9575f80fd5b823567ffffffffffffffff8111156148ef575f80fd5b6148fb8582860161483b565b90969095509350505050565b5f60e08284031215614917575f80fd5b50919050565b5f60608284031215614917575f80fd5b5f806040838503121561493e575f80fd5b823567ffffffffffffffff80821115614955575f80fd5b61496186838701614907565b93506020850135915080821115614976575f80fd5b506149838582860161491d565b9150509250929050565b5f805f805f80608087890312156149a2575f80fd5b863567ffffffffffffffff808211156149b9575f80fd5b6149c58a838b01614907565b975060208901359150808211156149da575f80fd5b6149e68a838b0161491d565b965060408901359150808211156149fb575f80fd5b614a078a838b0161483b565b90965094506060890135915080821115614a1f575f80fd5b50614a2c89828a0161483b565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a53575f80fd5b614a5c87614807565b9550614a6a60208801614807565b9450614a7860408801614807565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614aac575f80fd5b843567ffffffffffffffff80821115614ac3575f80fd5b614acf8883890161483b565b90965094506020870135915080821115614ae7575f80fd5b50614af48782880161483b565b95989497509550505050565b8015158114612829575f80fd5b5f60208284031215614b1d575f80fd5b81356145c481614b00565b803567ffffffffffffffff8116811461481d575f80fd5b5f8060408385031215614b50575f80fd5b614b5983614b28565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b67565b818103818111156113a6576113a6614b67565b5f60208284031215614bca575f80fd5b81516145c481614b00565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c08575f80fd5b83018035915067ffffffffffffffff821115614c22575f80fd5b602001915036819003821315614879575f80fd5b5f60208284031215614c46575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c7d57614c7d614b67565b5060010190565b5f60208284031215614c94575f80fd5b813560ff811681146145c4575f80fd5b5f60208284031215614cb4575f80fd5b6145c482614b28565b5f60208284031215614ccd575f80fd5b813561ffff811681146145c4575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d7e5784516001600160a01b031683529383019391830191600101614d59565b50508760408601528481036060860152614d99818789614ced565b9a9950505050505050505050565b858152846020820152608060408201525f614dc6608083018587614ced565b90508260608301529695505050505050565b5f82515f5b81811015614df75760208186018101518583015201614ddd565b505f920191825250919050565b80820281158282048414176113a6576113a6614b67565b5f82614e4e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ebc575f80fd5b8135602067ffffffffffffffff80831115614ed957614ed9614e80565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f1c57614f1c614e80565b6040529384526020818701810194908101925087851115614f3b575f80fd5b6020870191505b84821015614f6257614f5382614807565b83529183019190830190614f42565b979650505050505050565b5f805f805f8060c08789031215614f82575f80fd5b86359550602087013567ffffffffffffffff80821115614fa0575f80fd5b614fac8a838b01614ead565b9650604089013595506060890135915080821115614fc8575f80fd5b614fd48a838b01614ead565b94506080890135935060a0890135915080821115614ff0575f80fd5b50614ffd89828a01614ead565b915050929550929550929556fea164736f6c6343000818000a", + Bin: "0x60a060405234801562000010575f80fd5b50604051620051893803806200518983398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b60805161502b6200015e5f395f818161062b0152613dff015261502b5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c2610985366004614804565b612840565b6103c2610998366004614b53565b6128e3565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc366004614804565b612e75565b3480156109dc575f80fd5b506103c26109eb366004614836565b612fe4565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 99687bdb8..c3c12919b 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d279c19114610a1f578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063cd4edc69116100c2578063cd4edc69146109d8578063ce5db8d6146109eb578063cf9a674514610a00575f80fd5b8063bedb86fb14610985578063c5bde702146109a4578063c7e25a34146109b9575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615585565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155c4565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615622565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615585565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461566a565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615585565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615585565b611600565b3480156104a8575f80fd5b506103956104b7366004615585565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615585565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156cf565b61162e565b6103c26105a636600461572f565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615585565b611b94565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615585565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615585565b611c59565b3480156106b7575f80fd5b506103956106c6366004615585565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155c4565b611ebc565b348015610701575f80fd5b506103c2611fcb565b348015610715575f80fd5b506103c26107243660046157e0565b611fde565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615585565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615585565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155c4565b6123a7565b348015610891575f80fd5b5061036b6108a03660046155c4565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615585565b6124cb565b3480156108f3575f80fd5b506103956109023660046155c4565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461583b565b612595565b348015610952575f80fd5b506103c26109613660046155c4565b612974565b348015610971575f80fd5b506103c261098036600461566a565b6129da565b348015610990575f80fd5b506103c261099f3660046158af565b612dc6565b3480156109af575f80fd5b5061039560ac5481565b3480156109c4575f80fd5b506103c26109d3366004615585565b612f59565b6103c26109e63660046158e1565b613016565b3480156109f6575f80fd5b5061039560985481565b348015610a0b575f80fd5b506103c2610a1a366004615585565b61372b565b348015610a2a575f80fd5b506103c2610a393660046155c4565b613908565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615585565b6139ee565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615585565b613a45565b348015610ac8575f80fd5b506103c2610ad73660046155c4565b613b02565b348015610ae7575f80fd5b5061039560a95481565b610af9613bb6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bb6565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c37565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c8785615936565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e62600182615949565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae816139ee565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f06908490615936565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cea565b5f8061107f8484613c37565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b611183816139ee565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f2600185615949565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d57565b60a25f6114da600184615949565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115139084615949565b81526020019081526020015f205f905560a45f6001836115339190615949565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d8919061595c565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cea565b6117ba8282613e21565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cea565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae6020890189615977565b613c37565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a26020526040902054429161195191615936565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159d8565b6119f99190615936565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a429190615949565b90508015611ac0575f611a56836001615936565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b816159ef565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e21565b5f80611adb8989613c37565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c84614646565b611b7c838989614924565b611b868a8a611001565b505050505050505050505050565b611b9c613bb6565b5f81118015611bad57506099548114155b611c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c7957505f5460ff8083169116105b611d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d405f5460ff1690565b60ff16600214611dac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e6257609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c4d565b611ec4613bb6565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fd3613bb6565b611fdc5f614afe565b565b5f54610100900460ff1615808015611ffc57505f54600160ff909116105b806120155750303b15801561201557505f5460ff166001145b6120a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156120fd575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612134575073ffffffffffffffffffffffffffffffffffffffff8516155b1561216b576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6121f0614b74565b6121f8614c12565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561239e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123af613bb6565b73ffffffffffffffffffffffffffffffffffffffff8116158015906123ef5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124d3613bb6565b5f811180156124e3575060648111155b80156124f1575060a9548114155b612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c4d565b60a854156125ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612607613cea565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561268d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126b1919061595c565b612717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127238686613c37565b915091505f612736836001015160c01c90565b5f81815260a1602052604090205490915082146127af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127b8816139ee565b61281e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161289591615936565b11612929575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261292491839190614cb0565b61239e565b612934838686614924565b61239e81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e33565b61297c613bb6565b60aa80545f90915561298e8282614f19565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c4d565b6129e2613bb6565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a7f8484613c37565b915091505f612a92836001015160c01c90565b90508015612afc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b08846079015190565b905080612b71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612bec856019015190565b03612c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c7f856039015190565b14612ce6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612dce613bb6565b8015612f2757612ddc614fe5565b60a65460ff1615612ed95760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e3d908490615936565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f2f61506a565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612efc565b50565b612f61613bb6565b5f81118015612f72575060ac548114155b612fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611c4d565b335f908152609f602052604090205460ff1661308e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156130f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613100613cea565b60a65460ff161561316d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6132768267ffffffffffffffff16611600565b6132dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561337e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a260205260409020600101544210613428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134b691906159d8565b34101561351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161368b91815260200190565b60405180910390a35f609d5460016136a39190615936565b90505b609e5481116136fb578267ffffffffffffffff1681146136e9576099545f82815260a26020526040812060010180549091906136e3908490615936565b90915550505b806136f3816159ef565b9150506136a6565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561374b57505f5460ff8083169116105b6137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b84565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c4d565b335f90815260a5602052604081205490819003613981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a5602052604081205561399a8282614f19565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139e291815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a4d613bb6565b5f81118015613a5e57506098548114155b613ac4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c4d565b613b0a613bb6565b73ffffffffffffffffffffffffffffffffffffffff8116613bad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f5681614afe565b60335473ffffffffffffffffffffffffffffffffffffffff163314611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c4485856150c1565b90505f8160ff165f03613c6557613c5b868661514b565b9094509050613cdc565b8160ff16600103613c7a57613c5b86866151ce565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d62575050565b8082035f5b82811015613e1b57610100818403811115613d8157508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613df1575f80fd5b505af1158015613e03573d5f803e3d5ffd5b50505050610100830192505061010081019050613d67565b50505050565b613e2e6020830183615a26565b60ff161580613e4c5750613e456020830183615a26565b60ff166001145b613eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613f9a6118ae6020860186615977565b915091505f613fad836001015160c01c90565b90505f60a181613fbe846001615936565b81526020019081526020015f205414614033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e54811461409e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab602052604090205460808601351461418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f61419d846011015160c01c90565b90505f6141c96141b36060890160408a01615a46565b6141c360808a0160608b01615a5f565b8461523b565b90506141db6080880160608901615a5f565b6001939093019261ffff1691909101905f8049156141fa575f4961421c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961422d60208a018a615a26565b60ff1660010361423c57506101015b6040805182810190915296506142618761425960208c018c615a26565b60ff1661527f565b60c085901b600188015261428f8761427f60808c0160608d01615a5f565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526142f3876142d460208b018b615977565b6040516142e2929190615a80565b604051809103902060b99190910152565b60d98701869052600161430960208b018b615a26565b60ff161061433b5761433b8761432560608c0160408d01615a46565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561439a5760a7545f90815260a46020526040902060020154609954429161438d91615936565b6143979190615949565b90505b604051806080016040528042815260200182609854426143ba9190615936565b6143c49190615936565b81526020016143d960608d0160408e01615a46565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614471573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061449591906159d8565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061450a90614504908c018c615977565b5f615286565b5f61451860408d018d615977565b6040518663ffffffff1660e01b8152600401614538959493929190615ad6565b602060405180830381865afa158015614553573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614577919061595c565b614603576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c6146586020840184615a26565b60ff16146146c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146da6080840160608501615a5f565b61ffff1614614745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a0013514614827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c0013514614898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148a96118ae6020850185615977565b9150506148b78260d9015190565b811461491f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061498b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f61499a846001015160c01c90565b90505f6149a8856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149d7876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aa6885160f81c90565b858888866040518663ffffffff1660e01b8152600401614aca959493929190615b56565b5f6040518083038186803b158015614ae0575f80fd5b505afa158015614af2573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc6152da565b5f54610100900460ff16614ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc61539a565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d41573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d6591906159d8565b5f86815260a46020526040902060010154909150614d84908290615936565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614dd0908490615936565b9091555050604051614de3908490615b87565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e579084615bb3565b614e619190615bca565b9050614e6d8183615949565b60aa5f828254614e7d9190615936565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eb6908490615936565b9091555050604051614ec9908490615b87565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f75576040519150601f19603f3d011682016040523d82523d5f602084013e614f7a565b606091505b505090508061491f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b614fed613cea565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150403390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b615072615439565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615040565b5f81615129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061513b5761513b615c02565b919091013560f81c949350505050565b5f8160f98110156151b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152708161ffff8716866154a5565b82900390912095945050505050565b8082535050565b60605f80808080615299888a018a615d1c565b95509550955095509550508187106152b75794506152d39350505050565b8387106152cb5782955050505050506152d3565b509293505050505b9392505050565b5f54610100900460ff16615370576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615430576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611fdc33614afe565b60655460ff16611fdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154b45750826152d3565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561557b576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615542573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061556691906159d8565b875250602090950194600193840193016154cf565b5093949350505050565b5f60208284031215615595575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155bf575f80fd5b919050565b5f602082840312156155d4575f80fd5b6152d38261559c565b5f8083601f8401126155ed575f80fd5b50813567ffffffffffffffff811115615604575f80fd5b60208301915083602082850101111561561b575f80fd5b9250929050565b5f805f60408486031215615634575f80fd5b833567ffffffffffffffff81111561564a575f80fd5b615656868287016155dd565b909790965060209590950135949350505050565b5f806020838503121561567b575f80fd5b823567ffffffffffffffff811115615691575f80fd5b61569d858286016155dd565b90969095509350505050565b5f60e082840312156156b9575f80fd5b50919050565b5f606082840312156156b9575f80fd5b5f80604083850312156156e0575f80fd5b823567ffffffffffffffff808211156156f7575f80fd5b615703868387016156a9565b93506020850135915080821115615718575f80fd5b50615725858286016156bf565b9150509250929050565b5f805f805f8060808789031215615744575f80fd5b863567ffffffffffffffff8082111561575b575f80fd5b6157678a838b016156a9565b9750602089013591508082111561577c575f80fd5b6157888a838b016156bf565b9650604089013591508082111561579d575f80fd5b6157a98a838b016155dd565b909650945060608901359150808211156157c1575f80fd5b506157ce89828a016155dd565b979a9699509497509295939492505050565b5f805f805f8060c087890312156157f5575f80fd5b6157fe8761559c565b955061580c6020880161559c565b945061581a6040880161559c565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561584e575f80fd5b843567ffffffffffffffff80821115615865575f80fd5b615871888389016155dd565b90965094506020870135915080821115615889575f80fd5b50615896878288016155dd565b95989497509550505050565b8015158114612f56575f80fd5b5f602082840312156158bf575f80fd5b81356152d3816158a2565b803567ffffffffffffffff811681146155bf575f80fd5b5f80604083850312156158f2575f80fd5b6158fb836158ca565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615909565b8181038181111561162857611628615909565b5f6020828403121561596c575f80fd5b81516152d3816158a2565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159aa575f80fd5b83018035915067ffffffffffffffff8211156159c4575f80fd5b60200191503681900382131561561b575f80fd5b5f602082840312156159e8575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a1f57615a1f615909565b5060010190565b5f60208284031215615a36575f80fd5b813560ff811681146152d3575f80fd5b5f60208284031215615a56575f80fd5b6152d3826158ca565b5f60208284031215615a6f575f80fd5b813561ffff811681146152d3575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b2d57845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615afb565b50508760408601528481036060860152615b48818789615a8f565b9a9950505050505050505050565b858152846020820152608060408201525f615b75608083018587615a8f565b90508260608301529695505050505050565b5f82515f5b81811015615ba65760208186018101518583015201615b8c565b505f920191825250919050565b808202811582820484141761162857611628615909565b5f82615bfd577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c6b575f80fd5b8135602067ffffffffffffffff80831115615c8857615c88615c2f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ccb57615ccb615c2f565b6040529384526020818701810194908101925087851115615cea575f80fd5b6020870191505b84821015615d1157615d028261559c565b83529183019190830190615cf1565b979650505050505050565b5f805f805f8060c08789031215615d31575f80fd5b86359550602087013567ffffffffffffffff80821115615d4f575f80fd5b615d5b8a838b01615c5c565b9650604089013595506060890135915080821115615d77575f80fd5b615d838a838b01615c5c565b94506080890135935060a0890135915080821115615d9f575f80fd5b50615dac89828a01615c5c565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d279c19114610a1f578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063cd4edc69116100c2578063cd4edc69146109d8578063ce5db8d6146109eb578063cf9a674514610a00575f80fd5b8063bedb86fb14610985578063c5bde702146109a4578063c7e25a34146109b9575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615599565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155d8565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615636565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615599565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461567e565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615599565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615599565b611600565b3480156104a8575f80fd5b506103956104b7366004615599565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615599565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156e3565b61162e565b6103c26105a6366004615743565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615599565b611ba8565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615599565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615599565b611c6d565b3480156106b7575f80fd5b506103956106c6366004615599565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155d8565b611ed0565b348015610701575f80fd5b506103c2611fdf565b348015610715575f80fd5b506103c26107243660046157f4565b611ff2565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615599565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615599565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155d8565b6123bb565b348015610891575f80fd5b5061036b6108a03660046155d8565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615599565b6124df565b3480156108f3575f80fd5b506103956109023660046155d8565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461584f565b6125a9565b348015610952575f80fd5b506103c26109613660046155d8565b612988565b348015610971575f80fd5b506103c261098036600461567e565b6129ee565b348015610990575f80fd5b506103c261099f3660046158c3565b612dda565b3480156109af575f80fd5b5061039560ac5481565b3480156109c4575f80fd5b506103c26109d3366004615599565b612f6d565b6103c26109e63660046158f5565b61302a565b3480156109f6575f80fd5b5061039560985481565b348015610a0b575f80fd5b506103c2610a1a366004615599565b61373f565b348015610a2a575f80fd5b506103c2610a393660046155d8565b61391c565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615599565b613a02565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615599565b613a59565b348015610ac8575f80fd5b506103c2610ad73660046155d8565b613b16565b348015610ae7575f80fd5b5061039560a95481565b610af9613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bca565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c4b565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561594a565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261595d565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a02565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061594a565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cfe565b5f8061107f8484613c4b565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a02565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561595d565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d6b565b60a25f6114da60018461595d565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461595d565b81526020019081526020015f205f905560a45f600183611533919061595d565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615970565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cfe565b6117ba8282613e35565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cfe565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae602089018961598b565b613c4b565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a2602052604090205442916119519161594a565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159ec565b6119f9919061594a565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a42919061595d565b90508015611ac0575f611a5683600161594a565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b81615a03565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e35565b5f80611adb8989613c4b565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c8461465a565b5f81815260a26020526040902042600190910155611b90838989614938565b611b9a8a8a611001565b505050505050505050505050565b611bb0613bca565b5f81118015611bc157506099548114155b611c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8d57505f5460ff8083169116105b611d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d545f5460ff1690565b60ff16600214611dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e7657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b611ed8613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fe7613bca565b611ff05f614b12565b565b5f54610100900460ff161580801561201057505f54600160ff909116105b806120295750303b15801561202957505f5460ff166001145b6120b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612111575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612148575073ffffffffffffffffffffffffffffffffffffffff8516155b1561217f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b612204614b88565b61220c614c26565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123c3613bca565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124035750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124e7613bca565b5f811180156124f7575060648111155b8015612505575060a9548114155b61256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c61565b60a85415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61261b613cfe565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c59190615970565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127378686613c4b565b915091505f61274a836001015160c01c90565b5f81815260a1602052604090205490915082146127c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127cc81613a02565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128a99161594a565b1161293d575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261293891839190614cc4565b6123b2565b612948838686614938565b6123b281336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e47565b612990613bca565b60aa80545f9091556129a28282614f2d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c61565b6129f6613bca565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a938484613c4b565b915091505f612aa6836001015160c01c90565b90508015612b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b1c846079015190565b905080612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c00856019015190565b03612c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c93856039015190565b14612cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612de2613bca565b8015612f3b57612df0614ff9565b60a65460ff1615612eed5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e5190849061594a565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f4361507e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f10565b50565b612f75613bca565b5f81118015612f86575060ac548114155b612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611c61565b335f908152609f602052604090205460ff166130a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a8541561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613114613cfe565b60a65460ff1615613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61328a8267ffffffffffffffff16611600565b6132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ca91906159ec565b341015613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161369f91815260200190565b60405180910390a35f609d5460016136b7919061594a565b90505b609e54811161370f578267ffffffffffffffff1681146136fd576099545f82815260a26020526040812060010180549091906136f790849061594a565b90915550505b8061370781615a03565b9150506136ba565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561375f57505f5460ff8083169116105b6137eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b84565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b335f90815260a5602052604081205490819003613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139ae8282614f2d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139f691815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a61613bca565b5f81118015613a7257506098548114155b613ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c61565b613b1e613bca565b73ffffffffffffffffffffffffffffffffffffffff8116613bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f6a81614b12565b60335473ffffffffffffffffffffffffffffffffffffffff163314611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c5885856150d5565b90505f8160ff165f03613c7957613c6f868661515f565b9094509050613cf0565b8160ff16600103613c8e57613c6f86866151e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d76575050565b8082035f5b82811015613e2f57610100818403811115613d9557508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e05575f80fd5b505af1158015613e17573d5f803e3d5ffd5b50505050610100830192505061010081019050613d7b565b50505050565b613e426020830183615a3a565b60ff161580613e605750613e596020830183615a3a565b60ff166001145b613ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fae6118ae602086018661598b565b915091505f613fc1836001015160c01c90565b90505f60a181613fd284600161594a565b81526020019081526020015f205414614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141b1846011015160c01c90565b90505f6141dd6141c76060890160408a01615a5a565b6141d760808a0160608b01615a73565b8461524f565b90506141ef6080880160608901615a73565b6001939093019261ffff1691909101905f80491561420e575f49614230565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961424160208a018a615a3a565b60ff1660010361425057506101015b6040805182810190915296506142758761426d60208c018c615a3a565b60ff16615293565b60c085901b60018801526142a38761429360808c0160608d01615a73565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a013560798901528901356099880152614307876142e860208b018b61598b565b6040516142f6929190615a94565b604051809103902060b99190910152565b60d98701869052600161431d60208b018b615a3a565b60ff161061434f5761434f8761433960608c0160408d01615a5a565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ae5760a7545f90815260a4602052604090206002015460995442916143a19161594a565b6143ab919061595d565b90505b604051806080016040528042815260200182609854426143ce919061594a565b6143d8919061594a565b81526020016143ed60608d0160408e01615a5a565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614485573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144a991906159ec565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061451e90614518908c018c61598b565b5f61529a565b5f61452c60408d018d61598b565b6040518663ffffffff1660e01b815260040161454c959493929190615aea565b602060405180830381865afa158015614567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458b9190615970565b614617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61466c6020840184615a3a565b60ff16146146d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146ee6080840160608501615a73565b61ffff1614614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a001351461483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c00135146148ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148bd6118ae602085018561598b565b9150506148cb8260d9015190565b8114614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061499f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6149ae846001015160c01c90565b90505f6149bc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149eb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aba885160f81c90565b858888866040518663ffffffff1660e01b8152600401614ade959493929190615b6a565b5f6040518083038186803b158015614af4575f80fd5b505afa158015614b06573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06152ee565b5f54610100900460ff16614cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06153ae565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d7991906159ec565b5f86815260a46020526040902060010154909150614d9890829061594a565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614de490849061594a565b9091555050604051614df7908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e6b9084615bc7565b614e759190615bde565b9050614e81818361595d565b60aa5f828254614e91919061594a565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eca90849061594a565b9091555050604051614edd908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f89576040519150601f19603f3d011682016040523d82523d5f602084013e614f8e565b606091505b5050905080614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b615001613cfe565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150543390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61508661544d565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615054565b5f8161513d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061514f5761514f615c16565b919091013560f81c949350505050565b5f8160f98110156151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152848161ffff8716866154b9565b82900390912095945050505050565b8082535050565b60605f808080806152ad888a018a615d30565b95509550955095509550508187106152cb5794506152e79350505050565b8387106152df5782955050505050506152e7565b509293505050505b9392505050565b5f54610100900460ff16615384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff033614b12565b60655460ff16611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154c85750826152e7565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561558f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615556573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061557a91906159ec565b875250602090950194600193840193016154e3565b5093949350505050565b5f602082840312156155a9575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155d3575f80fd5b919050565b5f602082840312156155e8575f80fd5b6152e7826155b0565b5f8083601f840112615601575f80fd5b50813567ffffffffffffffff811115615618575f80fd5b60208301915083602082850101111561562f575f80fd5b9250929050565b5f805f60408486031215615648575f80fd5b833567ffffffffffffffff81111561565e575f80fd5b61566a868287016155f1565b909790965060209590950135949350505050565b5f806020838503121561568f575f80fd5b823567ffffffffffffffff8111156156a5575f80fd5b6156b1858286016155f1565b90969095509350505050565b5f60e082840312156156cd575f80fd5b50919050565b5f606082840312156156cd575f80fd5b5f80604083850312156156f4575f80fd5b823567ffffffffffffffff8082111561570b575f80fd5b615717868387016156bd565b9350602085013591508082111561572c575f80fd5b50615739858286016156d3565b9150509250929050565b5f805f805f8060808789031215615758575f80fd5b863567ffffffffffffffff8082111561576f575f80fd5b61577b8a838b016156bd565b97506020890135915080821115615790575f80fd5b61579c8a838b016156d3565b965060408901359150808211156157b1575f80fd5b6157bd8a838b016155f1565b909650945060608901359150808211156157d5575f80fd5b506157e289828a016155f1565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615809575f80fd5b615812876155b0565b9550615820602088016155b0565b945061582e604088016155b0565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615862575f80fd5b843567ffffffffffffffff80821115615879575f80fd5b615885888389016155f1565b9096509450602087013591508082111561589d575f80fd5b506158aa878288016155f1565b95989497509550505050565b8015158114612f6a575f80fd5b5f602082840312156158d3575f80fd5b81356152e7816158b6565b803567ffffffffffffffff811681146155d3575f80fd5b5f8060408385031215615906575f80fd5b61590f836158de565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156116285761162861591d565b818103818111156116285761162861591d565b5f60208284031215615980575f80fd5b81516152e7816158b6565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159be575f80fd5b83018035915067ffffffffffffffff8211156159d8575f80fd5b60200191503681900382131561562f575f80fd5b5f602082840312156159fc575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a3357615a3361591d565b5060010190565b5f60208284031215615a4a575f80fd5b813560ff811681146152e7575f80fd5b5f60208284031215615a6a575f80fd5b6152e7826158de565b5f60208284031215615a83575f80fd5b813561ffff811681146152e7575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b4157845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615b0f565b50508760408601528481036060860152615b5c818789615aa3565b9a9950505050505050505050565b858152846020820152608060408201525f615b89608083018587615aa3565b90508260608301529695505050505050565b5f82515f5b81811015615bba5760208186018101518583015201615ba0565b505f920191825250919050565b80820281158282048414176116285761162861591d565b5f82615c11577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c7f575f80fd5b8135602067ffffffffffffffff80831115615c9c57615c9c615c43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615cdf57615cdf615c43565b6040529384526020818701810194908101925087851115615cfe575f80fd5b6020870191505b84821015615d2557615d16826155b0565b83529183019190830190615d05565b979650505050505050565b5f805f805f8060c08789031215615d45575f80fd5b86359550602087013567ffffffffffffffff80821115615d63575f80fd5b615d6f8a838b01615c70565b9650604089013595506060890135915080821115615d8b575f80fd5b615d978a838b01615c70565b94506080890135935060a0890135915080821115615db3575f80fd5b50615dc089828a01615c70565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index 905ea7259..f70ff47cc 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -372,6 +372,9 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { // verify consistency between batchDataInput and batchHeader _verifyBatchConsistency(batchDataInput, memPtr); + // Override finalizeTimestamp for ZKP-backed immediate finality + batchDataStore[_batchIndex].finalizeTimestamp = block.timestamp; + // verify proof _verifyProof(memPtr, _batchProof); // finalize batch From fd60e3253a844c13eb90c902bd619136ec833926 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Tue, 6 Jan 2026 15:50:14 +0800 Subject: [PATCH 05/13] fix name --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 122 +++++++++++----------- bindings/bindings/rollup_more.go | 4 +- contracts/contracts/l1/rollup/IRollup.sol | 6 +- contracts/contracts/l1/rollup/Rollup.sol | 26 ++--- contracts/contracts/test/Rollup.t.sol | 6 +- 6 files changed, 83 insertions(+), 83 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index f19a309db..a4fd7fe70 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c2610985366004614804565b612840565b6103c2610998366004614b53565b6128e3565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc366004614804565b612e75565b3480156109dc575f80fd5b506103c26109eb366004614836565b612fe4565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b506103c2610970366004614804565b612840565b6103c2610983366004614b53565b6128e3565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614804565b612e75565b3480156109c7575f80fd5b506103c26109d6366004614836565b612fe4565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 449e6a6f6..d72a017a2 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeirdUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeird\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeird\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeird\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620051893803806200518983398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b60805161502b6200015e5f395f818161062b0152613dff015261502b5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d279c191146109d1578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063cd4edc69116100c2578063cd4edc691461098a578063ce5db8d61461099d578063cf9a6745146109b2575f80fd5b8063bedb86fb14610937578063c5bde70214610956578063c7e25a341461096b575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b5061039560ac5481565b348015610976575f80fd5b506103c2610985366004614804565b612840565b6103c2610998366004614b53565b6128e3565b3480156109a8575f80fd5b5061039560985481565b3480156109bd575f80fd5b506103c26109cc366004614804565b612e75565b3480156109dc575f80fd5b506103c26109eb366004614836565b612fe4565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b02565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620051893803806200518983398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b60805161502b6200015e5f395f818161062b0152613dff015261502b5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b506103c2610970366004614804565b612840565b6103c2610983366004614b53565b6128e3565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614804565b612e75565b3480156109c7575f80fd5b506103c26109d6366004614836565b612fe4565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1115,12 +1115,12 @@ func (_Rollup *RollupCallerSession) RevertReqIndex() (*big.Int, error) { return _Rollup.Contract.RevertReqIndex(&_Rollup.CallOpts) } -// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// RollupDelayPeriod is a free data retrieval call binding the contract method 0xd8dc99d2. // -// Solidity: function rollupDelayPeird() view returns(uint256) -func (_Rollup *RollupCaller) RollupDelayPeird(opts *bind.CallOpts) (*big.Int, error) { +// Solidity: function rollupDelayPeriod() view returns(uint256) +func (_Rollup *RollupCaller) RollupDelayPeriod(opts *bind.CallOpts) (*big.Int, error) { var out []interface{} - err := _Rollup.contract.Call(opts, &out, "rollupDelayPeird") + err := _Rollup.contract.Call(opts, &out, "rollupDelayPeriod") if err != nil { return *new(*big.Int), err @@ -1132,18 +1132,18 @@ func (_Rollup *RollupCaller) RollupDelayPeird(opts *bind.CallOpts) (*big.Int, er } -// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// RollupDelayPeriod is a free data retrieval call binding the contract method 0xd8dc99d2. // -// Solidity: function rollupDelayPeird() view returns(uint256) -func (_Rollup *RollupSession) RollupDelayPeird() (*big.Int, error) { - return _Rollup.Contract.RollupDelayPeird(&_Rollup.CallOpts) +// Solidity: function rollupDelayPeriod() view returns(uint256) +func (_Rollup *RollupSession) RollupDelayPeriod() (*big.Int, error) { + return _Rollup.Contract.RollupDelayPeriod(&_Rollup.CallOpts) } -// RollupDelayPeird is a free data retrieval call binding the contract method 0xc5bde702. +// RollupDelayPeriod is a free data retrieval call binding the contract method 0xd8dc99d2. // -// Solidity: function rollupDelayPeird() view returns(uint256) -func (_Rollup *RollupCallerSession) RollupDelayPeird() (*big.Int, error) { - return _Rollup.Contract.RollupDelayPeird(&_Rollup.CallOpts) +// Solidity: function rollupDelayPeriod() view returns(uint256) +func (_Rollup *RollupCallerSession) RollupDelayPeriod() (*big.Int, error) { + return _Rollup.Contract.RollupDelayPeriod(&_Rollup.CallOpts) } // Verifier is a free data retrieval call binding the contract method 0x2b7ac3f3. @@ -1420,23 +1420,23 @@ func (_Rollup *RollupTransactorSession) Initialize2(_prevStateRoot [32]byte) (*t // Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. // -// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() -func (_Rollup *RollupTransactor) Initialize3(opts *bind.TransactOpts, _rollupDelayPeird *big.Int) (*types.Transaction, error) { - return _Rollup.contract.Transact(opts, "initialize3", _rollupDelayPeird) +// Solidity: function initialize3(uint256 _rollupDelayPeriod) returns() +func (_Rollup *RollupTransactor) Initialize3(opts *bind.TransactOpts, _rollupDelayPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "initialize3", _rollupDelayPeriod) } // Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. // -// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() -func (_Rollup *RollupSession) Initialize3(_rollupDelayPeird *big.Int) (*types.Transaction, error) { - return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeird) +// Solidity: function initialize3(uint256 _rollupDelayPeriod) returns() +func (_Rollup *RollupSession) Initialize3(_rollupDelayPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeriod) } // Initialize3 is a paid mutator transaction binding the contract method 0xcf9a6745. // -// Solidity: function initialize3(uint256 _rollupDelayPeird) returns() -func (_Rollup *RollupTransactorSession) Initialize3(_rollupDelayPeird *big.Int) (*types.Transaction, error) { - return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeird) +// Solidity: function initialize3(uint256 _rollupDelayPeriod) returns() +func (_Rollup *RollupTransactorSession) Initialize3(_rollupDelayPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.Initialize3(&_Rollup.TransactOpts, _rollupDelayPeriod) } // ProveState is a paid mutator transaction binding the contract method 0xb3484425. @@ -1628,25 +1628,25 @@ func (_Rollup *RollupTransactorSession) UpdateRewardPercentage(_newProofRewardPe return _Rollup.Contract.UpdateRewardPercentage(&_Rollup.TransactOpts, _newProofRewardPercent) } -// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// UpdateRollupDelayPeriod is a paid mutator transaction binding the contract method 0xc5553892. // -// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() -func (_Rollup *RollupTransactor) UpdateRollupDelayPeird(opts *bind.TransactOpts, _newPeriod *big.Int) (*types.Transaction, error) { - return _Rollup.contract.Transact(opts, "updateRollupDelayPeird", _newPeriod) +// Solidity: function updateRollupDelayPeriod(uint256 _newPeriod) returns() +func (_Rollup *RollupTransactor) UpdateRollupDelayPeriod(opts *bind.TransactOpts, _newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.contract.Transact(opts, "updateRollupDelayPeriod", _newPeriod) } -// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// UpdateRollupDelayPeriod is a paid mutator transaction binding the contract method 0xc5553892. // -// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() -func (_Rollup *RollupSession) UpdateRollupDelayPeird(_newPeriod *big.Int) (*types.Transaction, error) { - return _Rollup.Contract.UpdateRollupDelayPeird(&_Rollup.TransactOpts, _newPeriod) +// Solidity: function updateRollupDelayPeriod(uint256 _newPeriod) returns() +func (_Rollup *RollupSession) UpdateRollupDelayPeriod(_newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.UpdateRollupDelayPeriod(&_Rollup.TransactOpts, _newPeriod) } -// UpdateRollupDelayPeird is a paid mutator transaction binding the contract method 0xc7e25a34. +// UpdateRollupDelayPeriod is a paid mutator transaction binding the contract method 0xc5553892. // -// Solidity: function updateRollupDelayPeird(uint256 _newPeriod) returns() -func (_Rollup *RollupTransactorSession) UpdateRollupDelayPeird(_newPeriod *big.Int) (*types.Transaction, error) { - return _Rollup.Contract.UpdateRollupDelayPeird(&_Rollup.TransactOpts, _newPeriod) +// Solidity: function updateRollupDelayPeriod(uint256 _newPeriod) returns() +func (_Rollup *RollupTransactorSession) UpdateRollupDelayPeriod(_newPeriod *big.Int) (*types.Transaction, error) { + return _Rollup.Contract.UpdateRollupDelayPeriod(&_Rollup.TransactOpts, _newPeriod) } // UpdateVerifier is a paid mutator transaction binding the contract method 0x97fc007c. @@ -3314,9 +3314,9 @@ func (_Rollup *RollupFilterer) ParseRevertBatchRange(log types.Log) (*RollupReve return event, nil } -// RollupRollupDelayPeirdUpdateIterator is returned from FilterRollupDelayPeirdUpdate and is used to iterate over the raw logs and unpacked data for RollupDelayPeirdUpdate events raised by the Rollup contract. -type RollupRollupDelayPeirdUpdateIterator struct { - Event *RollupRollupDelayPeirdUpdate // Event containing the contract specifics and raw log +// RollupRollupDelayPeriodUpdateIterator is returned from FilterRollupDelayPeriodUpdate and is used to iterate over the raw logs and unpacked data for RollupDelayPeriodUpdate events raised by the Rollup contract. +type RollupRollupDelayPeriodUpdateIterator struct { + Event *RollupRollupDelayPeriodUpdate // Event containing the contract specifics and raw log contract *bind.BoundContract // Generic contract to use for unpacking event data event string // Event name to use for unpacking event data @@ -3330,7 +3330,7 @@ type RollupRollupDelayPeirdUpdateIterator struct { // Next advances the iterator to the subsequent event, returning whether there // are any more events found. In case of a retrieval or parsing error, false is // returned and Error() can be queried for the exact failure. -func (it *RollupRollupDelayPeirdUpdateIterator) Next() bool { +func (it *RollupRollupDelayPeriodUpdateIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -3339,7 +3339,7 @@ func (it *RollupRollupDelayPeirdUpdateIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(RollupRollupDelayPeirdUpdate) + it.Event = new(RollupRollupDelayPeriodUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3354,7 +3354,7 @@ func (it *RollupRollupDelayPeirdUpdateIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(RollupRollupDelayPeirdUpdate) + it.Event = new(RollupRollupDelayPeriodUpdate) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -3370,42 +3370,42 @@ func (it *RollupRollupDelayPeirdUpdateIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *RollupRollupDelayPeirdUpdateIterator) Error() error { +func (it *RollupRollupDelayPeriodUpdateIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *RollupRollupDelayPeirdUpdateIterator) Close() error { +func (it *RollupRollupDelayPeriodUpdateIterator) Close() error { it.sub.Unsubscribe() return nil } -// RollupRollupDelayPeirdUpdate represents a RollupDelayPeirdUpdate event raised by the Rollup contract. -type RollupRollupDelayPeirdUpdate struct { +// RollupRollupDelayPeriodUpdate represents a RollupDelayPeriodUpdate event raised by the Rollup contract. +type RollupRollupDelayPeriodUpdate struct { OldPeriod *big.Int NewPeriod *big.Int Raw types.Log // Blockchain specific contextual infos } -// FilterRollupDelayPeirdUpdate is a free log retrieval operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// FilterRollupDelayPeriodUpdate is a free log retrieval operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. // -// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) FilterRollupDelayPeirdUpdate(opts *bind.FilterOpts) (*RollupRollupDelayPeirdUpdateIterator, error) { +// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) FilterRollupDelayPeriodUpdate(opts *bind.FilterOpts) (*RollupRollupDelayPeriodUpdateIterator, error) { - logs, sub, err := _Rollup.contract.FilterLogs(opts, "RollupDelayPeirdUpdate") + logs, sub, err := _Rollup.contract.FilterLogs(opts, "RollupDelayPeriodUpdate") if err != nil { return nil, err } - return &RollupRollupDelayPeirdUpdateIterator{contract: _Rollup.contract, event: "RollupDelayPeirdUpdate", logs: logs, sub: sub}, nil + return &RollupRollupDelayPeriodUpdateIterator{contract: _Rollup.contract, event: "RollupDelayPeriodUpdate", logs: logs, sub: sub}, nil } -// WatchRollupDelayPeirdUpdate is a free log subscription operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// WatchRollupDelayPeriodUpdate is a free log subscription operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. // -// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) WatchRollupDelayPeirdUpdate(opts *bind.WatchOpts, sink chan<- *RollupRollupDelayPeirdUpdate) (event.Subscription, error) { +// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) WatchRollupDelayPeriodUpdate(opts *bind.WatchOpts, sink chan<- *RollupRollupDelayPeriodUpdate) (event.Subscription, error) { - logs, sub, err := _Rollup.contract.WatchLogs(opts, "RollupDelayPeirdUpdate") + logs, sub, err := _Rollup.contract.WatchLogs(opts, "RollupDelayPeriodUpdate") if err != nil { return nil, err } @@ -3415,8 +3415,8 @@ func (_Rollup *RollupFilterer) WatchRollupDelayPeirdUpdate(opts *bind.WatchOpts, select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(RollupRollupDelayPeirdUpdate) - if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeirdUpdate", log); err != nil { + event := new(RollupRollupDelayPeriodUpdate) + if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeriodUpdate", log); err != nil { return err } event.Raw = log @@ -3437,12 +3437,12 @@ func (_Rollup *RollupFilterer) WatchRollupDelayPeirdUpdate(opts *bind.WatchOpts, }), nil } -// ParseRollupDelayPeirdUpdate is a log parse operation binding the contract event 0xdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e. +// ParseRollupDelayPeriodUpdate is a log parse operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. // -// Solidity: event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) ParseRollupDelayPeirdUpdate(log types.Log) (*RollupRollupDelayPeirdUpdate, error) { - event := new(RollupRollupDelayPeirdUpdate) - if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeirdUpdate", log); err != nil { +// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) ParseRollupDelayPeriodUpdate(log types.Log) (*RollupRollupDelayPeriodUpdate, error) { + event := new(RollupRollupDelayPeriodUpdate) + if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeriodUpdate", log); err != nil { return nil, err } event.Raw = log diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index c3c12919b..3dbc975f7 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -9,11 +9,11 @@ import ( "morph-l2/bindings/solc" ) -const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"rollupDelayPeird\",\"offset\":0,\"slot\":\"172\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1031_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1032_storage\"},\"t_struct(BatchChallenge)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" +const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_array(t_uint256)1030_storage\"},{\"astId\":1003,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_owner\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_address\"},{\"astId\":1004,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1005,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"_paused\",\"offset\":0,\"slot\":\"101\",\"type\":\"t_bool\"},{\"astId\":1006,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"102\",\"type\":\"t_array(t_uint256)1029_storage\"},{\"astId\":1007,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"l1StakingContract\",\"offset\":0,\"slot\":\"151\",\"type\":\"t_address\"},{\"astId\":1008,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizationPeriodSeconds\",\"offset\":0,\"slot\":\"152\",\"type\":\"t_uint256\"},{\"astId\":1009,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofWindow\",\"offset\":0,\"slot\":\"153\",\"type\":\"t_uint256\"},{\"astId\":1010,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"__maxNumTxInChunk\",\"offset\":0,\"slot\":\"154\",\"type\":\"t_uint256\"},{\"astId\":1011,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"messageQueue\",\"offset\":0,\"slot\":\"155\",\"type\":\"t_address\"},{\"astId\":1012,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"verifier\",\"offset\":0,\"slot\":\"156\",\"type\":\"t_address\"},{\"astId\":1013,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastFinalizedBatchIndex\",\"offset\":0,\"slot\":\"157\",\"type\":\"t_uint256\"},{\"astId\":1014,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"lastCommittedBatchIndex\",\"offset\":0,\"slot\":\"158\",\"type\":\"t_uint256\"},{\"astId\":1015,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"isChallenger\",\"offset\":0,\"slot\":\"159\",\"type\":\"t_mapping(t_address,t_bool)\"},{\"astId\":1016,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"finalizedStateRoots\",\"offset\":0,\"slot\":\"160\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1017,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedBatches\",\"offset\":0,\"slot\":\"161\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1018,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchDataStore\",\"offset\":0,\"slot\":\"162\",\"type\":\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\"},{\"astId\":1019,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"withdrawalRoots\",\"offset\":0,\"slot\":\"163\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1020,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"challenges\",\"offset\":0,\"slot\":\"164\",\"type\":\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\"},{\"astId\":1021,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallengeReward\",\"offset\":0,\"slot\":\"165\",\"type\":\"t_mapping(t_address,t_uint256)\"},{\"astId\":1022,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"inChallenge\",\"offset\":0,\"slot\":\"166\",\"type\":\"t_bool\"},{\"astId\":1023,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"batchChallenged\",\"offset\":0,\"slot\":\"167\",\"type\":\"t_uint256\"},{\"astId\":1024,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"revertReqIndex\",\"offset\":0,\"slot\":\"168\",\"type\":\"t_uint256\"},{\"astId\":1025,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proofRewardPercent\",\"offset\":0,\"slot\":\"169\",\"type\":\"t_uint256\"},{\"astId\":1026,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"proveRemaining\",\"offset\":0,\"slot\":\"170\",\"type\":\"t_uint256\"},{\"astId\":1027,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"committedStateRoots\",\"offset\":0,\"slot\":\"171\",\"type\":\"t_mapping(t_uint256,t_bytes32)\"},{\"astId\":1028,\"contract\":\"contracts/l1/rollup/Rollup.sol:Rollup\",\"label\":\"rollupDelayPeriod\",\"offset\":0,\"slot\":\"172\",\"type\":\"t_uint256\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_uint256)1029_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[49]\",\"numberOfBytes\":\"1568\"},\"t_array(t_uint256)1030_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[50]\",\"numberOfBytes\":\"1600\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_bool\"},\"t_mapping(t_address,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_uint256\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_uint256,t_bytes32)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_bytes32\"},\"t_mapping(t_uint256,t_struct(BatchChallenge)1031_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchChallenge)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchChallenge)1031_storage\"},\"t_mapping(t_uint256,t_struct(BatchData)1032_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e struct IRollup.BatchData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_struct(BatchData)1032_storage\"},\"t_struct(BatchChallenge)1031_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchChallenge\",\"numberOfBytes\":\"128\"},\"t_struct(BatchData)1032_storage\":{\"encoding\":\"inplace\",\"label\":\"struct IRollup.BatchData\",\"numberOfBytes\":\"128\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"}}}" var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d279c19111610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d279c19114610a1f578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063cd4edc69116100c2578063cd4edc69146109d8578063ce5db8d6146109eb578063cf9a674514610a00575f80fd5b8063bedb86fb14610985578063c5bde702146109a4578063c7e25a34146109b9575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615599565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155d8565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615636565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615599565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461567e565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615599565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615599565b611600565b3480156104a8575f80fd5b506103956104b7366004615599565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615599565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156e3565b61162e565b6103c26105a6366004615743565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615599565b611ba8565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615599565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615599565b611c6d565b3480156106b7575f80fd5b506103956106c6366004615599565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155d8565b611ed0565b348015610701575f80fd5b506103c2611fdf565b348015610715575f80fd5b506103c26107243660046157f4565b611ff2565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615599565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615599565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155d8565b6123bb565b348015610891575f80fd5b5061036b6108a03660046155d8565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615599565b6124df565b3480156108f3575f80fd5b506103956109023660046155d8565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461584f565b6125a9565b348015610952575f80fd5b506103c26109613660046155d8565b612988565b348015610971575f80fd5b506103c261098036600461567e565b6129ee565b348015610990575f80fd5b506103c261099f3660046158c3565b612dda565b3480156109af575f80fd5b5061039560ac5481565b3480156109c4575f80fd5b506103c26109d3366004615599565b612f6d565b6103c26109e63660046158f5565b61302a565b3480156109f6575f80fd5b5061039560985481565b348015610a0b575f80fd5b506103c2610a1a366004615599565b61373f565b348015610a2a575f80fd5b506103c2610a393660046155d8565b61391c565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615599565b613a02565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615599565b613a59565b348015610ac8575f80fd5b506103c2610ad73660046155d8565b613b16565b348015610ae7575f80fd5b5061039560a95481565b610af9613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bca565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c4b565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561594a565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261595d565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a02565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061594a565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cfe565b5f8061107f8484613c4b565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a02565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561595d565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d6b565b60a25f6114da60018461595d565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461595d565b81526020019081526020015f205f905560a45f600183611533919061595d565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615970565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cfe565b6117ba8282613e35565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cfe565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae602089018961598b565b613c4b565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a2602052604090205442916119519161594a565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159ec565b6119f9919061594a565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a42919061595d565b90508015611ac0575f611a5683600161594a565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b81615a03565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e35565b5f80611adb8989613c4b565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c8461465a565b5f81815260a26020526040902042600190910155611b90838989614938565b611b9a8a8a611001565b505050505050505050505050565b611bb0613bca565b5f81118015611bc157506099548114155b611c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8d57505f5460ff8083169116105b611d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d545f5460ff1690565b60ff16600214611dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e7657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b611ed8613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fe7613bca565b611ff05f614b12565b565b5f54610100900460ff161580801561201057505f54600160ff909116105b806120295750303b15801561202957505f5460ff166001145b6120b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612111575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612148575073ffffffffffffffffffffffffffffffffffffffff8516155b1561217f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b612204614b88565b61220c614c26565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123c3613bca565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124035750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124e7613bca565b5f811180156124f7575060648111155b8015612505575060a9548114155b61256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c61565b60a85415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61261b613cfe565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c59190615970565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127378686613c4b565b915091505f61274a836001015160c01c90565b5f81815260a1602052604090205490915082146127c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127cc81613a02565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128a99161594a565b1161293d575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261293891839190614cc4565b6123b2565b612948838686614938565b6123b281336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e47565b612990613bca565b60aa80545f9091556129a28282614f2d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c61565b6129f6613bca565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a938484613c4b565b915091505f612aa6836001015160c01c90565b90508015612b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b1c846079015190565b905080612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c00856019015190565b03612c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c93856039015190565b14612cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612de2613bca565b8015612f3b57612df0614ff9565b60a65460ff1615612eed5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e5190849061594a565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f4361507e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f10565b50565b612f75613bca565b5f81118015612f86575060ac548114155b612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e9101611c61565b335f908152609f602052604090205460ff166130a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a8541561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613114613cfe565b60a65460ff1615613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61328a8267ffffffffffffffff16611600565b6132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ca91906159ec565b341015613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161369f91815260200190565b60405180910390a35f609d5460016136b7919061594a565b90505b609e54811161370f578267ffffffffffffffff1681146136fd576099545f82815260a26020526040812060010180549091906136f790849061594a565b90915550505b8061370781615a03565b9150506136ba565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561375f57505f5460ff8083169116105b6137eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f696e76616c696420726f6c6c75702064656c61792070656972640000000000006044820152606401610b84565b60ac829055604080515f8152602081018490527fdcdf7e77f4e345e88cfb28ccf69c70050cf4f364da6c6c78a99db6ee93e0022e910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b335f90815260a5602052604081205490819003613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139ae8282614f2d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139f691815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a61613bca565b5f81118015613a7257506098548114155b613ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c61565b613b1e613bca565b73ffffffffffffffffffffffffffffffffffffffff8116613bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f6a81614b12565b60335473ffffffffffffffffffffffffffffffffffffffff163314611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c5885856150d5565b90505f8160ff165f03613c7957613c6f868661515f565b9094509050613cf0565b8160ff16600103613c8e57613c6f86866151e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d76575050565b8082035f5b82811015613e2f57610100818403811115613d9557508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e05575f80fd5b505af1158015613e17573d5f803e3d5ffd5b50505050610100830192505061010081019050613d7b565b50505050565b613e426020830183615a3a565b60ff161580613e605750613e596020830183615a3a565b60ff166001145b613ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fae6118ae602086018661598b565b915091505f613fc1836001015160c01c90565b90505f60a181613fd284600161594a565b81526020019081526020015f205414614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141b1846011015160c01c90565b90505f6141dd6141c76060890160408a01615a5a565b6141d760808a0160608b01615a73565b8461524f565b90506141ef6080880160608901615a73565b6001939093019261ffff1691909101905f80491561420e575f49614230565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961424160208a018a615a3a565b60ff1660010361425057506101015b6040805182810190915296506142758761426d60208c018c615a3a565b60ff16615293565b60c085901b60018801526142a38761429360808c0160608d01615a73565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a013560798901528901356099880152614307876142e860208b018b61598b565b6040516142f6929190615a94565b604051809103902060b99190910152565b60d98701869052600161431d60208b018b615a3a565b60ff161061434f5761434f8761433960608c0160408d01615a5a565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ae5760a7545f90815260a4602052604090206002015460995442916143a19161594a565b6143ab919061595d565b90505b604051806080016040528042815260200182609854426143ce919061594a565b6143d8919061594a565b81526020016143ed60608d0160408e01615a5a565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614485573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144a991906159ec565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061451e90614518908c018c61598b565b5f61529a565b5f61452c60408d018d61598b565b6040518663ffffffff1660e01b815260040161454c959493929190615aea565b602060405180830381865afa158015614567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458b9190615970565b614617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61466c6020840184615a3a565b60ff16146146d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146ee6080840160608501615a73565b61ffff1614614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a001351461483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c00135146148ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148bd6118ae602085018561598b565b9150506148cb8260d9015190565b8114614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061499f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6149ae846001015160c01c90565b90505f6149bc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149eb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aba885160f81c90565b858888866040518663ffffffff1660e01b8152600401614ade959493929190615b6a565b5f6040518083038186803b158015614af4575f80fd5b505afa158015614b06573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06152ee565b5f54610100900460ff16614cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06153ae565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d7991906159ec565b5f86815260a46020526040902060010154909150614d9890829061594a565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614de490849061594a565b9091555050604051614df7908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e6b9084615bc7565b614e759190615bde565b9050614e81818361595d565b60aa5f828254614e91919061594a565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eca90849061594a565b9091555050604051614edd908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f89576040519150601f19603f3d011682016040523d82523d5f602084013e614f8e565b606091505b5050905080614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b615001613cfe565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150543390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61508661544d565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615054565b5f8161513d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061514f5761514f615c16565b919091013560f81c949350505050565b5f8160f98110156151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152848161ffff8716866154b9565b82900390912095945050505050565b8082535050565b60605f808080806152ad888a018a615d30565b95509550955095509550508187106152cb5794506152e79350505050565b8387106152df5782955050505050506152e7565b509293505050505b9392505050565b5f54610100900460ff16615384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff033614b12565b60655460ff16611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154c85750826152e7565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561558f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615556573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061557a91906159ec565b875250602090950194600193840193016154e3565b5093949350505050565b5f602082840312156155a9575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155d3575f80fd5b919050565b5f602082840312156155e8575f80fd5b6152e7826155b0565b5f8083601f840112615601575f80fd5b50813567ffffffffffffffff811115615618575f80fd5b60208301915083602082850101111561562f575f80fd5b9250929050565b5f805f60408486031215615648575f80fd5b833567ffffffffffffffff81111561565e575f80fd5b61566a868287016155f1565b909790965060209590950135949350505050565b5f806020838503121561568f575f80fd5b823567ffffffffffffffff8111156156a5575f80fd5b6156b1858286016155f1565b90969095509350505050565b5f60e082840312156156cd575f80fd5b50919050565b5f606082840312156156cd575f80fd5b5f80604083850312156156f4575f80fd5b823567ffffffffffffffff8082111561570b575f80fd5b615717868387016156bd565b9350602085013591508082111561572c575f80fd5b50615739858286016156d3565b9150509250929050565b5f805f805f8060808789031215615758575f80fd5b863567ffffffffffffffff8082111561576f575f80fd5b61577b8a838b016156bd565b97506020890135915080821115615790575f80fd5b61579c8a838b016156d3565b965060408901359150808211156157b1575f80fd5b6157bd8a838b016155f1565b909650945060608901359150808211156157d5575f80fd5b506157e289828a016155f1565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615809575f80fd5b615812876155b0565b9550615820602088016155b0565b945061582e604088016155b0565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615862575f80fd5b843567ffffffffffffffff80821115615879575f80fd5b615885888389016155f1565b9096509450602087013591508082111561589d575f80fd5b506158aa878288016155f1565b95989497509550505050565b8015158114612f6a575f80fd5b5f602082840312156158d3575f80fd5b81356152e7816158b6565b803567ffffffffffffffff811681146155d3575f80fd5b5f8060408385031215615906575f80fd5b61590f836158de565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156116285761162861591d565b818103818111156116285761162861591d565b5f60208284031215615980575f80fd5b81516152e7816158b6565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159be575f80fd5b83018035915067ffffffffffffffff8211156159d8575f80fd5b60200191503681900382131561562f575f80fd5b5f602082840312156159fc575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a3357615a3361591d565b5060010190565b5f60208284031215615a4a575f80fd5b813560ff811681146152e7575f80fd5b5f60208284031215615a6a575f80fd5b6152e7826158de565b5f60208284031215615a83575f80fd5b813561ffff811681146152e7575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b4157845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615b0f565b50508760408601528481036060860152615b5c818789615aa3565b9a9950505050505050505050565b858152846020820152608060408201525f615b89608083018587615aa3565b90508260608301529695505050505050565b5f82515f5b81811015615bba5760208186018101518583015201615ba0565b505f920191825250919050565b80820281158282048414176116285761162861591d565b5f82615c11577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c7f575f80fd5b8135602067ffffffffffffffff80831115615c9c57615c9c615c43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615cdf57615cdf615c43565b6040529384526020818701810194908101925087851115615cfe575f80fd5b6020870191505b84821015615d2557615d16826155b0565b83529183019190830190615d05565b979650505050505050565b5f805f805f8060c08789031215615d45575f80fd5b86359550602087013567ffffffffffffffff80821115615d63575f80fd5b615d6f8a838b01615c70565b9650604089013595506060890135915080821115615d8b575f80fd5b615d978a838b01615c70565b94506080890135935060a0890135915080821115615db3575f80fd5b50615dc089828a01615c70565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615599565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155d8565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615636565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615599565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461567e565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615599565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615599565b611600565b3480156104a8575f80fd5b506103956104b7366004615599565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615599565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156e3565b61162e565b6103c26105a6366004615743565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615599565b611ba8565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615599565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615599565b611c6d565b3480156106b7575f80fd5b506103956106c6366004615599565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155d8565b611ed0565b348015610701575f80fd5b506103c2611fdf565b348015610715575f80fd5b506103c26107243660046157f4565b611ff2565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615599565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615599565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155d8565b6123bb565b348015610891575f80fd5b5061036b6108a03660046155d8565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615599565b6124df565b3480156108f3575f80fd5b506103956109023660046155d8565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461584f565b6125a9565b348015610952575f80fd5b506103c26109613660046155d8565b612988565b348015610971575f80fd5b506103c261098036600461567e565b6129ee565b348015610990575f80fd5b506103c261099f3660046158c3565b612dda565b3480156109af575f80fd5b506103c26109be366004615599565b612f6d565b6103c26109d13660046158f5565b61302a565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a05366004615599565b61373f565b348015610a15575f80fd5b506103c2610a243660046155d8565b61391c565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615599565b613a02565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615599565b613a59565b348015610ac8575f80fd5b506103c2610ad73660046155d8565b613b16565b348015610ae7575f80fd5b5061039560a95481565b610af9613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bca565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c4b565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561594a565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261595d565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a02565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061594a565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cfe565b5f8061107f8484613c4b565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a02565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561595d565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d6b565b60a25f6114da60018461595d565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461595d565b81526020019081526020015f205f905560a45f600183611533919061595d565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615970565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cfe565b6117ba8282613e35565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cfe565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae602089018961598b565b613c4b565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a2602052604090205442916119519161594a565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159ec565b6119f9919061594a565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a42919061595d565b90508015611ac0575f611a5683600161594a565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b81615a03565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e35565b5f80611adb8989613c4b565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c8461465a565b5f81815260a26020526040902042600190910155611b90838989614938565b611b9a8a8a611001565b505050505050505050505050565b611bb0613bca565b5f81118015611bc157506099548114155b611c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8d57505f5460ff8083169116105b611d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d545f5460ff1690565b60ff16600214611dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e7657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b611ed8613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fe7613bca565b611ff05f614b12565b565b5f54610100900460ff161580801561201057505f54600160ff909116105b806120295750303b15801561202957505f5460ff166001145b6120b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612111575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612148575073ffffffffffffffffffffffffffffffffffffffff8516155b1561217f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b612204614b88565b61220c614c26565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123c3613bca565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124035750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124e7613bca565b5f811180156124f7575060648111155b8015612505575060a9548114155b61256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c61565b60a85415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61261b613cfe565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c59190615970565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127378686613c4b565b915091505f61274a836001015160c01c90565b5f81815260a1602052604090205490915082146127c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127cc81613a02565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128a99161594a565b1161293d575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261293891839190614cc4565b6123b2565b612948838686614938565b6123b281336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e47565b612990613bca565b60aa80545f9091556129a28282614f2d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c61565b6129f6613bca565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a938484613c4b565b915091505f612aa6836001015160c01c90565b90508015612b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b1c846079015190565b905080612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c00856019015190565b03612c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c93856039015190565b14612cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612de2613bca565b8015612f3b57612df0614ff9565b60a65460ff1615612eed5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e5190849061594a565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f4361507e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f10565b50565b612f75613bca565b5f81118015612f86575060ac548114155b612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611c61565b335f908152609f602052604090205460ff166130a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a8541561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613114613cfe565b60a65460ff1615613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61328a8267ffffffffffffffff16611600565b6132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ca91906159ec565b341015613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161369f91815260200190565b60405180910390a35f609d5460016136b7919061594a565b90505b609e54811161370f578267ffffffffffffffff1681146136fd576099545f82815260a26020526040812060010180549091906136f790849061594a565b90915550505b8061370781615a03565b9150506136ba565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561375f57505f5460ff8083169116105b6137eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b335f90815260a5602052604081205490819003613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139ae8282614f2d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139f691815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a61613bca565b5f81118015613a7257506098548114155b613ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c61565b613b1e613bca565b73ffffffffffffffffffffffffffffffffffffffff8116613bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f6a81614b12565b60335473ffffffffffffffffffffffffffffffffffffffff163314611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c5885856150d5565b90505f8160ff165f03613c7957613c6f868661515f565b9094509050613cf0565b8160ff16600103613c8e57613c6f86866151e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d76575050565b8082035f5b82811015613e2f57610100818403811115613d9557508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e05575f80fd5b505af1158015613e17573d5f803e3d5ffd5b50505050610100830192505061010081019050613d7b565b50505050565b613e426020830183615a3a565b60ff161580613e605750613e596020830183615a3a565b60ff166001145b613ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fae6118ae602086018661598b565b915091505f613fc1836001015160c01c90565b90505f60a181613fd284600161594a565b81526020019081526020015f205414614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141b1846011015160c01c90565b90505f6141dd6141c76060890160408a01615a5a565b6141d760808a0160608b01615a73565b8461524f565b90506141ef6080880160608901615a73565b6001939093019261ffff1691909101905f80491561420e575f49614230565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961424160208a018a615a3a565b60ff1660010361425057506101015b6040805182810190915296506142758761426d60208c018c615a3a565b60ff16615293565b60c085901b60018801526142a38761429360808c0160608d01615a73565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a013560798901528901356099880152614307876142e860208b018b61598b565b6040516142f6929190615a94565b604051809103902060b99190910152565b60d98701869052600161431d60208b018b615a3a565b60ff161061434f5761434f8761433960608c0160408d01615a5a565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ae5760a7545f90815260a4602052604090206002015460995442916143a19161594a565b6143ab919061595d565b90505b604051806080016040528042815260200182609854426143ce919061594a565b6143d8919061594a565b81526020016143ed60608d0160408e01615a5a565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614485573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144a991906159ec565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061451e90614518908c018c61598b565b5f61529a565b5f61452c60408d018d61598b565b6040518663ffffffff1660e01b815260040161454c959493929190615aea565b602060405180830381865afa158015614567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458b9190615970565b614617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61466c6020840184615a3a565b60ff16146146d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146ee6080840160608501615a73565b61ffff1614614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a001351461483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c00135146148ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148bd6118ae602085018561598b565b9150506148cb8260d9015190565b8114614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061499f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6149ae846001015160c01c90565b90505f6149bc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149eb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aba885160f81c90565b858888866040518663ffffffff1660e01b8152600401614ade959493929190615b6a565b5f6040518083038186803b158015614af4575f80fd5b505afa158015614b06573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06152ee565b5f54610100900460ff16614cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06153ae565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d7991906159ec565b5f86815260a46020526040902060010154909150614d9890829061594a565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614de490849061594a565b9091555050604051614df7908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e6b9084615bc7565b614e759190615bde565b9050614e81818361595d565b60aa5f828254614e91919061594a565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eca90849061594a565b9091555050604051614edd908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f89576040519150601f19603f3d011682016040523d82523d5f602084013e614f8e565b606091505b5050905080614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b615001613cfe565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150543390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61508661544d565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615054565b5f8161513d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061514f5761514f615c16565b919091013560f81c949350505050565b5f8160f98110156151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152848161ffff8716866154b9565b82900390912095945050505050565b8082535050565b60605f808080806152ad888a018a615d30565b95509550955095509550508187106152cb5794506152e79350505050565b8387106152df5782955050505050506152e7565b509293505050505b9392505050565b5f54610100900460ff16615384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff033614b12565b60655460ff16611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154c85750826152e7565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561558f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615556573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061557a91906159ec565b875250602090950194600193840193016154e3565b5093949350505050565b5f602082840312156155a9575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155d3575f80fd5b919050565b5f602082840312156155e8575f80fd5b6152e7826155b0565b5f8083601f840112615601575f80fd5b50813567ffffffffffffffff811115615618575f80fd5b60208301915083602082850101111561562f575f80fd5b9250929050565b5f805f60408486031215615648575f80fd5b833567ffffffffffffffff81111561565e575f80fd5b61566a868287016155f1565b909790965060209590950135949350505050565b5f806020838503121561568f575f80fd5b823567ffffffffffffffff8111156156a5575f80fd5b6156b1858286016155f1565b90969095509350505050565b5f60e082840312156156cd575f80fd5b50919050565b5f606082840312156156cd575f80fd5b5f80604083850312156156f4575f80fd5b823567ffffffffffffffff8082111561570b575f80fd5b615717868387016156bd565b9350602085013591508082111561572c575f80fd5b50615739858286016156d3565b9150509250929050565b5f805f805f8060808789031215615758575f80fd5b863567ffffffffffffffff8082111561576f575f80fd5b61577b8a838b016156bd565b97506020890135915080821115615790575f80fd5b61579c8a838b016156d3565b965060408901359150808211156157b1575f80fd5b6157bd8a838b016155f1565b909650945060608901359150808211156157d5575f80fd5b506157e289828a016155f1565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615809575f80fd5b615812876155b0565b9550615820602088016155b0565b945061582e604088016155b0565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615862575f80fd5b843567ffffffffffffffff80821115615879575f80fd5b615885888389016155f1565b9096509450602087013591508082111561589d575f80fd5b506158aa878288016155f1565b95989497509550505050565b8015158114612f6a575f80fd5b5f602082840312156158d3575f80fd5b81356152e7816158b6565b803567ffffffffffffffff811681146155d3575f80fd5b5f8060408385031215615906575f80fd5b61590f836158de565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156116285761162861591d565b818103818111156116285761162861591d565b5f60208284031215615980575f80fd5b81516152e7816158b6565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159be575f80fd5b83018035915067ffffffffffffffff8211156159d8575f80fd5b60200191503681900382131561562f575f80fd5b5f602082840312156159fc575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a3357615a3361591d565b5060010190565b5f60208284031215615a4a575f80fd5b813560ff811681146152e7575f80fd5b5f60208284031215615a6a575f80fd5b6152e7826158de565b5f60208284031215615a83575f80fd5b813561ffff811681146152e7575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b4157845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615b0f565b50508760408601528481036060860152615b5c818789615aa3565b9a9950505050505050505050565b858152846020820152608060408201525f615b89608083018587615aa3565b90508260608301529695505050505050565b5f82515f5b81811015615bba5760208186018101518583015201615ba0565b505f920191825250919050565b80820281158282048414176116285761162861591d565b5f82615c11577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c7f575f80fd5b8135602067ffffffffffffffff80831115615c9c57615c9c615c43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615cdf57615cdf615c43565b6040529384526020818701810194908101925087851115615cfe575f80fd5b6020870191505b84821015615d2557615d16826155b0565b83529183019190830190615d05565b979650505050505050565b5f805f805f8060c08789031215615d45575f80fd5b86359550602087013567ffffffffffffffff80821115615d63575f80fd5b615d6f8a838b01615c70565b9650604089013595506060890135915080821115615d8b575f80fd5b615d978a838b01615c70565b94506080890135935060a0890135915080821115615db3575f80fd5b50615dc089828a01615c70565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 5eef0038a..73edfa417 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -127,9 +127,9 @@ interface IRollup { event UpdateProofRewardPercent(uint256 oldPercent, uint256 newPercent); /// @notice Emitted when the rollup delay period is updated. - /// @param oldPeriod The old rollupDelayPeird. - /// @param newPeriod The new rollupDelayPeird. - event RollupDelayPeirdUpdate(uint256 oldPeriod, uint256 newPeriod); + /// @param oldPeriod The old rollupDelayPeriod. + /// @param newPeriod The new rollupDelayPeriod. + event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod); /// @notice Emit when prove remaining claimed. /// @param receiver receiver address. diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index f70ff47cc..bc128d84a 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -100,7 +100,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @notice committedStateRoots mapping(uint256 batchIndex => bytes32 stateRoot) public committedStateRoots; - uint256 public rollupDelayPeird; + uint256 public rollupDelayPeriod; /********************** * Function Modifiers * @@ -185,10 +185,10 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } } - function initialize3(uint256 _rollupDelayPeird) external reinitializer(3) { - require(_rollupDelayPeird != 0, "invalid rollup delay peird"); - rollupDelayPeird = _rollupDelayPeird; - emit RollupDelayPeirdUpdate(0, _rollupDelayPeird); + function initialize3(uint256 _rollupDelayPeriod) external reinitializer(3) { + require(_rollupDelayPeriod != 0, "invalid rollup delay period"); + rollupDelayPeriod = _rollupDelayPeriod; + emit RollupDelayPeriodUpdate(0, _rollupDelayPeriod); } /************************ * Restricted Functions * @@ -345,8 +345,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { // check delay timing - allow if EITHER batch submission OR L1 message processing is stalled // This enables permissionless batch submission when sequencers are offline or censoring - if (batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeird >= block.timestamp && - IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeird >= block.timestamp + if (batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeriod >= block.timestamp && + IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod >= block.timestamp ) { revert InvalidTiming(); } @@ -470,13 +470,13 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { emit UpdateFinalizationPeriodSeconds(_oldFinalizationPeriodSeconds, finalizationPeriodSeconds); } - /// @notice Update rollupDelayPeird. + /// @notice Update rollupDelayPeriod. /// @param _newPeriod New rollup delay period. - function updateRollupDelayPeird(uint256 _newPeriod) external onlyOwner { - require(_newPeriod > 0 && _newPeriod != rollupDelayPeird, "invalid new rollup delay period"); - uint256 _oldRollupDelayPeird = rollupDelayPeird; - rollupDelayPeird = _newPeriod; - emit RollupDelayPeirdUpdate(_oldRollupDelayPeird, rollupDelayPeird); + function updateRollupDelayPeriod(uint256 _newPeriod) external onlyOwner { + require(_newPeriod > 0 && _newPeriod != rollupDelayPeriod, "invalid new rollup delay period"); + uint256 _oldRollupDelayPeriod = rollupDelayPeriod; + rollupDelayPeriod = _newPeriod; + emit RollupDelayPeriodUpdate(_oldRollupDelayPeriod, rollupDelayPeriod); } /// @notice Add an account to the challenger list. diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index e63ba6505..33c89e07c 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -18,7 +18,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { IRollup.BatchSignatureInput public batchSignatureInput; // Slot constants for storage manipulation (from forge inspect Rollup storageLayout) - uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeird + uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeriod uint256 constant FINALIZATION_PERIOD_SLOT = 152; // slot for finalizationPeriodSeconds // ZERO_VERSIONED_HASH constant from Rollup contract @@ -62,7 +62,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { hevm.prank(alice); l1Staking.register{value: STAKING_VALUE}(stakerInfo.tmKey, stakerInfo.blsKey); - // Set rollupDelayPeird (e.g., 1 hour) - no prank needed for hevm.store + // Set rollupDelayPeriod (e.g., 1 hour) - no prank needed for hevm.store hevm.store(address(rollup), bytes32(ROLLUP_DELAY_PERIOD_SLOT), bytes32(uint256(3600))); } @@ -397,7 +397,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { _mockMessageQueueStalled(); _setFinalizationPeriodToZero(); // Allow immediate finality - // Warp time to simulate stall (> rollupDelayPeird) + // Warp time to simulate stall (> rollupDelayPeriod) hevm.warp(block.timestamp + 7200); bytes32 prevStateRoot = bytes32(uint256(1)); From 641830e5988e8c5ee092a3553470cba105719edb Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 15 Jan 2026 14:24:28 +0800 Subject: [PATCH 06/13] fix --- contracts/contracts/l1/rollup/Rollup.sol | 86 +++-------- contracts/contracts/test/Rollup.t.sol | 174 +++++++---------------- 2 files changed, 70 insertions(+), 190 deletions(-) diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index bc128d84a..f3e9fc3ce 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -227,6 +227,12 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput ) external payable override onlyActiveStaker nonReqRevert whenNotPaused { + // check l1msg delay - sequencer must process L1 messages when delayed + if ( + IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod < block.timestamp + ) { + require(batchDataInput.numL1Messages > 0, "l1msg delay"); + } _commitBatchWithBatchData(batchDataInput, batchSignatureInput); } @@ -338,29 +344,19 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { bytes calldata _batchHeader, bytes calldata _batchProof ) external payable nonReqRevert whenNotPaused { - require(!inChallenge, "already in challenge"); - (uint256 _parentBatchPtr, ) = _loadBatchHeader(batchDataInput.parentBatchHeader); - uint256 _parentBatchIndex = BatchHeaderCodecV0.getBatchIndex(_parentBatchPtr); - require(_parentBatchIndex == lastFinalizedBatchIndex, "incorrect batch index"); - // check delay timing - allow if EITHER batch submission OR L1 message processing is stalled // This enables permissionless batch submission when sequencers are offline or censoring - if (batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeriod >= block.timestamp && - IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod >= block.timestamp - ) { - revert InvalidTiming(); + bool rollupDelay = batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeriod < + block.timestamp; + bool l1MsgQueueDelayed = IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + + rollupDelayPeriod < + block.timestamp; + + if (!rollupDelay && l1MsgQueueDelayed) { + require(batchDataInput.numL1Messages > 0, "l1msg delay"); } - // revert batch from the parent batch to the last committed batch - uint256 revertCount = lastCommittedBatchIndex - _parentBatchIndex; - if (revertCount > 0) { - uint256 startBatchIndex = _parentBatchIndex + 1; - for (uint256 i = startBatchIndex; i <= lastCommittedBatchIndex; i++) { - committedBatches[i] = bytes32(0); - } - emit RevertBatchRange(startBatchIndex, revertCount); - } - lastCommittedBatchIndex = _parentBatchIndex; - + require(rollupDelay || l1MsgQueueDelayed, "invalid timing"); + _commitBatchWithBatchData(batchDataInput, batchSignatureInput); // get batch data from batch header @@ -369,16 +365,11 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr); require(committedBatches[_batchIndex] == _batchHash, "incorrect batch hash"); - // verify consistency between batchDataInput and batchHeader - _verifyBatchConsistency(batchDataInput, memPtr); - // Override finalizeTimestamp for ZKP-backed immediate finality batchDataStore[_batchIndex].finalizeTimestamp = block.timestamp; // verify proof _verifyProof(memPtr, _batchProof); - // finalize batch - finalizeBatch(_batchHeader); } /// @inheritdoc IRollup @@ -689,51 +680,6 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } } - /// @dev Internal function to verify consistency between BatchDataInput and batch header. - /// @param batchDataInput The batch data input from the caller. - /// @param memPtr The memory pointer to the loaded batch header. - function _verifyBatchConsistency( - BatchDataInput calldata batchDataInput, - uint256 memPtr - ) private pure { - // verify version - require( - batchDataInput.version == BatchHeaderCodecV0.getVersion(memPtr), - "batch version mismatch" - ); - - // verify number of L1 messages - require( - batchDataInput.numL1Messages == BatchHeaderCodecV0.getL1MessagePopped(memPtr), - "l1 message count mismatch" - ); - - // verify previous state root - require( - batchDataInput.prevStateRoot == BatchHeaderCodecV0.getPrevStateHash(memPtr), - "prev state root mismatch" - ); - - // verify post state root - require( - batchDataInput.postStateRoot == BatchHeaderCodecV0.getPostStateHash(memPtr), - "post state root mismatch" - ); - - // verify withdrawal root - require( - batchDataInput.withdrawalRoot == BatchHeaderCodecV0.getWithdrawRootHash(memPtr), - "withdrawal root mismatch" - ); - - // verify parent batch hash - (, bytes32 _parentBatchHash) = _loadBatchHeader(batchDataInput.parentBatchHeader); - require( - _parentBatchHash == BatchHeaderCodecV0.getParentBatchHash(memPtr), - "parent batch hash mismatch" - ); - } - /// @dev Internal function to verify the zk proof. function _verifyProof(uint256 memPtr, bytes calldata _batchProof) private view { // Check validity of proof diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 33c89e07c..2c015d5fd 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -19,7 +19,6 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { // Slot constants for storage manipulation (from forge inspect Rollup storageLayout) uint256 constant ROLLUP_DELAY_PERIOD_SLOT = 172; // slot for rollupDelayPeriod - uint256 constant FINALIZATION_PERIOD_SLOT = 152; // slot for finalizationPeriodSeconds // ZERO_VERSIONED_HASH constant from Rollup contract bytes32 constant ZERO_VERSIONED_HASH = 0x010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014; @@ -121,12 +120,6 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { ); } - /// @dev Helper to set finalization period to 0 for immediate finality - /// This is needed because commitBatchWithProof commits and finalizes in the same tx - function _setFinalizationPeriodToZero() internal { - hevm.store(address(rollup), bytes32(FINALIZATION_PERIOD_SLOT), bytes32(uint256(0))); - } - /// @dev Helper to mock L1 message queue calls for stalled state function _mockMessageQueueStalled() internal { hevm.mockCall( @@ -141,50 +134,6 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { ); } - /// @notice Test: commitBatchWithProof reverts when parent batch index is not finalized - function test_commitBatchWithProof_reverts_when_parentBatchIndex_not_finalized() public { - // First commit batch 1 normally to create a non-finalized batch - IRollup.BatchDataInput memory batchDataInput1 = IRollup.BatchDataInput({ - version: 0, - parentBatchHeader: batchHeader0, - lastBlockNumber: 1, - numL1Messages: 0, - prevStateRoot: bytes32(uint256(1)), - postStateRoot: bytes32(uint256(2)), - withdrawalRoot: getTreeRoot() - }); - - hevm.prank(alice); - rollup.commitBatch(batchDataInput1, batchSignatureInput); - - // Now batch 1 is committed but not finalized - // Create a batch header for batch 1 to use as parent - bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, bytes32(uint256(1)), bytes32(uint256(2)), getTreeRoot()); - - // Try to use batch 1 as parent in commitBatchWithProof - // This should fail because lastFinalizedBatchIndex is still 0, but parent is batch 1 - IRollup.BatchDataInput memory batchDataInput2 = IRollup.BatchDataInput({ - version: 0, - parentBatchHeader: batchHeader1, - lastBlockNumber: 2, - numL1Messages: 0, - prevStateRoot: bytes32(uint256(2)), - postStateRoot: bytes32(uint256(3)), - withdrawalRoot: getTreeRoot() - }); - - bytes memory batchHeader2 = new bytes(BatchHeaderCodecV0.BATCH_HEADER_LENGTH); - - hevm.prank(alice); - hevm.expectRevert("incorrect batch index"); - rollup.commitBatchWithProof( - batchDataInput2, - batchSignatureInput, - batchHeader2, - bytes("") - ); - } - /// @notice Test: commitBatchWithProof reverts when timing requirements not met function test_commitBatchWithProof_reverts_when_timing_not_met() public { // Mock message queue to return a recent timestamp (not stalled) @@ -208,7 +157,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { // Don't warp time - both conditions should fail: batch not stalled and L1 messages not stalled hevm.prank(alice); - hevm.expectRevert(IRollup.InvalidTiming.selector); + hevm.expectRevert("invalid timing"); rollup.commitBatchWithProof( batchDataInput, batchSignatureInput, @@ -395,7 +344,6 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { function test_commitBatchWithProof_succeeds_when_stalled() public { _mockVerifierCall(); _mockMessageQueueStalled(); - _setFinalizationPeriodToZero(); // Allow immediate finality // Warp time to simulate stall (> rollupDelayPeriod) hevm.warp(block.timestamp + 7200); @@ -424,18 +372,17 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { hex"deadbeef" // Non-empty proof required ); - // Verify batch was committed and finalized + // Verify batch was committed (finalization happens separately via finalizeBatch) assertEq(rollup.lastCommittedBatchIndex(), 1); - assertEq(rollup.lastFinalizedBatchIndex(), 1); - assertEq(rollup.finalizedStateRoots(1), postStateRoot); - assertTrue(rollup.withdrawalRoots(withdrawalRoot)); + // finalizeTimestamp is set to block.timestamp, allowing immediate finalization + // but lastFinalizedBatchIndex is not updated until finalizeBatch is called + assertEq(rollup.lastFinalizedBatchIndex(), 0); } - /// @notice Test: commitBatchWithProof emits CommitBatch and FinalizeBatch events + /// @notice Test: commitBatchWithProof emits CommitBatch event function test_commitBatchWithProof_emits_events() public { _mockVerifierCall(); _mockMessageQueueStalled(); - _setFinalizationPeriodToZero(); hevm.warp(block.timestamp + 7200); bytes32 prevStateRoot = bytes32(uint256(1)); @@ -467,37 +414,16 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { ); } - /// @notice Test: commitBatchWithProof emits RevertBatchRange when reverting uncommitted batches - function test_commitBatchWithProof_reverts_and_emits_RevertBatchRange() public { - // First commit batch 1 normally - IRollup.BatchDataInput memory batchDataInput1 = IRollup.BatchDataInput({ - version: 0, - parentBatchHeader: batchHeader0, - lastBlockNumber: 1, - numL1Messages: 0, - prevStateRoot: bytes32(uint256(1)), - postStateRoot: bytes32(uint256(2)), - withdrawalRoot: getTreeRoot() - }); - - hevm.prank(alice); - rollup.commitBatch(batchDataInput1, batchSignatureInput); - - assertEq(rollup.lastCommittedBatchIndex(), 1); - assertTrue(rollup.committedBatches(1) != bytes32(0)); - - // Setup mocks for commitBatchWithProof - _mockVerifierCall(); + /// @notice Test: commitBatchWithProof calls verifier with proof + function test_commitBatchWithProof_calls_verifier() public { _mockMessageQueueStalled(); - _setFinalizationPeriodToZero(); hevm.warp(block.timestamp + 7200); - // Use same state roots - this will revert batch 1 and commit a new batch 1 with same data bytes32 prevStateRoot = bytes32(uint256(1)); bytes32 postStateRoot = bytes32(uint256(2)); bytes32 withdrawalRoot = getTreeRoot(); - IRollup.BatchDataInput memory newBatchDataInput = IRollup.BatchDataInput({ + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ version: 0, parentBatchHeader: batchHeader0, lastBlockNumber: 1, @@ -507,28 +433,28 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { withdrawalRoot: withdrawalRoot }); - bytes memory newBatchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + bytes memory mockProof = hex"deadbeef"; - // Expect RevertBatchRange event: revert 1 batch (batch 1) - hevm.expectEmit(true, false, false, true); - emit IRollup.RevertBatchRange(1, 1); + // Mock the verifier - it should be called with the proof + _mockVerifierCall(); hevm.prank(alice); rollup.commitBatchWithProof( - newBatchDataInput, + batchDataInput, batchSignatureInput, - newBatchHeader1, - hex"deadbeef" // Non-empty proof required + batchHeader1, + mockProof ); - // Verify batch was finalized - assertEq(rollup.lastFinalizedBatchIndex(), 1); + // Verify batch was committed and proof verification passed + assertEq(rollup.lastCommittedBatchIndex(), 1); } - /// @notice Test: commitBatchWithProof calls verifier with proof - function test_commitBatchWithProof_calls_verifier() public { + /// @notice Test: commitBatchWithProof sets finalizeTimestamp for immediate finalization + function test_commitBatchWithProof_sets_finalizeTimestamp() public { + _mockVerifierCall(); _mockMessageQueueStalled(); - _setFinalizationPeriodToZero(); hevm.warp(block.timestamp + 7200); bytes32 prevStateRoot = bytes32(uint256(1)); @@ -545,35 +471,46 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { withdrawalRoot: withdrawalRoot }); + // Create batch header with matching data bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); - bytes memory mockProof = hex"deadbeef"; - - // Mock the verifier - it should be called with the proof - _mockVerifierCall(); - hevm.mockCall( - address(l1MessageQueueWithGasPriceOracle), - abi.encodeWithSignature("popCrossDomainMessage(uint256,uint256)"), - abi.encode() - ); hevm.prank(alice); rollup.commitBatchWithProof( batchDataInput, batchSignatureInput, batchHeader1, - mockProof + hex"deadbeef" // Non-empty proof required ); - // Verify batch was finalized (proof verification passed) - assertEq(rollup.lastFinalizedBatchIndex(), 1); + // Verify batch was committed + assertEq(rollup.lastCommittedBatchIndex(), 1); + // finalizeTimestamp is set to block.timestamp, so batch can be finalized immediately + assertFalse(rollup.batchInsideChallengeWindow(1)); } - /// @notice Test: commitBatchWithProof verifies batch consistency - function test_commitBatchWithProof_verifies_consistency() public { - _mockVerifierCall(); - _mockMessageQueueStalled(); - _setFinalizationPeriodToZero(); - hevm.warp(block.timestamp + 7200); + /// @notice Test: commitBatchWithProof reverts when L1 message delayed but no L1 messages provided + function test_commitBatchWithProof_reverts_when_l1msg_delayed_no_messages() public { + // To trigger "l1msg delay" error, we need: + // 1. rollupDelay = false: originTs + period >= block.timestamp + // 2. l1MsgQueueDelayed = true: enqueueTime + period < block.timestamp + // 3. numL1Messages = 0 + // + // Genesis batch originTimestamp ≈ 1 (from setUp) + // rollupDelayPeriod = 3600 + // + // Setup: enqueueTime = 0, block.timestamp = 3601 + // - rollupDelay = 1 + 3600 < 3601 => 3601 < 3601 => false ✓ + // - l1MsgQueueDelayed = 0 + 3600 < 3601 => 3600 < 3601 => true ✓ + + // Mock L1 message enqueue time to 0 (older than genesis) + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), + abi.encode(0) + ); + + // Warp to exactly 3601 to trigger the condition + hevm.warp(3601); bytes32 prevStateRoot = bytes32(uint256(1)); bytes32 postStateRoot = bytes32(uint256(2)); @@ -583,26 +520,23 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { version: 0, parentBatchHeader: batchHeader0, lastBlockNumber: 1, - numL1Messages: 0, + numL1Messages: 0, // No L1 messages! prevStateRoot: prevStateRoot, postStateRoot: postStateRoot, withdrawalRoot: withdrawalRoot }); - // Create batch header with matching data bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + // Should revert because L1 messages are delayed but no L1 messages provided hevm.prank(alice); + hevm.expectRevert("l1msg delay"); rollup.commitBatchWithProof( batchDataInput, batchSignatureInput, batchHeader1, - hex"deadbeef" // Non-empty proof required + hex"deadbeef" ); - - // Verify the consistency check passed and batch was finalized - assertEq(rollup.lastFinalizedBatchIndex(), 1); - assertEq(rollup.finalizedStateRoots(1), postStateRoot); } } From 7fb5bf8a8efa118a37989b9080452b668bd7935c Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 15 Jan 2026 14:31:42 +0800 Subject: [PATCH 07/13] update --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 2 +- bindings/bindings/rollup_more.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index a4fd7fe70..fa85d6663 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b506103c2610970366004614804565b612840565b6103c2610983366004614b53565b6128e3565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614804565b612e75565b3480156109c7575f80fd5b506103c26109d6366004614836565b612fe4565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046145cf565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614601565b610a96565b005b3480156103cf575f80fd5b506103c26103de36600461465f565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046145cf565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146a7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046145cf565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046145cf565b61137e565b3480156104a8575f80fd5b506103956104b73660046145cf565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046145cf565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461470c565b6113ac565b6103c261057f36600461476c565b6115e8565b34801561058f575f80fd5b506103c261059e3660046145cf565b611866565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046145cf565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046145cf565b611911565b348015610690575f80fd5b5061039561069f3660046145cf565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614601565b611aec565b3480156106da575f80fd5b506103c2611ba9565b3480156106ee575f80fd5b506103c26106fd36600461481d565b611bbc565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046145cf565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046145cf565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614601565b611ec5565b348015610843575f80fd5b5061036b610852366004614601565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046145cf565b611fa8565b3480156108a5575f80fd5b506103956108b4366004614601565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614878565b612058565b348015610904575f80fd5b506103c2610913366004614601565b61235c565b348015610923575f80fd5b506103c26109323660046146a7565b6123b5565b348015610942575f80fd5b506103c26109513660046148ec565b612705565b348015610961575f80fd5b506103c26109703660046145cf565b612843565b6103c261098336600461491e565b6128e6565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b73660046145cf565b612e78565b3480156109c7575f80fd5b506103c26109d6366004614601565b612fe7565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046145cf565b6130a6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046145cf565b6130f0565b348015610a6d575f80fd5b506103c2610a7c366004614601565b613193565b348015610a8c575f80fd5b5061039560a95481565b610a9e613220565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613220565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb858561327a565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614973565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614986565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614973565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613313565b5f80610f08848461327a565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614986565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613366565b60a25f611275600184614986565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614986565b81526020019081526020015f205f905560a45f6001836112ce9190614986565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614999565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613313565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156891906149b4565b6115729190614973565b10156115da575f61158960808401606085016149cb565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613423565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613313565b60ac54609e545f90815260a26020526040812054909142916116629190614973565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de91906149b4565b6116e89190614973565b109050811580156116f65750805b1561175d575f61170c60808a0160608b016149cb565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613423565b5f806117c8888861327a565b915091505f6117db836001015160c01c90565b5f81815260a16020526040902054909150821461183a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a26020526040902042600190910155611859838888613b56565b5050505050505050505050565b61186e613220565b5f8111801561187f57506099548114155b6118cb5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561193157505f5460ff8083169116105b6119a35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119c15f5460ff1690565b60ff16600214611a135760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a865760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aaf57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b611af4613220565b6001600160a01b0381165f908152609f602052604090205460ff16611b5b5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bb1613220565b611bba5f613d09565b565b5f54610100900460ff1615808015611bda57505f54600160ff909116105b80611bf35750303b158015611bf357505f5460ff166001145b611c655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c86575f805461ff0019166101001790555b6001600160a01b0386161580611ca357506001600160a01b038516155b15611cda576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d305760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d38613d72565b611d40613df6565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ebc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611ecd613220565b6001600160a01b03811615801590611ef35750609c546001600160a01b03828116911614155b611f3f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fb0613220565b5f81118015611fc0575060648111155b8015611fce575060a9548114155b61201a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611905565b60a854156120a85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120b0613313565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561211c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121409190614999565b61218c5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f80612198868661327a565b915091505f6121ab836001015160c01c90565b5f81815260a16020526040902054909150821461220a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612213816130a6565b61225f5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229b91614973565b11612311575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261230c91839190613e7a565b611ebc565b61231c838686613b56565b611ebc81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613fd6565b612364613220565b60aa80545f90915561237682826140a2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611905565b6123bd613220565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124345760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f80612440848461327a565b915091505f612453836001015160c01c90565b905080156124a35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124af846079015190565b9050806124fe5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125535760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255f856019015190565b036125ac5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d8856039015190565b146126255760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270d613220565b80156128115761271b61414c565b60a65460ff16156127d05760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276f908490614973565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128196141a6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f3565b50565b61284b613220565b5f8111801561285c575060ac548114155b6128a85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611905565b335f908152609f602052604090205460ff166129445760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129945760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61299c613313565b60a65460ff16156129ef5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a4a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612ab15760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac48267ffffffffffffffff1661137e565b612b105760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b8b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c1b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8f91906149b4565b341015612cde5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df691815260200190565b60405180910390a35f609d546001612e0e9190614973565b90505b609e548111612e66578267ffffffffffffffff168114612e54576099545f82815260a2602052604081206001018054909190612e4e908490614973565b90915550505b80612e5e816149ec565b915050612e11565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9857505f5460ff8083169116105b612f0a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f6c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b335f90815260a56020526040812054908190036130465760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305f82826140a2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309a91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f8613220565b5f8111801561310957506098548114155b6131555760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611905565b61319b613220565b6001600160a01b0381166132175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61284081613d09565b6033546001600160a01b03163314611bba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f61328785856141df565b90505f8160ff165f036132a85761329e868661424f565b9094509050613305565b8160ff166001036132bd5761329e86866142b8565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f03613371575050565b8082035f5b8281101561341d5761010081840381111561339057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f3575f80fd5b505af1158015613405573d5f803e3d5ffd5b50505050610100830192505061010081019050613376565b50505050565b6134306020830183614a23565b60ff16158061344e57506134476020830183614a23565b60ff166001145b61349a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134eb5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561353c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061355361354e6020860186614a43565b61327a565b915091505f613566836001015160c01c90565b90505f60a181613577846001614973565b81526020019081526020015f2054146135d25760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136235760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461367f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136ee846011015160c01c90565b90505f61371a6137046060890160408a01614aa4565b61371460808a0160608b016149cb565b8461430b565b905061372c60808801606089016149cb565b6001939093019261ffff1691909101905f80491561374b575f4961376d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377e60208a018a614a23565b60ff1660010361378d57506101015b6040805182810190915296506137b2876137aa60208c018c614a23565b60ff1661434f565b60c085901b60018801526137e0876137d060808c0160608d016149cb565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138448761382560208b018b614a43565b604051613833929190614abd565b604051809103902060b99190910152565b60d98701869052600161385a60208b018b614a23565b60ff161061388c5761388c8761387660608c0160408d01614aa4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138eb5760a7545f90815260a4602052604090206002015460995442916138de91614973565b6138e89190614986565b90505b6040518060800160405280428152602001826098544261390b9190614973565b6139159190614973565b815260200161392a60608d0160408e01614aa4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cc91906149b4565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a3490613a2e908c018c614a43565b5f614356565b5f613a4260408d018d614a43565b6040518663ffffffff1660e01b8152600401613a62959493929190614b13565b602060405180830381865afa158015613a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa19190614999565b613b135760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613ba35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613bb2846001015160c01c90565b90505f613bc0856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613bef876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613cb1885160f81c90565b858888866040518663ffffffff1660e01b8152600401613cd5959493929190614b86565b5f6040518083038186803b158015613ceb575f80fd5b505afa158015613cfd573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613dee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba6143aa565b5f54610100900460ff16613e725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba614432565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f2291906149b4565b5f86815260a46020526040902060010154909150613f41908290614973565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613f80908490614973565b9091555050604051613f93908490614bb7565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490613ffa9084614be3565b6140049190614bfa565b90506140108183614986565b60aa5f8282546140209190614973565b90915550506001600160a01b0384165f90815260a560205260408120805483929061404c908490614973565b909155505060405161405f908490614bb7565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146140f1576040519150601f19603f3d011682016040523d82523d5f602084013e6140f6565b606091505b50509050806141475760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b614154613313565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141893390565b6040516001600160a01b03909116815260200160405180910390a1565b6141ae6144b7565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614189565b5f8161422d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061423f5761423f614c32565b919091013560f81c949350505050565b5f8160f98110156142a25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142a25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143408161ffff871686614509565b82900390912095945050505050565b8082535050565b60605f80808080614369888a018a614d4c565b95509550955095509550508187106143875794506143a39350505050565b83871061439b5782955050505050506143a3565b509293505050505b9392505050565b5f54610100900460ff166144265760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144ae5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba33613d09565b60655460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145185750826143a3565b609b546001600160a01b03165f5b848110156145c5576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa15801561458c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b091906149b4565b87525060209095019460019384019301614526565b5093949350505050565b5f602082840312156145df575f80fd5b5035919050565b80356001600160a01b03811681146145fc575f80fd5b919050565b5f60208284031215614611575f80fd5b6143a3826145e6565b5f8083601f84011261462a575f80fd5b50813567ffffffffffffffff811115614641575f80fd5b602083019150836020828501011115614658575f80fd5b9250929050565b5f805f60408486031215614671575f80fd5b833567ffffffffffffffff811115614687575f80fd5b6146938682870161461a565b909790965060209590950135949350505050565b5f80602083850312156146b8575f80fd5b823567ffffffffffffffff8111156146ce575f80fd5b6146da8582860161461a565b90969095509350505050565b5f60e082840312156146f6575f80fd5b50919050565b5f606082840312156146f6575f80fd5b5f806040838503121561471d575f80fd5b823567ffffffffffffffff80821115614734575f80fd5b614740868387016146e6565b93506020850135915080821115614755575f80fd5b50614762858286016146fc565b9150509250929050565b5f805f805f8060808789031215614781575f80fd5b863567ffffffffffffffff80821115614798575f80fd5b6147a48a838b016146e6565b975060208901359150808211156147b9575f80fd5b6147c58a838b016146fc565b965060408901359150808211156147da575f80fd5b6147e68a838b0161461a565b909650945060608901359150808211156147fe575f80fd5b5061480b89828a0161461a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614832575f80fd5b61483b876145e6565b9550614849602088016145e6565b9450614857604088016145e6565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561488b575f80fd5b843567ffffffffffffffff808211156148a2575f80fd5b6148ae8883890161461a565b909650945060208701359150808211156148c6575f80fd5b506148d38782880161461a565b95989497509550505050565b8015158114612840575f80fd5b5f602082840312156148fc575f80fd5b81356143a3816148df565b803567ffffffffffffffff811681146145fc575f80fd5b5f806040838503121561492f575f80fd5b61493883614907565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614946565b818103818111156113a6576113a6614946565b5f602082840312156149a9575f80fd5b81516143a3816148df565b5f602082840312156149c4575f80fd5b5051919050565b5f602082840312156149db575f80fd5b813561ffff811681146143a3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a1c57614a1c614946565b5060010190565b5f60208284031215614a33575f80fd5b813560ff811681146143a3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614a76575f80fd5b83018035915067ffffffffffffffff821115614a90575f80fd5b602001915036819003821315614658575f80fd5b5f60208284031215614ab4575f80fd5b6143a382614907565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614b5d5784516001600160a01b031683529383019391830191600101614b38565b50508760408601528481036060860152614b78818789614acc565b9a9950505050505050505050565b858152846020820152608060408201525f614ba5608083018587614acc565b90508260608301529695505050505050565b5f82515f5b81811015614bd65760208186018101518583015201614bbc565b505f920191825250919050565b80820281158282048414176113a6576113a6614946565b5f82614c2d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614c9b575f80fd5b8135602067ffffffffffffffff80831115614cb857614cb8614c5f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614cfb57614cfb614c5f565b6040529384526020818701810194908101925087851115614d1a575f80fd5b6020870191505b84821015614d4157614d32826145e6565b83529183019190830190614d21565b979650505050505050565b5f805f805f8060c08789031215614d61575f80fd5b86359550602087013567ffffffffffffffff80821115614d7f575f80fd5b614d8b8a838b01614c8c565b9650604089013595506060890135915080821115614da7575f80fd5b614db38a838b01614c8c565b94506080890135935060a0890135915080821115614dcf575f80fd5b50614ddc89828a01614c8c565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index d72a017a2..822ffd852 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -50,7 +50,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b50604051620051893803806200518983398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b60805161502b6200015e5f395f818161062b0152613dff015261502b5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614804565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614836565b610a96565b005b3480156103cf575f80fd5b506103c26103de366004614894565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614804565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046148dc565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614804565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614804565b61137e565b3480156104a8575f80fd5b506103956104b7366004614804565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614804565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614941565b6113ac565b6103c261057f3660046149a1565b6114ee565b34801561058f575f80fd5b506103c261059e366004614804565b611863565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614804565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614804565b61190e565b348015610690575f80fd5b5061039561069f366004614804565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614836565b611ae9565b3480156106da575f80fd5b506103c2611ba6565b3480156106ee575f80fd5b506103c26106fd366004614a52565b611bb9565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614804565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614804565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614836565b611ec2565b348015610843575f80fd5b5061036b610852366004614836565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614804565b611fa5565b3480156108a5575f80fd5b506103956108b4366004614836565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614aad565b612055565b348015610904575f80fd5b506103c2610913366004614836565b612359565b348015610923575f80fd5b506103c26109323660046148dc565b6123b2565b348015610942575f80fd5b506103c2610951366004614b21565b612702565b348015610961575f80fd5b506103c2610970366004614804565b612840565b6103c2610983366004614b53565b6128e3565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614804565b612e75565b3480156109c7575f80fd5b506103c26109d6366004614836565b612fe4565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614804565b6130a3565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614804565b6130ed565b348015610a6d575f80fd5b506103c2610a7c366004614836565b613190565b348015610a8c575f80fd5b5061039560a95481565b610a9e61321d565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7061321d565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613277565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614ba8565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614bbb565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a3565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614ba8565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613310565b5f80610f088484613277565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a3565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614bbb565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613363565b60a25f611275600184614bbb565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614bbb565b81526020019081526020015f205f905560a45f6001836112ce9190614bbb565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614bce565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613310565b6114ea8282613420565b5050565b60a8541561153e5760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611546613310565b60a65460ff16156115995760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b5f6115af6115aa6020890189614be9565b613277565b5090505f6115c1826001015160c01c90565b9050609d5481146116145760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b60ac54609e545f90815260a26020526040902054429161163391614ba8565b101580156116d1575060ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa1580156116a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c49190614c4a565b6116ce9190614ba8565b10155b15611708576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e546117179190614bbb565b90508015611795575f61172b836001614ba8565b9050805b609e548111611758575f81815260a160205260408120558061175081614c61565b91505061172f565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d8360405161178b91815260200190565b60405180910390a2505b609e8290556117a48989613420565b5f806117b08989613277565b915091505f6117c3836001015160c01c90565b5f81815260a1602052604090205490915082146118225760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b61182c8c84613b4e565b5f81815260a2602052604090204260019091015561184b838989613d90565b6118558a8a610ea4565b505050505050505050505050565b61186b61321d565b5f8111801561187c57506099548114155b6118c85760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561192e57505f5460ff8083169116105b6119a05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119be5f5460ff1690565b60ff16600214611a105760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a835760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aac57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b611af161321d565b6001600160a01b0381165f908152609f602052604090205460ff16611b585760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bae61321d565b611bb75f613f43565b565b5f54610100900460ff1615808015611bd757505f54600160ff909116105b80611bf05750303b158015611bf057505f5460ff166001145b611c625760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c83575f805461ff0019166101001790555b6001600160a01b0386161580611ca057506001600160a01b038516155b15611cd7576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d2d5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d35613fac565b611d3d614030565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611eb9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611eca61321d565b6001600160a01b03811615801590611ef05750609c546001600160a01b03828116911614155b611f3c5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fad61321d565b5f81118015611fbd575060648111155b8015611fcb575060a9548114155b6120175760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611902565b60a854156120a55760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120ad613310565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612119573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213d9190614bce565b6121895760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121958686613277565b915091505f6121a8836001015160c01c90565b5f81815260a1602052604090205490915082146122075760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612210816130a3565b61225c5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229891614ba8565b1161230e575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612309918391906140b4565b611eb9565b612319838686613d90565b611eb981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614210565b61236161321d565b60aa80545f90915561237382826142dc565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611902565b6123ba61321d565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124315760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061243d8484613277565b915091505f612450836001015160c01c90565b905080156124a05760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ac846079015190565b9050806124fb5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125505760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255c856019015190565b036125a95760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d5856039015190565b146126225760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270a61321d565b801561280e57612718614381565b60a65460ff16156127cd5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276c908490614ba8565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128166143db565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f0565b50565b61284861321d565b5f81118015612859575060ac548114155b6128a55760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611902565b335f908152609f602052604090205460ff166129415760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129915760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612999613310565b60a65460ff16156129ec5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a475760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612aae5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac18267ffffffffffffffff1661137e565b612b0d5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b885760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c185760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614c4a565b341015612cdb5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df391815260200190565b60405180910390a35f609d546001612e0b9190614ba8565b90505b609e548111612e63578267ffffffffffffffff168114612e51576099545f82815260a2602052604081206001018054909190612e4b908490614ba8565b90915550505b80612e5b81614c61565b915050612e0e565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9557505f5460ff8083169116105b612f075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f695760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611902565b335f90815260a56020526040812054908190036130435760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305c82826142dc565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f561321d565b5f8111801561310657506098548114155b6131525760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611902565b61319861321d565b6001600160a01b0381166132145760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61283d81613f43565b6033546001600160a01b03163314611bb75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132848585614414565b90505f8160ff165f036132a55761329b8686614484565b9094509050613302565b8160ff166001036132ba5761329b86866144ed565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bb75760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361336e575050565b8082035f5b8281101561341a5761010081840381111561338d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f0575f80fd5b505af1158015613402573d5f803e3d5ffd5b50505050610100830192505061010081019050613373565b50505050565b61342d6020830183614c98565b60ff16158061344b57506134446020830183614c98565b60ff166001145b6134975760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134e85760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135395760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061354b6115aa6020860186614be9565b915091505f61355e836001015160c01c90565b90505f60a18161356f846001614ba8565b81526020019081526020015f2054146135ca5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e54811461361b5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136775760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136d75760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136e6846011015160c01c90565b90505f6137126136fc6060890160408a01614cb8565b61370c60808a0160608b01614cd1565b84614540565b90506137246080880160608901614cd1565b6001939093019261ffff1691909101905f804915613743575f49613765565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377660208a018a614c98565b60ff1660010361378557506101015b6040805182810190915296506137aa876137a260208c018c614c98565b60ff16614584565b60c085901b60018801526137d8876137c860808c0160608d01614cd1565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a01356079890152890135609988015261383c8761381d60208b018b614be9565b60405161382b929190614cf2565b604051809103902060b99190910152565b60d98701869052600161385260208b018b614c98565b60ff1610613884576138848761386e60608c0160408d01614cb8565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138e35760a7545f90815260a4602052604090206002015460995442916138d691614ba8565b6138e09190614bbb565b90505b604051806080016040528042815260200182609854426139039190614ba8565b61390d9190614ba8565b815260200161392260608d0160408e01614cb8565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c49190614c4a565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a2c90613a26908c018c614be9565b5f61458b565b5f613a3a60408d018d614be9565b6040518663ffffffff1660e01b8152600401613a5a959493929190614d48565b602060405180830381865afa158015613a75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a999190614bce565b613b0b5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c613b606020840184614c98565b60ff1614613bb05760405162461bcd60e51b815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b02565b600981015160c01c613bc86080840160608501614cd1565b61ffff1614613c195760405162461bcd60e51b815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b02565b6059810151826080013514613c705760405162461bcd60e51b815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60798101518260a0013514613cc75760405162461bcd60e51b815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b02565b60998101518260c0013514613d1e5760405162461bcd60e51b815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b02565b5f613d2f6115aa6020850185614be9565b915050613d3d8260d9015190565b8114613d8b5760405162461bcd60e51b815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b02565b505050565b80613ddd5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613dec846001015160c01c90565b90505f613dfa856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613e29876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613eeb885160f81c90565b858888866040518663ffffffff1660e01b8152600401613f0f959493929190614dbb565b5f6040518083038186803b158015613f25575f80fd5b505afa158015613f37573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166140285760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb76145df565b5f54610100900460ff166140ac5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb7614667565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015614138573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061415c9190614c4a565b5f86815260a4602052604090206001015490915061417b908290614ba8565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a5909152812080549091906141ba908490614ba8565b90915550506040516141cd908490614dec565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906142349084614e18565b61423e9190614e2f565b905061424a8183614bbb565b60aa5f82825461425a9190614ba8565b90915550506001600160a01b0384165f90815260a5602052604081208054839290614286908490614ba8565b9091555050604051614299908490614dec565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156114ea575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461432b576040519150601f19603f3d011682016040523d82523d5f602084013e614330565b606091505b5050905080613d8b5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b614389613310565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586143be3390565b6040516001600160a01b03909116815260200160405180910390a1565b6143e36146ec565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336143be565b5f816144625760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061447457614474614e67565b919091013560f81c949350505050565b5f8160f98110156144d75760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146144d75760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016145758161ffff87168661473e565b82900390912095945050505050565b8082535050565b60605f8080808061459e888a018a614f81565b95509550955095509550508187106145bc5794506145d89350505050565b8387106145d05782955050505050506145d8565b509293505050505b9392505050565b5f54610100900460ff1661465b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166146e35760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bb733613f43565b60655460ff16611bb75760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f0361474d5750826145d8565b609b546001600160a01b03165f5b848110156147fa576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156147c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147e59190614c4a565b8752506020909501946001938401930161475b565b5093949350505050565b5f60208284031215614814575f80fd5b5035919050565b80356001600160a01b0381168114614831575f80fd5b919050565b5f60208284031215614846575f80fd5b6145d88261481b565b5f8083601f84011261485f575f80fd5b50813567ffffffffffffffff811115614876575f80fd5b60208301915083602082850101111561488d575f80fd5b9250929050565b5f805f604084860312156148a6575f80fd5b833567ffffffffffffffff8111156148bc575f80fd5b6148c88682870161484f565b909790965060209590950135949350505050565b5f80602083850312156148ed575f80fd5b823567ffffffffffffffff811115614903575f80fd5b61490f8582860161484f565b90969095509350505050565b5f60e0828403121561492b575f80fd5b50919050565b5f6060828403121561492b575f80fd5b5f8060408385031215614952575f80fd5b823567ffffffffffffffff80821115614969575f80fd5b6149758683870161491b565b9350602085013591508082111561498a575f80fd5b5061499785828601614931565b9150509250929050565b5f805f805f80608087890312156149b6575f80fd5b863567ffffffffffffffff808211156149cd575f80fd5b6149d98a838b0161491b565b975060208901359150808211156149ee575f80fd5b6149fa8a838b01614931565b96506040890135915080821115614a0f575f80fd5b614a1b8a838b0161484f565b90965094506060890135915080821115614a33575f80fd5b50614a4089828a0161484f565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614a67575f80fd5b614a708761481b565b9550614a7e6020880161481b565b9450614a8c6040880161481b565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614ac0575f80fd5b843567ffffffffffffffff80821115614ad7575f80fd5b614ae38883890161484f565b90965094506020870135915080821115614afb575f80fd5b50614b088782880161484f565b95989497509550505050565b801515811461283d575f80fd5b5f60208284031215614b31575f80fd5b81356145d881614b14565b803567ffffffffffffffff81168114614831575f80fd5b5f8060408385031215614b64575f80fd5b614b6d83614b3c565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614b7b565b818103818111156113a6576113a6614b7b565b5f60208284031215614bde575f80fd5b81516145d881614b14565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614c1c575f80fd5b83018035915067ffffffffffffffff821115614c36575f80fd5b60200191503681900382131561488d575f80fd5b5f60208284031215614c5a575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c9157614c91614b7b565b5060010190565b5f60208284031215614ca8575f80fd5b813560ff811681146145d8575f80fd5b5f60208284031215614cc8575f80fd5b6145d882614b3c565b5f60208284031215614ce1575f80fd5b813561ffff811681146145d8575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614d925784516001600160a01b031683529383019391830191600101614d6d565b50508760408601528481036060860152614dad818789614d01565b9a9950505050505050505050565b858152846020820152608060408201525f614dda608083018587614d01565b90508260608301529695505050505050565b5f82515f5b81811015614e0b5760208186018101518583015201614df1565b505f920191825250919050565b80820281158282048414176113a6576113a6614b7b565b5f82614e62577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ed0575f80fd5b8135602067ffffffffffffffff80831115614eed57614eed614e94565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614f3057614f30614e94565b6040529384526020818701810194908101925087851115614f4f575f80fd5b6020870191505b84821015614f7657614f678261481b565b83529183019190830190614f56565b979650505050505050565b5f805f805f8060c08789031215614f96575f80fd5b86359550602087013567ffffffffffffffff80821115614fb4575f80fd5b614fc08a838b01614ec1565b9650604089013595506060890135915080821115614fdc575f80fd5b614fe88a838b01614ec1565b94506080890135935060a0890135915080821115615004575f80fd5b5061501189828a01614ec1565b915050929550929550929556fea164736f6c6343000818000a", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004f5438038062004f5483398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614df66200015e5f395f818161062b0152613bc50152614df65ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046145cf565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614601565b610a96565b005b3480156103cf575f80fd5b506103c26103de36600461465f565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046145cf565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146a7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046145cf565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046145cf565b61137e565b3480156104a8575f80fd5b506103956104b73660046145cf565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046145cf565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461470c565b6113ac565b6103c261057f36600461476c565b6115e8565b34801561058f575f80fd5b506103c261059e3660046145cf565b611866565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046145cf565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046145cf565b611911565b348015610690575f80fd5b5061039561069f3660046145cf565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614601565b611aec565b3480156106da575f80fd5b506103c2611ba9565b3480156106ee575f80fd5b506103c26106fd36600461481d565b611bbc565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046145cf565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046145cf565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614601565b611ec5565b348015610843575f80fd5b5061036b610852366004614601565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046145cf565b611fa8565b3480156108a5575f80fd5b506103956108b4366004614601565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614878565b612058565b348015610904575f80fd5b506103c2610913366004614601565b61235c565b348015610923575f80fd5b506103c26109323660046146a7565b6123b5565b348015610942575f80fd5b506103c26109513660046148ec565b612705565b348015610961575f80fd5b506103c26109703660046145cf565b612843565b6103c261098336600461491e565b6128e6565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b73660046145cf565b612e78565b3480156109c7575f80fd5b506103c26109d6366004614601565b612fe7565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046145cf565b6130a6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046145cf565b6130f0565b348015610a6d575f80fd5b506103c2610a7c366004614601565b613193565b348015610a8c575f80fd5b5061039560a95481565b610a9e613220565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613220565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb858561327a565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614973565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614986565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614973565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613313565b5f80610f08848461327a565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614986565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613366565b60a25f611275600184614986565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614986565b81526020019081526020015f205f905560a45f6001836112ce9190614986565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614999565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613313565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156891906149b4565b6115729190614973565b10156115da575f61158960808401606085016149cb565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613423565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613313565b60ac54609e545f90815260a26020526040812054909142916116629190614973565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de91906149b4565b6116e89190614973565b109050811580156116f65750805b1561175d575f61170c60808a0160608b016149cb565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613423565b5f806117c8888861327a565b915091505f6117db836001015160c01c90565b5f81815260a16020526040902054909150821461183a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a26020526040902042600190910155611859838888613b56565b5050505050505050505050565b61186e613220565b5f8111801561187f57506099548114155b6118cb5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561193157505f5460ff8083169116105b6119a35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119c15f5460ff1690565b60ff16600214611a135760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a865760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aaf57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b611af4613220565b6001600160a01b0381165f908152609f602052604090205460ff16611b5b5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bb1613220565b611bba5f613d09565b565b5f54610100900460ff1615808015611bda57505f54600160ff909116105b80611bf35750303b158015611bf357505f5460ff166001145b611c655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c86575f805461ff0019166101001790555b6001600160a01b0386161580611ca357506001600160a01b038516155b15611cda576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d305760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d38613d72565b611d40613df6565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ebc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611ecd613220565b6001600160a01b03811615801590611ef35750609c546001600160a01b03828116911614155b611f3f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fb0613220565b5f81118015611fc0575060648111155b8015611fce575060a9548114155b61201a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611905565b60a854156120a85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120b0613313565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561211c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121409190614999565b61218c5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f80612198868661327a565b915091505f6121ab836001015160c01c90565b5f81815260a16020526040902054909150821461220a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612213816130a6565b61225f5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229b91614973565b11612311575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261230c91839190613e7a565b611ebc565b61231c838686613b56565b611ebc81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613fd6565b612364613220565b60aa80545f90915561237682826140a2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611905565b6123bd613220565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124345760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f80612440848461327a565b915091505f612453836001015160c01c90565b905080156124a35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124af846079015190565b9050806124fe5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125535760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255f856019015190565b036125ac5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d8856039015190565b146126255760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270d613220565b80156128115761271b61414c565b60a65460ff16156127d05760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276f908490614973565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128196141a6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f3565b50565b61284b613220565b5f8111801561285c575060ac548114155b6128a85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611905565b335f908152609f602052604090205460ff166129445760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129945760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61299c613313565b60a65460ff16156129ef5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a4a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612ab15760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac48267ffffffffffffffff1661137e565b612b105760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b8b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c1b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8f91906149b4565b341015612cde5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df691815260200190565b60405180910390a35f609d546001612e0e9190614973565b90505b609e548111612e66578267ffffffffffffffff168114612e54576099545f82815260a2602052604081206001018054909190612e4e908490614973565b90915550505b80612e5e816149ec565b915050612e11565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9857505f5460ff8083169116105b612f0a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f6c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b335f90815260a56020526040812054908190036130465760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305f82826140a2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309a91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f8613220565b5f8111801561310957506098548114155b6131555760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611905565b61319b613220565b6001600160a01b0381166132175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61284081613d09565b6033546001600160a01b03163314611bba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f61328785856141df565b90505f8160ff165f036132a85761329e868661424f565b9094509050613305565b8160ff166001036132bd5761329e86866142b8565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f03613371575050565b8082035f5b8281101561341d5761010081840381111561339057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f3575f80fd5b505af1158015613405573d5f803e3d5ffd5b50505050610100830192505061010081019050613376565b50505050565b6134306020830183614a23565b60ff16158061344e57506134476020830183614a23565b60ff166001145b61349a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134eb5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561353c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061355361354e6020860186614a43565b61327a565b915091505f613566836001015160c01c90565b90505f60a181613577846001614973565b81526020019081526020015f2054146135d25760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136235760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461367f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136ee846011015160c01c90565b90505f61371a6137046060890160408a01614aa4565b61371460808a0160608b016149cb565b8461430b565b905061372c60808801606089016149cb565b6001939093019261ffff1691909101905f80491561374b575f4961376d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377e60208a018a614a23565b60ff1660010361378d57506101015b6040805182810190915296506137b2876137aa60208c018c614a23565b60ff1661434f565b60c085901b60018801526137e0876137d060808c0160608d016149cb565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138448761382560208b018b614a43565b604051613833929190614abd565b604051809103902060b99190910152565b60d98701869052600161385a60208b018b614a23565b60ff161061388c5761388c8761387660608c0160408d01614aa4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138eb5760a7545f90815260a4602052604090206002015460995442916138de91614973565b6138e89190614986565b90505b6040518060800160405280428152602001826098544261390b9190614973565b6139159190614973565b815260200161392a60608d0160408e01614aa4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cc91906149b4565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a3490613a2e908c018c614a43565b5f614356565b5f613a4260408d018d614a43565b6040518663ffffffff1660e01b8152600401613a62959493929190614b13565b602060405180830381865afa158015613a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa19190614999565b613b135760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613ba35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613bb2846001015160c01c90565b90505f613bc0856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613bef876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613cb1885160f81c90565b858888866040518663ffffffff1660e01b8152600401613cd5959493929190614b86565b5f6040518083038186803b158015613ceb575f80fd5b505afa158015613cfd573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613dee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba6143aa565b5f54610100900460ff16613e725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba614432565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f2291906149b4565b5f86815260a46020526040902060010154909150613f41908290614973565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613f80908490614973565b9091555050604051613f93908490614bb7565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490613ffa9084614be3565b6140049190614bfa565b90506140108183614986565b60aa5f8282546140209190614973565b90915550506001600160a01b0384165f90815260a560205260408120805483929061404c908490614973565b909155505060405161405f908490614bb7565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146140f1576040519150601f19603f3d011682016040523d82523d5f602084013e6140f6565b606091505b50509050806141475760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b614154613313565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141893390565b6040516001600160a01b03909116815260200160405180910390a1565b6141ae6144b7565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614189565b5f8161422d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061423f5761423f614c32565b919091013560f81c949350505050565b5f8160f98110156142a25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142a25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143408161ffff871686614509565b82900390912095945050505050565b8082535050565b60605f80808080614369888a018a614d4c565b95509550955095509550508187106143875794506143a39350505050565b83871061439b5782955050505050506143a3565b509293505050505b9392505050565b5f54610100900460ff166144265760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144ae5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba33613d09565b60655460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145185750826143a3565b609b546001600160a01b03165f5b848110156145c5576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa15801561458c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b091906149b4565b87525060209095019460019384019301614526565b5093949350505050565b5f602082840312156145df575f80fd5b5035919050565b80356001600160a01b03811681146145fc575f80fd5b919050565b5f60208284031215614611575f80fd5b6143a3826145e6565b5f8083601f84011261462a575f80fd5b50813567ffffffffffffffff811115614641575f80fd5b602083019150836020828501011115614658575f80fd5b9250929050565b5f805f60408486031215614671575f80fd5b833567ffffffffffffffff811115614687575f80fd5b6146938682870161461a565b909790965060209590950135949350505050565b5f80602083850312156146b8575f80fd5b823567ffffffffffffffff8111156146ce575f80fd5b6146da8582860161461a565b90969095509350505050565b5f60e082840312156146f6575f80fd5b50919050565b5f606082840312156146f6575f80fd5b5f806040838503121561471d575f80fd5b823567ffffffffffffffff80821115614734575f80fd5b614740868387016146e6565b93506020850135915080821115614755575f80fd5b50614762858286016146fc565b9150509250929050565b5f805f805f8060808789031215614781575f80fd5b863567ffffffffffffffff80821115614798575f80fd5b6147a48a838b016146e6565b975060208901359150808211156147b9575f80fd5b6147c58a838b016146fc565b965060408901359150808211156147da575f80fd5b6147e68a838b0161461a565b909650945060608901359150808211156147fe575f80fd5b5061480b89828a0161461a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614832575f80fd5b61483b876145e6565b9550614849602088016145e6565b9450614857604088016145e6565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561488b575f80fd5b843567ffffffffffffffff808211156148a2575f80fd5b6148ae8883890161461a565b909650945060208701359150808211156148c6575f80fd5b506148d38782880161461a565b95989497509550505050565b8015158114612840575f80fd5b5f602082840312156148fc575f80fd5b81356143a3816148df565b803567ffffffffffffffff811681146145fc575f80fd5b5f806040838503121561492f575f80fd5b61493883614907565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614946565b818103818111156113a6576113a6614946565b5f602082840312156149a9575f80fd5b81516143a3816148df565b5f602082840312156149c4575f80fd5b5051919050565b5f602082840312156149db575f80fd5b813561ffff811681146143a3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a1c57614a1c614946565b5060010190565b5f60208284031215614a33575f80fd5b813560ff811681146143a3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614a76575f80fd5b83018035915067ffffffffffffffff821115614a90575f80fd5b602001915036819003821315614658575f80fd5b5f60208284031215614ab4575f80fd5b6143a382614907565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614b5d5784516001600160a01b031683529383019391830191600101614b38565b50508760408601528481036060860152614b78818789614acc565b9a9950505050505050505050565b858152846020820152608060408201525f614ba5608083018587614acc565b90508260608301529695505050505050565b5f82515f5b81811015614bd65760208186018101518583015201614bbc565b505f920191825250919050565b80820281158282048414176113a6576113a6614946565b5f82614c2d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614c9b575f80fd5b8135602067ffffffffffffffff80831115614cb857614cb8614c5f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614cfb57614cfb614c5f565b6040529384526020818701810194908101925087851115614d1a575f80fd5b6020870191505b84821015614d4157614d32826145e6565b83529183019190830190614d21565b979650505050505050565b5f805f805f8060c08789031215614d61575f80fd5b86359550602087013567ffffffffffffffff80821115614d7f575f80fd5b614d8b8a838b01614c8c565b9650604089013595506060890135915080821115614da7575f80fd5b614db38a838b01614c8c565b94506080890135935060a0890135915080821115614dcf575f80fd5b50614ddc89828a01614c8c565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 3dbc975f7..2693c8e5c 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615599565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046155d8565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615636565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615599565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461567e565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615599565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615599565b611600565b3480156104a8575f80fd5b506103956104b7366004615599565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615599565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046156e3565b61162e565b6103c26105a6366004615743565b6117be565b3480156105b6575f80fd5b506103c26105c5366004615599565b611ba8565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615599565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615599565b611c6d565b3480156106b7575f80fd5b506103956106c6366004615599565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046155d8565b611ed0565b348015610701575f80fd5b506103c2611fdf565b348015610715575f80fd5b506103c26107243660046157f4565b611ff2565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615599565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615599565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046155d8565b6123bb565b348015610891575f80fd5b5061036b6108a03660046155d8565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615599565b6124df565b3480156108f3575f80fd5b506103956109023660046155d8565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461584f565b6125a9565b348015610952575f80fd5b506103c26109613660046155d8565b612988565b348015610971575f80fd5b506103c261098036600461567e565b6129ee565b348015610990575f80fd5b506103c261099f3660046158c3565b612dda565b3480156109af575f80fd5b506103c26109be366004615599565b612f6d565b6103c26109d13660046158f5565b61302a565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a05366004615599565b61373f565b348015610a15575f80fd5b506103c2610a243660046155d8565b61391c565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615599565b613a02565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615599565b613a59565b348015610ac8575f80fd5b506103c2610ad73660046155d8565b613b16565b348015610ae7575f80fd5b5061039560a95481565b610af9613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613bca565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c4b565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561594a565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261595d565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a02565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061594a565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613cfe565b5f8061107f8484613c4b565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a02565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561595d565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613d6b565b60a25f6114da60018461595d565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461595d565b81526020019081526020015f205f905560a45f600183611533919061595d565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615970565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613cfe565b6117ba8282613e35565b5050565b60a85415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611830613cfe565b60a65460ff161561189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b5f6118b36118ae602089018961598b565b613c4b565b5090505f6118c5826001015160c01c90565b9050609d548114611932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b60ac54609e545f90815260a2602052604090205442916119519161594a565b101580156119fc575060ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa1580156119cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119ef91906159ec565b6119f9919061594a565b10155b15611a33576040517fc8b9bc9100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f81609e54611a42919061595d565b90508015611ac0575f611a5683600161594a565b9050805b609e548111611a83575f81815260a1602052604081205580611a7b81615a03565b915050611a5a565b50807f2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d83604051611ab691815260200190565b60405180910390a2505b609e829055611acf8989613e35565b5f80611adb8989613c4b565b915091505f611aee836001015160c01c90565b5f81815260a160205260409020549091508214611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b611b718c8461465a565b5f81815260a26020526040902042600190910155611b90838989614938565b611b9a8a8a611001565b505050505050505050505050565b611bb0613bca565b5f81118015611bc157506099548114155b611c27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611c8d57505f5460ff8083169116105b611d19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d545f5460ff1690565b60ff16600214611dc0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611e7657609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b611ed8613bca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b611fe7613bca565b611ff05f614b12565b565b5f54610100900460ff161580801561201057505f54600160ff909116105b806120295750303b15801561202957505f5460ff166001145b6120b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612111575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612148575073ffffffffffffffffffffffffffffffffffffffff8516155b1561217f576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166121fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b612204614b88565b61220c614c26565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123c3613bca565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124035750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6124e7613bca565b5f811180156124f7575060648111155b8015612505575060a9548114155b61256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c61565b60a85415612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61261b613cfe565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c59190615970565b61272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127378686613c4b565b915091505f61274a836001015160c01c90565b5f81815260a1602052604090205490915082146127c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6127cc81613a02565b612832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128a99161594a565b1161293d575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261293891839190614cc4565b6123b2565b612948838686614938565b6123b281336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614e47565b612990613bca565b60aa80545f9091556129a28282614f2d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c61565b6129f6613bca565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612a87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612a938484613c4b565b915091505f612aa6836001015160c01c90565b90508015612b10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b1c846079015190565b905080612b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612bf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c00856019015190565b03612c67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612c93856039015190565b14612cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612de2613bca565b8015612f3b57612df0614ff9565b60a65460ff1615612eed5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e5190849061594a565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f4361507e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f10565b50565b612f75613bca565b5f81118015612f86575060ac548114155b612fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611c61565b335f908152609f602052604090205460ff166130a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a8541561310c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613114613cfe565b60a65460ff1615613181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106131f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61328a8267ffffffffffffffff16611600565b6132f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061343c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134ca91906159ec565b341015613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161369f91815260200190565b60405180910390a35f609d5460016136b7919061594a565b90505b609e54811161370f578267ffffffffffffffff1681146136fd576099545f82815260a26020526040812060010180549091906136f790849061594a565b90915550505b8061370781615a03565b9150506136ba565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561375f57505f5460ff8083169116105b6137eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c61565b335f90815260a5602052604081205490819003613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139ae8282614f2d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516139f691815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a61613bca565b5f81118015613a7257506098548114155b613ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c61565b613b1e613bca565b73ffffffffffffffffffffffffffffffffffffffff8116613bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612f6a81614b12565b60335473ffffffffffffffffffffffffffffffffffffffff163314611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c5885856150d5565b90505f8160ff165f03613c7957613c6f868661515f565b9094509050613cf0565b8160ff16600103613c8e57613c6f86866151e2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613d76575050565b8082035f5b82811015613e2f57610100818403811115613d9557508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e05575f80fd5b505af1158015613e17573d5f803e3d5ffd5b50505050610100830192505061010081019050613d7b565b50505050565b613e426020830183615a3a565b60ff161580613e605750613e596020830183615a3a565b60ff166001145b613ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613f9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fae6118ae602086018661598b565b915091505f613fc1836001015160c01c90565b90505f60a181613fd284600161594a565b81526020019081526020015f205414614047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141b1846011015160c01c90565b90505f6141dd6141c76060890160408a01615a5a565b6141d760808a0160608b01615a73565b8461524f565b90506141ef6080880160608901615a73565b6001939093019261ffff1691909101905f80491561420e575f49614230565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961424160208a018a615a3a565b60ff1660010361425057506101015b6040805182810190915296506142758761426d60208c018c615a3a565b60ff16615293565b60c085901b60018801526142a38761429360808c0160608d01615a73565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a013560798901528901356099880152614307876142e860208b018b61598b565b6040516142f6929190615a94565b604051809103902060b99190910152565b60d98701869052600161431d60208b018b615a3a565b60ff161061434f5761434f8761433960608c0160408d01615a5a565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ae5760a7545f90815260a4602052604090206002015460995442916143a19161594a565b6143ab919061595d565b90505b604051806080016040528042815260200182609854426143ce919061594a565b6143d8919061594a565b81526020016143ed60608d0160408e01615a5a565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614485573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144a991906159ec565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061451e90614518908c018c61598b565b5f61529a565b5f61452c60408d018d61598b565b6040518663ffffffff1660e01b815260040161454c959493929190615aea565b602060405180830381865afa158015614567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061458b9190615970565b614617576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b805160f81c61466c6020840184615a3a565b60ff16146146d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682076657273696f6e206d69736d61746368000000000000000000006044820152606401610b84565b600981015160c01c6146ee6080840160608501615a73565b61ffff1614614759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f6c31206d65737361676520636f756e74206d69736d61746368000000000000006044820152606401610b84565b60598101518260800135146147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7072657620737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60798101518260a001351461483b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f706f737420737461746520726f6f74206d69736d6174636800000000000000006044820152606401610b84565b60998101518260c00135146148ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f7769746864726177616c20726f6f74206d69736d6174636800000000000000006044820152606401610b84565b5f6148bd6118ae602085018561598b565b9150506148cb8260d9015190565b8114614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f706172656e742062617463682068617368206d69736d617463680000000000006044820152606401610b84565b505050565b8061499f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6149ae846001015160c01c90565b90505f6149bc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006149eb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614aba885160f81c90565b858888866040518663ffffffff1660e01b8152600401614ade959493929190615b6a565b5f6040518083038186803b158015614af4575f80fd5b505afa158015614b06573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06152ee565b5f54610100900460ff16614cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff06153ae565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614d55573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614d7991906159ec565b5f86815260a46020526040902060010154909150614d9890829061594a565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614de490849061594a565b9091555050604051614df7908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614e6b9084615bc7565b614e759190615bde565b9050614e81818361595d565b60aa5f828254614e91919061594a565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614eca90849061594a565b9091555050604051614edd908490615b9b565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156117ba575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614f89576040519150601f19603f3d011682016040523d82523d5f602084013e614f8e565b606091505b5050905080614933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b615001613cfe565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586150543390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61508661544d565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33615054565b5f8161513d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f81811061514f5761514f615c16565b919091013560f81c949350505050565b5f8160f98110156151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f8161010181146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016152848161ffff8716866154b9565b82900390912095945050505050565b8082535050565b60605f808080806152ad888a018a615d30565b95509550955095509550508187106152cb5794506152e79350505050565b8387106152df5782955050505050506152e7565b509293505050505b9392505050565b5f54610100900460ff16615384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b611ff033614b12565b60655460ff16611ff0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036154c85750826152e7565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561558f576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615556573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061557a91906159ec565b875250602090950194600193840193016154e3565b5093949350505050565b5f602082840312156155a9575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146155d3575f80fd5b919050565b5f602082840312156155e8575f80fd5b6152e7826155b0565b5f8083601f840112615601575f80fd5b50813567ffffffffffffffff811115615618575f80fd5b60208301915083602082850101111561562f575f80fd5b9250929050565b5f805f60408486031215615648575f80fd5b833567ffffffffffffffff81111561565e575f80fd5b61566a868287016155f1565b909790965060209590950135949350505050565b5f806020838503121561568f575f80fd5b823567ffffffffffffffff8111156156a5575f80fd5b6156b1858286016155f1565b90969095509350505050565b5f60e082840312156156cd575f80fd5b50919050565b5f606082840312156156cd575f80fd5b5f80604083850312156156f4575f80fd5b823567ffffffffffffffff8082111561570b575f80fd5b615717868387016156bd565b9350602085013591508082111561572c575f80fd5b50615739858286016156d3565b9150509250929050565b5f805f805f8060808789031215615758575f80fd5b863567ffffffffffffffff8082111561576f575f80fd5b61577b8a838b016156bd565b97506020890135915080821115615790575f80fd5b61579c8a838b016156d3565b965060408901359150808211156157b1575f80fd5b6157bd8a838b016155f1565b909650945060608901359150808211156157d5575f80fd5b506157e289828a016155f1565b979a9699509497509295939492505050565b5f805f805f8060c08789031215615809575f80fd5b615812876155b0565b9550615820602088016155b0565b945061582e604088016155b0565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615862575f80fd5b843567ffffffffffffffff80821115615879575f80fd5b615885888389016155f1565b9096509450602087013591508082111561589d575f80fd5b506158aa878288016155f1565b95989497509550505050565b8015158114612f6a575f80fd5b5f602082840312156158d3575f80fd5b81356152e7816158b6565b803567ffffffffffffffff811681146155d3575f80fd5b5f8060408385031215615906575f80fd5b61590f836158de565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156116285761162861591d565b818103818111156116285761162861591d565b5f60208284031215615980575f80fd5b81516152e7816158b6565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126159be575f80fd5b83018035915067ffffffffffffffff8211156159d8575f80fd5b60200191503681900382131561562f575f80fd5b5f602082840312156159fc575f80fd5b5051919050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615a3357615a3361591d565b5060010190565b5f60208284031215615a4a575f80fd5b813560ff811681146152e7575f80fd5b5f60208284031215615a6a575f80fd5b6152e7826158de565b5f60208284031215615a83575f80fd5b813561ffff811681146152e7575f80fd5b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015615b4157845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615b0f565b50508760408601528481036060860152615b5c818789615aa3565b9a9950505050505050505050565b858152846020820152608060408201525f615b89608083018587615aa3565b90508260608301529695505050505050565b5f82515f5b81811015615bba5760208186018101518583015201615ba0565b505f920191825250919050565b80820281158282048414176116285761162861591d565b5f82615c11577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615c7f575f80fd5b8135602067ffffffffffffffff80831115615c9c57615c9c615c43565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615cdf57615cdf615c43565b6040529384526020818701810194908101925087851115615cfe575f80fd5b6020870191505b84821015615d2557615d16826155b0565b83529183019190830190615d05565b979650505050505050565b5f805f805f8060c08789031215615d45575f80fd5b86359550602087013567ffffffffffffffff80821115615d63575f80fd5b615d6f8a838b01615c70565b9650604089013595506060890135915080821115615d8b575f80fd5b615d978a838b01615c70565b94506080890135935060a0890135915080821115615db3575f80fd5b50615dc089828a01615c70565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046152fc565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461533b565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615399565b610c15565b3480156103ee575f80fd5b5061036b6103fd3660046152fc565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046153e1565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046152fc565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046152fc565b611600565b3480156104a8575f80fd5b506103956104b73660046152fc565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046152fc565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c2610593366004615446565b61162e565b6103c26105a63660046154a6565b6118df565b3480156105b6575f80fd5b506103c26105c53660046152fc565b611bdf565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb3660046152fc565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a73660046152fc565b611ca4565b3480156106b7575f80fd5b506103956106c63660046152fc565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f136600461533b565b611f07565b348015610701575f80fd5b506103c2612016565b348015610715575f80fd5b506103c2610724366004615557565b612029565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e56107863660046152fc565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b6108503660046152fc565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c261088136600461533b565b6123f2565b348015610891575f80fd5b5061036b6108a036600461533b565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e33660046152fc565b612516565b3480156108f3575f80fd5b5061039561090236600461533b565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c26109423660046155b2565b6125e0565b348015610952575f80fd5b506103c261096136600461533b565b6129bf565b348015610971575f80fd5b506103c26109803660046153e1565b612a25565b348015610990575f80fd5b506103c261099f366004615626565b612e11565b3480156109af575f80fd5b506103c26109be3660046152fc565b612fa4565b6103c26109d1366004615658565b613061565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a053660046152fc565b613776565b348015610a15575f80fd5b506103c2610a2436600461533b565b613953565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a843660046152fc565b613a39565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab83660046152fc565b613a90565b348015610ac8575f80fd5b506103c2610ad736600461533b565b613b4d565b348015610ae7575f80fd5b5061039560a95481565b610af9613c01565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613c01565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c82565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c87856156ad565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e626001826156c0565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a39565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f069084906156ad565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613d35565b5f8061107f8484613c82565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a39565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f26001856156c0565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613da2565b60a25f6114da6001846156c0565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151390846156c0565b81526020019081526020015f205f905560a45f60018361153391906156c0565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d891906156d3565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613d35565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184591906156ee565b61184f91906156ad565b10156118d1575f6118666080840160608501615705565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613e6c565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613d35565b60ac54609e545f90815260a260205260408120549091429161197391906156ad565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0991906156ee565b611a1391906156ad565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b01615705565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613e6c565b5f80611b278888613c82565b915091505f611b3a836001015160c01c90565b5f81815260a160205260409020549091508214611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f81815260a26020526040902042600190910155611bd2838888614696565b5050505050505050505050565b611be7613c01565b5f81118015611bf857506099548114155b611c5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611cc457505f5460ff8083169116105b611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d8b5f5460ff1690565b60ff16600214611df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611ead57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c98565b611f0f613c01565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b61201e613c01565b6120275f614870565b565b5f54610100900460ff161580801561204757505f54600160ff909116105b806120605750303b15801561206057505f5460ff166001145b6120ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612148575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8616158061217f575073ffffffffffffffffffffffffffffffffffffffff8516155b156121b6576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b61223b6148e6565b612243614984565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123fa613c01565b73ffffffffffffffffffffffffffffffffffffffff81161580159061243a5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b6124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61251e613c01565b5f8111801561252e575060648111155b801561253c575060a9548114155b6125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c98565b60a8541561264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612652613d35565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc91906156d3565b612762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f8061276e8686613c82565b915091505f612781836001015160c01c90565b5f81815260a1602052604090205490915082146127fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61280381613a39565b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128e0916156ad565b11612974575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261296f91839190614a22565b6123e9565b61297f838686614696565b6123e981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614ba5565b6129c7613c01565b60aa80545f9091556129d98282614c8b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c98565b612a2d613c01565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612aca8484613c82565b915091505f612add836001015160c01c90565b90508015612b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b53846079015190565b905080612bbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c37856019015190565b03612c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612cca856039015190565b14612d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e19613c01565b8015612f7257612e27614d5c565b60a65460ff1615612f245760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e889084906156ad565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f7a614de1565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f47565b50565b612fac613c01565b5f81118015612fbd575060ac548114155b613023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611c98565b335f908152609f602052604090205460ff166130d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a85415613143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61314b613d35565b60a65460ff16156131b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d541061322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a1602052604090205481146132ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6132c18267ffffffffffffffff16611600565b613327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16156133c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a260205260409020600101544210613473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350191906156ee565b34101561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516136d691815260200190565b60405180910390a35f609d5460016136ee91906156ad565b90505b609e548111613746578267ffffffffffffffff168114613734576099545f82815260a260205260408120600101805490919061372e9084906156ad565b90915550505b8061373e81615726565b9150506136f1565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561379657505f5460ff8083169116105b613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001781558290036138bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c98565b335f90815260a56020526040812054908190036139cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139e58282614c8b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613a2d91815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a98613c01565b5f81118015613aa957506098548114155b613b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c98565b613b55613c01565b73ffffffffffffffffffffffffffffffffffffffff8116613bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612fa181614870565b60335473ffffffffffffffffffffffffffffffffffffffff163314612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c8f8585614e38565b90505f8160ff165f03613cb057613ca68686614ec2565b9094509050613d27565b8160ff16600103613cc557613ca68686614f45565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613dad575050565b8082035f5b82811015613e6657610100818403811115613dcc57508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e3c575f80fd5b505af1158015613e4e573d5f803e3d5ffd5b50505050610100830192505061010081019050613db2565b50505050565b613e79602083018361575d565b60ff161580613e975750613e90602083018361575d565b60ff166001145b613efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fea613fe5602086018661577d565b613c82565b915091505f613ffd836001015160c01c90565b90505f60a18161400e8460016156ad565b81526020019081526020015f205414614083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141ed846011015160c01c90565b90505f6142196142036060890160408a016157de565b61421360808a0160608b01615705565b84614fb2565b905061422b6080880160608901615705565b6001939093019261ffff1691909101905f80491561424a575f4961426c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961427d60208a018a61575d565b60ff1660010361428c57506101015b6040805182810190915296506142b1876142a960208c018c61575d565b60ff16614ff6565b60c085901b60018801526142df876142cf60808c0160608d01615705565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143438761432460208b018b61577d565b6040516143329291906157f7565b604051809103902060b99190910152565b60d98701869052600161435960208b018b61575d565b60ff161061438b5761438b8761437560608c0160408d016157de565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ea5760a7545f90815260a4602052604090206002015460995442916143dd916156ad565b6143e791906156c0565b90505b6040518060800160405280428152602001826098544261440a91906156ad565b61441491906156ad565b815260200161442960608d0160408e016157de565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156144c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144e591906156ee565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061455a90614554908c018c61577d565b5f614ffd565b5f61456860408d018d61577d565b6040518663ffffffff1660e01b815260040161458895949392919061584d565b602060405180830381865afa1580156145a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145c791906156d3565b614653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b806146fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f61470c846001015160c01c90565b90505f61471a856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000614749876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614818885160f81c90565b858888866040518663ffffffff1660e01b815260040161483c9594939291906158cd565b5f6040518083038186803b158015614852575f80fd5b505afa158015614864573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661497c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612027615051565b5f54610100900460ff16614a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612027615111565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ad791906156ee565b5f86815260a46020526040902060010154909150614af69082906156ad565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614b429084906156ad565b9091555050604051614b559084906158fe565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614bc9908461592a565b614bd39190615941565b9050614bdf81836156c0565b60aa5f828254614bef91906156ad565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c289084906156ad565b9091555050604051614c3b9084906158fe565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614ce7576040519150601f19603f3d011682016040523d82523d5f602084013e614cec565b606091505b5050905080614d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614d64613d35565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614db73390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614de96151b0565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614db7565b5f81614ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614eb257614eb2615979565b919091013560f81c949350505050565b5f8160f9811015614f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614fe78161ffff87168661521c565b82900390912095945050505050565b8082535050565b60605f80808080615010888a018a615a93565b955095509550955095505081871061502e57945061504a9350505050565b83871061504257829550505050505061504a565b509293505050505b9392505050565b5f54610100900460ff166150e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff166151a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b61202733614870565b60655460ff16612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f0361522b57508261504a565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156152f2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa1580156152b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906152dd91906156ee565b87525060209095019460019384019301615246565b5093949350505050565b5f6020828403121561530c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114615336575f80fd5b919050565b5f6020828403121561534b575f80fd5b61504a82615313565b5f8083601f840112615364575f80fd5b50813567ffffffffffffffff81111561537b575f80fd5b602083019150836020828501011115615392575f80fd5b9250929050565b5f805f604084860312156153ab575f80fd5b833567ffffffffffffffff8111156153c1575f80fd5b6153cd86828701615354565b909790965060209590950135949350505050565b5f80602083850312156153f2575f80fd5b823567ffffffffffffffff811115615408575f80fd5b61541485828601615354565b90969095509350505050565b5f60e08284031215615430575f80fd5b50919050565b5f60608284031215615430575f80fd5b5f8060408385031215615457575f80fd5b823567ffffffffffffffff8082111561546e575f80fd5b61547a86838701615420565b9350602085013591508082111561548f575f80fd5b5061549c85828601615436565b9150509250929050565b5f805f805f80608087890312156154bb575f80fd5b863567ffffffffffffffff808211156154d2575f80fd5b6154de8a838b01615420565b975060208901359150808211156154f3575f80fd5b6154ff8a838b01615436565b96506040890135915080821115615514575f80fd5b6155208a838b01615354565b90965094506060890135915080821115615538575f80fd5b5061554589828a01615354565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561556c575f80fd5b61557587615313565b955061558360208801615313565b945061559160408801615313565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156155c5575f80fd5b843567ffffffffffffffff808211156155dc575f80fd5b6155e888838901615354565b90965094506020870135915080821115615600575f80fd5b5061560d87828801615354565b95989497509550505050565b8015158114612fa1575f80fd5b5f60208284031215615636575f80fd5b813561504a81615619565b803567ffffffffffffffff81168114615336575f80fd5b5f8060408385031215615669575f80fd5b61567283615641565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615680565b8181038181111561162857611628615680565b5f602082840312156156e3575f80fd5b815161504a81615619565b5f602082840312156156fe575f80fd5b5051919050565b5f60208284031215615715575f80fd5b813561ffff8116811461504a575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361575657615756615680565b5060010190565b5f6020828403121561576d575f80fd5b813560ff8116811461504a575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157b0575f80fd5b83018035915067ffffffffffffffff8211156157ca575f80fd5b602001915036819003821315615392575f80fd5b5f602082840312156157ee575f80fd5b61504a82615641565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156158a457845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615872565b505087604086015284810360608601526158bf818789615806565b9a9950505050505050505050565b858152846020820152608060408201525f6158ec608083018587615806565b90508260608301529695505050505050565b5f82515f5b8181101561591d5760208186018101518583015201615903565b505f920191825250919050565b808202811582820484141761162857611628615680565b5f82615974577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126159e2575f80fd5b8135602067ffffffffffffffff808311156159ff576159ff6159a6565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615a4257615a426159a6565b6040529384526020818701810194908101925087851115615a61575f80fd5b6020870191505b84821015615a8857615a7982615313565b83529183019190830190615a68565b979650505050505050565b5f805f805f8060c08789031215615aa8575f80fd5b86359550602087013567ffffffffffffffff80821115615ac6575f80fd5b615ad28a838b016159d3565b9650604089013595506060890135915080821115615aee575f80fd5b615afa8a838b016159d3565b94506080890135935060a0890135915080821115615b16575f80fd5b50615b2389828a016159d3565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { From 0e7472bc7fc981cb192b3648a5664ae5069e8f63 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 15 Jan 2026 15:30:51 +0800 Subject: [PATCH 08/13] fix --- ...essagequeuewithgaspriceoracle_deployed.hex | 2 +- bindings/bin/rollup_deployed.hex | 2 +- .../l1messagequeuewithgaspriceoracle.go | 2 +- .../l1messagequeuewithgaspriceoracle_more.go | 2 +- bindings/bindings/rollup.go | 2 +- bindings/bindings/rollup_more.go | 2 +- .../L1MessageQueueWithGasPriceOracle.sol | 19 ++++--- contracts/contracts/l1/rollup/Rollup.sol | 5 ++ contracts/contracts/test/Rollup.t.sol | 51 ++++++++++++++++++- 9 files changed, 74 insertions(+), 13 deletions(-) diff --git a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex index 6fbcb4989..d11ef23ee 100644 --- a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex +++ b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex @@ -1 +1 @@ -0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b73660046111f4565b610413565b6040519081526020015b60405180910390f35b6101e26101dd36600461120b565b610432565b005b6101bc6101f236600461124e565b6105a3565b6101bc6102053660046112bb565b610657565b6101bc60685481565b6101e2610221366004611337565b610847565b6101e26108dc565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a63660046111f4565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611350565b6108ef565b6101bc60675481565b6101bc6103083660046111f4565b6109d1565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103513660046113a6565b610a47565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b3660046111f4565b610b78565b6101e261039e3660046111f4565b610bbe565b6101e26103b1366004611419565b610c04565b6101bc6103c4366004611443565b60100261520801919050565b6101bc60655481565b6101e26103e7366004611337565b610dbd565b6101bc6103fa3660046111f4565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104bc5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b61010081111561050e5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104b3565b816067541461055f5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104b3565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610611573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106359190611482565b1561064157505f610651565b60655461064e90836114a8565b90505b92915050565b5f607e81610701565b5f8161066e57506001919050565b5b81156106845760089190911c9060010161066f565b919050565b8060808310600181146106c15761069f84610660565b60808101835360018301925084816020036008021b83528083019250506106e2565b84841516600181146106d5578483536106da565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061071460018c83610689565b905061072260018983610689565b905061072e89826106ea565b905061073c60018b83610689565b905060018614600181146107a45760388710600181146107895761075f88610660565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161079e565b87608001835360018301925087898437918701915b506107b5565b6107b25f89355f1a84610689565b91505b506107c08c826106ea565b90508181035f8060388310600181146107f3576107dc84610660565b60f78101600882021b8517935060010191506107fe565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084f610e5a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e4610e5a565b6108ed5f610ec1565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461099a5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104b3565b6109a5838383610f37565b33731111000000000000000000000000000000001111016109ca81865f878787611033565b5050505050565b6066545f908210610a245760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104b3565b60668281548110610a3757610a376114e4565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610af25760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104b3565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b575760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104b3565b610b62838383610f37565b610b70868686868686611033565b505050505050565b610b80610e5a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610597565b610bc6610e5a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610597565b5f54610100900460ff1615808015610c2257505f54600160ff909116105b80610c3b5750303b158015610c3b57505f5460ff166001145b610cad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104b3565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d09575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d116110f0565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610db8575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dc5610e5a565b73ffffffffffffffffffffffffffffffffffffffff8116610e4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104b3565b610e5781610ec1565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b3565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610faf5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104b3565b60108102615208018084101561102d5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104b3565b50505050565b6066545f6110468883888a898989610657565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906110de908a9087908b908b908b90611511565b60405180910390a35050505050505050565b5f54610100900460ff1661116c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed5f54610100900460ff166111eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed33610ec1565b5f60208284031215611204575f80fd5b5035919050565b5f806040838503121561121c575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610684575f80fd5b5f806040838503121561125f575f80fd5b6112688361122b565b946020939093013593505050565b5f8083601f840112611286575f80fd5b50813567ffffffffffffffff81111561129d575f80fd5b6020830191508360208285010111156112b4575f80fd5b9250929050565b5f805f805f805f60c0888a0312156112d1575f80fd5b6112da8861122b565b965060208801359550604088013594506112f66060890161122b565b93506080880135925060a088013567ffffffffffffffff811115611318575f80fd5b6113248a828b01611276565b989b979a50959850939692959293505050565b5f60208284031215611347575f80fd5b61064e8261122b565b5f805f8060608587031215611363575f80fd5b61136c8561122b565b935060208501359250604085013567ffffffffffffffff81111561138e575f80fd5b61139a87828801611276565b95989497509550505050565b5f805f805f8060a087890312156113bb575f80fd5b6113c48761122b565b95506113d26020880161122b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156113fb575f80fd5b61140789828a01611276565b979a9699509497509295939492505050565b5f806040838503121561142a575f80fd5b8235915061143a6020840161122b565b90509250929050565b5f8060208385031215611454575f80fd5b823567ffffffffffffffff81111561146a575f80fd5b61147685828601611276565b90969095509350505050565b5f60208284031215611492575f80fd5b815180151581146114a1575f80fd5b9392505050565b8082028115828204841417610651577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a +0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b736600461122a565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611241565b610424565b005b6101bc6101f2366004611284565b610595565b6101bc6102053660046112f1565b610649565b6101bc60685481565b6101e261022136600461136d565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a636600461122a565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611386565b6108e1565b6101bc60675481565b6101bc61030836600461122a565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113dc565b610a7d565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d36600461122a565b610bae565b6101e261039036600461122a565b610bf4565b6101e26103a336600461144f565b610c3a565b6101bc6103b6366004611479565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136d565b610df3565b6101bc6103ec36600461122a565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b8565b1561063357505f610643565b60655461064090836114de565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e90565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e90565b6108df5f610ef7565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6d565b33731111000000000000000000000000000000001111016109bc81865f878787611069565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a2961151a565b905f5260205f2001549050919050565b6066546067545f911115610a78576067545f908152606c60205260408120549003610a6357504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b285760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8d5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b98838383610f6d565b610ba6868686868686611069565b505050505050565b610bb6610e90565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfc610e90565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5857505f54600160ff909116105b80610c715750303b158015610c7157505f5460ff166001145b610ce35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d47611126565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610dee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfb610e90565b73ffffffffffffffffffffffffffffffffffffffff8116610e845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8d81610ef7565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe55760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110635760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107c8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611114908a9087908b908b908b90611547565b60405180910390a35050505050505050565b5f54610100900460ff166111a25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef7565b5f6020828403121561123a575f80fd5b5035919050565b5f8060408385031215611252575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611295575f80fd5b61129e83611261565b946020939093013593505050565b5f8083601f8401126112bc575f80fd5b50813567ffffffffffffffff8111156112d3575f80fd5b6020830191508360208285010111156112ea575f80fd5b9250929050565b5f805f805f805f60c0888a031215611307575f80fd5b61131088611261565b9650602088013595506040880135945061132c60608901611261565b93506080880135925060a088013567ffffffffffffffff81111561134e575f80fd5b61135a8a828b016112ac565b989b979a50959850939692959293505050565b5f6020828403121561137d575f80fd5b61064082611261565b5f805f8060608587031215611399575f80fd5b6113a285611261565b935060208501359250604085013567ffffffffffffffff8111156113c4575f80fd5b6113d0878288016112ac565b95989497509550505050565b5f805f805f8060a087890312156113f1575f80fd5b6113fa87611261565b955061140860208801611261565b94506040870135935060608701359250608087013567ffffffffffffffff811115611431575f80fd5b61143d89828a016112ac565b979a9699509497509295939492505050565b5f8060408385031215611460575f80fd5b8235915061147060208401611261565b90509250929050565b5f806020838503121561148a575f80fd5b823567ffffffffffffffff8111156114a0575f80fd5b6114ac858286016112ac565b90969095509350505050565b5f602082840312156114c8575f80fd5b815180151581146114d7575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index fa85d6663..425f11edc 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046145cf565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614601565b610a96565b005b3480156103cf575f80fd5b506103c26103de36600461465f565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046145cf565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146a7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046145cf565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046145cf565b61137e565b3480156104a8575f80fd5b506103956104b73660046145cf565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046145cf565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461470c565b6113ac565b6103c261057f36600461476c565b6115e8565b34801561058f575f80fd5b506103c261059e3660046145cf565b611866565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046145cf565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046145cf565b611911565b348015610690575f80fd5b5061039561069f3660046145cf565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614601565b611aec565b3480156106da575f80fd5b506103c2611ba9565b3480156106ee575f80fd5b506103c26106fd36600461481d565b611bbc565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046145cf565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046145cf565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614601565b611ec5565b348015610843575f80fd5b5061036b610852366004614601565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046145cf565b611fa8565b3480156108a5575f80fd5b506103956108b4366004614601565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614878565b612058565b348015610904575f80fd5b506103c2610913366004614601565b61235c565b348015610923575f80fd5b506103c26109323660046146a7565b6123b5565b348015610942575f80fd5b506103c26109513660046148ec565b612705565b348015610961575f80fd5b506103c26109703660046145cf565b612843565b6103c261098336600461491e565b6128e6565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b73660046145cf565b612e78565b3480156109c7575f80fd5b506103c26109d6366004614601565b612fe7565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046145cf565b6130a6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046145cf565b6130f0565b348015610a6d575f80fd5b506103c2610a7c366004614601565b613193565b348015610a8c575f80fd5b5061039560a95481565b610a9e613220565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613220565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb858561327a565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614973565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614986565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614973565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613313565b5f80610f08848461327a565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614986565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613366565b60a25f611275600184614986565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614986565b81526020019081526020015f205f905560a45f6001836112ce9190614986565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614999565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613313565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156891906149b4565b6115729190614973565b10156115da575f61158960808401606085016149cb565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613423565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613313565b60ac54609e545f90815260a26020526040812054909142916116629190614973565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de91906149b4565b6116e89190614973565b109050811580156116f65750805b1561175d575f61170c60808a0160608b016149cb565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613423565b5f806117c8888861327a565b915091505f6117db836001015160c01c90565b5f81815260a16020526040902054909150821461183a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a26020526040902042600190910155611859838888613b56565b5050505050505050505050565b61186e613220565b5f8111801561187f57506099548114155b6118cb5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561193157505f5460ff8083169116105b6119a35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119c15f5460ff1690565b60ff16600214611a135760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a865760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aaf57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b611af4613220565b6001600160a01b0381165f908152609f602052604090205460ff16611b5b5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bb1613220565b611bba5f613d09565b565b5f54610100900460ff1615808015611bda57505f54600160ff909116105b80611bf35750303b158015611bf357505f5460ff166001145b611c655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c86575f805461ff0019166101001790555b6001600160a01b0386161580611ca357506001600160a01b038516155b15611cda576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d305760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d38613d72565b611d40613df6565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ebc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611ecd613220565b6001600160a01b03811615801590611ef35750609c546001600160a01b03828116911614155b611f3f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fb0613220565b5f81118015611fc0575060648111155b8015611fce575060a9548114155b61201a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611905565b60a854156120a85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120b0613313565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561211c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121409190614999565b61218c5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f80612198868661327a565b915091505f6121ab836001015160c01c90565b5f81815260a16020526040902054909150821461220a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612213816130a6565b61225f5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229b91614973565b11612311575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261230c91839190613e7a565b611ebc565b61231c838686613b56565b611ebc81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613fd6565b612364613220565b60aa80545f90915561237682826140a2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611905565b6123bd613220565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124345760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f80612440848461327a565b915091505f612453836001015160c01c90565b905080156124a35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124af846079015190565b9050806124fe5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125535760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255f856019015190565b036125ac5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d8856039015190565b146126255760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270d613220565b80156128115761271b61414c565b60a65460ff16156127d05760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276f908490614973565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128196141a6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f3565b50565b61284b613220565b5f8111801561285c575060ac548114155b6128a85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611905565b335f908152609f602052604090205460ff166129445760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129945760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61299c613313565b60a65460ff16156129ef5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a4a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612ab15760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac48267ffffffffffffffff1661137e565b612b105760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b8b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c1b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8f91906149b4565b341015612cde5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df691815260200190565b60405180910390a35f609d546001612e0e9190614973565b90505b609e548111612e66578267ffffffffffffffff168114612e54576099545f82815260a2602052604081206001018054909190612e4e908490614973565b90915550505b80612e5e816149ec565b915050612e11565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9857505f5460ff8083169116105b612f0a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f6c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b335f90815260a56020526040812054908190036130465760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305f82826140a2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309a91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f8613220565b5f8111801561310957506098548114155b6131555760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611905565b61319b613220565b6001600160a01b0381166132175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61284081613d09565b6033546001600160a01b03163314611bba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f61328785856141df565b90505f8160ff165f036132a85761329e868661424f565b9094509050613305565b8160ff166001036132bd5761329e86866142b8565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f03613371575050565b8082035f5b8281101561341d5761010081840381111561339057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f3575f80fd5b505af1158015613405573d5f803e3d5ffd5b50505050610100830192505061010081019050613376565b50505050565b6134306020830183614a23565b60ff16158061344e57506134476020830183614a23565b60ff166001145b61349a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134eb5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561353c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061355361354e6020860186614a43565b61327a565b915091505f613566836001015160c01c90565b90505f60a181613577846001614973565b81526020019081526020015f2054146135d25760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136235760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461367f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136ee846011015160c01c90565b90505f61371a6137046060890160408a01614aa4565b61371460808a0160608b016149cb565b8461430b565b905061372c60808801606089016149cb565b6001939093019261ffff1691909101905f80491561374b575f4961376d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377e60208a018a614a23565b60ff1660010361378d57506101015b6040805182810190915296506137b2876137aa60208c018c614a23565b60ff1661434f565b60c085901b60018801526137e0876137d060808c0160608d016149cb565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138448761382560208b018b614a43565b604051613833929190614abd565b604051809103902060b99190910152565b60d98701869052600161385a60208b018b614a23565b60ff161061388c5761388c8761387660608c0160408d01614aa4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138eb5760a7545f90815260a4602052604090206002015460995442916138de91614973565b6138e89190614986565b90505b6040518060800160405280428152602001826098544261390b9190614973565b6139159190614973565b815260200161392a60608d0160408e01614aa4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cc91906149b4565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a3490613a2e908c018c614a43565b5f614356565b5f613a4260408d018d614a43565b6040518663ffffffff1660e01b8152600401613a62959493929190614b13565b602060405180830381865afa158015613a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa19190614999565b613b135760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613ba35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613bb2846001015160c01c90565b90505f613bc0856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613bef876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613cb1885160f81c90565b858888866040518663ffffffff1660e01b8152600401613cd5959493929190614b86565b5f6040518083038186803b158015613ceb575f80fd5b505afa158015613cfd573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613dee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba6143aa565b5f54610100900460ff16613e725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba614432565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f2291906149b4565b5f86815260a46020526040902060010154909150613f41908290614973565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613f80908490614973565b9091555050604051613f93908490614bb7565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490613ffa9084614be3565b6140049190614bfa565b90506140108183614986565b60aa5f8282546140209190614973565b90915550506001600160a01b0384165f90815260a560205260408120805483929061404c908490614973565b909155505060405161405f908490614bb7565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146140f1576040519150601f19603f3d011682016040523d82523d5f602084013e6140f6565b606091505b50509050806141475760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b614154613313565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141893390565b6040516001600160a01b03909116815260200160405180910390a1565b6141ae6144b7565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614189565b5f8161422d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061423f5761423f614c32565b919091013560f81c949350505050565b5f8160f98110156142a25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142a25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143408161ffff871686614509565b82900390912095945050505050565b8082535050565b60605f80808080614369888a018a614d4c565b95509550955095509550508187106143875794506143a39350505050565b83871061439b5782955050505050506143a3565b509293505050505b9392505050565b5f54610100900460ff166144265760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144ae5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba33613d09565b60655460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145185750826143a3565b609b546001600160a01b03165f5b848110156145c5576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa15801561458c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b091906149b4565b87525060209095019460019384019301614526565b5093949350505050565b5f602082840312156145df575f80fd5b5035919050565b80356001600160a01b03811681146145fc575f80fd5b919050565b5f60208284031215614611575f80fd5b6143a3826145e6565b5f8083601f84011261462a575f80fd5b50813567ffffffffffffffff811115614641575f80fd5b602083019150836020828501011115614658575f80fd5b9250929050565b5f805f60408486031215614671575f80fd5b833567ffffffffffffffff811115614687575f80fd5b6146938682870161461a565b909790965060209590950135949350505050565b5f80602083850312156146b8575f80fd5b823567ffffffffffffffff8111156146ce575f80fd5b6146da8582860161461a565b90969095509350505050565b5f60e082840312156146f6575f80fd5b50919050565b5f606082840312156146f6575f80fd5b5f806040838503121561471d575f80fd5b823567ffffffffffffffff80821115614734575f80fd5b614740868387016146e6565b93506020850135915080821115614755575f80fd5b50614762858286016146fc565b9150509250929050565b5f805f805f8060808789031215614781575f80fd5b863567ffffffffffffffff80821115614798575f80fd5b6147a48a838b016146e6565b975060208901359150808211156147b9575f80fd5b6147c58a838b016146fc565b965060408901359150808211156147da575f80fd5b6147e68a838b0161461a565b909650945060608901359150808211156147fe575f80fd5b5061480b89828a0161461a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614832575f80fd5b61483b876145e6565b9550614849602088016145e6565b9450614857604088016145e6565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561488b575f80fd5b843567ffffffffffffffff808211156148a2575f80fd5b6148ae8883890161461a565b909650945060208701359150808211156148c6575f80fd5b506148d38782880161461a565b95989497509550505050565b8015158114612840575f80fd5b5f602082840312156148fc575f80fd5b81356143a3816148df565b803567ffffffffffffffff811681146145fc575f80fd5b5f806040838503121561492f575f80fd5b61493883614907565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614946565b818103818111156113a6576113a6614946565b5f602082840312156149a9575f80fd5b81516143a3816148df565b5f602082840312156149c4575f80fd5b5051919050565b5f602082840312156149db575f80fd5b813561ffff811681146143a3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a1c57614a1c614946565b5060010190565b5f60208284031215614a33575f80fd5b813560ff811681146143a3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614a76575f80fd5b83018035915067ffffffffffffffff821115614a90575f80fd5b602001915036819003821315614658575f80fd5b5f60208284031215614ab4575f80fd5b6143a382614907565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614b5d5784516001600160a01b031683529383019391830191600101614b38565b50508760408601528481036060860152614b78818789614acc565b9a9950505050505050505050565b858152846020820152608060408201525f614ba5608083018587614acc565b90508260608301529695505050505050565b5f82515f5b81811015614bd65760208186018101518583015201614bbc565b505f920191825250919050565b80820281158282048414176113a6576113a6614946565b5f82614c2d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614c9b575f80fd5b8135602067ffffffffffffffff80831115614cb857614cb8614c5f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614cfb57614cfb614c5f565b6040529384526020818701810194908101925087851115614d1a575f80fd5b6020870191505b84821015614d4157614d32826145e6565b83529183019190830190614d21565b979650505050505050565b5f805f805f8060c08789031215614d61575f80fd5b86359550602087013567ffffffffffffffff80821115614d7f575f80fd5b614d8b8a838b01614c8c565b9650604089013595506060890135915080821115614da7575f80fd5b614db38a838b01614c8c565b94506080890135935060a0890135915080821115614dcf575f80fd5b50614ddc89828a01614c8c565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614667565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614699565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146f7565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614667565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461473f565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614667565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614667565b61137e565b3480156104a8575f80fd5b506103956104b7366004614667565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614667565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c3660046147a4565b6113ac565b6103c261057f366004614804565b6115e8565b34801561058f575f80fd5b506103c261059e366004614667565b611903565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614667565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614667565b6119ae565b348015610690575f80fd5b5061039561069f366004614667565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614699565b611b89565b3480156106da575f80fd5b506103c2611c46565b3480156106ee575f80fd5b506103c26106fd3660046148b5565b611c59565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614667565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614667565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614699565b611f62565b348015610843575f80fd5b5061036b610852366004614699565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614667565b612045565b3480156108a5575f80fd5b506103956108b4366004614699565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614910565b6120f5565b348015610904575f80fd5b506103c2610913366004614699565b6123f9565b348015610923575f80fd5b506103c261093236600461473f565b612452565b348015610942575f80fd5b506103c2610951366004614984565b6127a2565b348015610961575f80fd5b506103c2610970366004614667565b6128e0565b6103c26109833660046149b6565b612983565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614667565b612f15565b3480156109c7575f80fd5b506103c26109d6366004614699565b613084565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614667565b613143565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614667565b61318d565b348015610a6d575f80fd5b506103c2610a7c366004614699565b613230565b348015610a8c575f80fd5b5061039560a95481565b610a9e6132bd565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b706132bd565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613317565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614a0b565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614a1e565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d9981613143565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614a0b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6133b0565b5f80610f088484613317565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd881613143565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614a1e565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613403565b60a25f611275600184614a1e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614a1e565b81526020019081526020015f205f905560a45f6001836112ce9190614a1e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614a31565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06133b0565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a4c565b6115729190614a0b565b10156115da575f6115896080840160608501614a63565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e482826134c0565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6116406133b0565b60ac54609e545f90815260a26020526040812054909142916116629190614a0b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a4c565b6116e89190614a0b565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a63565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc88886134c0565b5f806117c88888613317565b915091505f6117db836001015160c01c90565b90505f6117e98460d9015190565b90505f6118016117fc60208f018f614a84565b613317565b9150508082146118795760405162461bcd60e51b815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f83815260a1602052604090205484146118d55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f83815260a260205260409020426001909101556118f4858a8a613bee565b50505050505050505050505050565b61190b6132bd565b5f8111801561191c57506099548114155b6119685760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156119ce57505f5460ff8083169116105b611a405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a5e5f5460ff1690565b60ff16600214611ab05760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611b235760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611b4c57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b611b916132bd565b6001600160a01b0381165f908152609f602052604090205460ff16611bf85760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c4e6132bd565b611c575f613da1565b565b5f54610100900460ff1615808015611c7757505f54600160ff909116105b80611c905750303b158015611c9057505f5460ff166001145b611d025760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611d23575f805461ff0019166101001790555b6001600160a01b0386161580611d4057506001600160a01b038516155b15611d77576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611dcd5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611dd5613e0a565b611ddd613e8e565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f59575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f6a6132bd565b6001600160a01b03811615801590611f905750609c546001600160a01b03828116911614155b611fdc5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61204d6132bd565b5f8111801561205d575060648111155b801561206b575060a9548114155b6120b75760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016119a2565b60a854156121455760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61214d6133b0565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dd9190614a31565b6122295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806122358686613317565b915091505f612248836001015160c01c90565b5f81815260a1602052604090205490915082146122a75760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6122b081613143565b6122fc5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161233891614a0b565b116123ae575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526123a991839190613f12565b611f59565b6123b9838686613bee565b611f5981336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061406e565b6124016132bd565b60aa80545f909155612413828261413a565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016119a2565b61245a6132bd565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124d15760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124dd8484613317565b915091505f6124f0836001015160c01c90565b905080156125405760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f61254c846079015190565b90508061259b5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125f05760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125fc856019015190565b036126495760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612675856039015190565b146126c25760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6127aa6132bd565b80156128ae576127b86141e4565b60a65460ff161561286d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161280c908490614a0b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128b661423e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612890565b50565b6128e86132bd565b5f811180156128f9575060ac548114155b6129455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b91016119a2565b335f908152609f602052604090205460ff166129e15760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a85415612a315760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612a396133b0565b60a65460ff1615612a8c5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612ae75760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b4e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b618267ffffffffffffffff1661137e565b612bad5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612c285760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612cb85760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2c9190614a4c565b341015612d7b5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e9391815260200190565b60405180910390a35f609d546001612eab9190614a0b565b90505b609e548111612f03578267ffffffffffffffff168114612ef1576099545f82815260a2602052604081206001018054909190612eeb908490614a0b565b90915550505b80612efb81614ae5565b915050612eae565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612f3557505f5460ff8083169116105b612fa75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001781558290036130095760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b335f90815260a56020526040812054908190036130e35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130fc828261413a565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161313791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6131956132bd565b5f811180156131a657506098548114155b6131f25760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016119a2565b6132386132bd565b6001600160a01b0381166132b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b6128dd81613da1565b6033546001600160a01b03163314611c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6133248585614277565b90505f8160ff165f036133455761333b86866142e7565b90945090506133a2565b8160ff1660010361335a5761333b8686614350565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c575760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361340e575050565b8082035f5b828110156134ba5761010081840381111561342d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613490575f80fd5b505af11580156134a2573d5f803e3d5ffd5b50505050610100830192505061010081019050613413565b50505050565b6134cd6020830183614b1c565b60ff1615806134eb57506134e46020830183614b1c565b60ff166001145b6135375760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356135885760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135d95760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135eb6117fc6020860186614a84565b915091505f6135fe836001015160c01c90565b90505f60a18161360f846001614a0b565b81526020019081526020015f20541461366a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136bb5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146137175760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146137775760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f613786846011015160c01c90565b90505f6137b261379c6060890160408a01614b3c565b6137ac60808a0160608b01614a63565b846143a3565b90506137c46080880160608901614a63565b6001939093019261ffff1691909101905f8049156137e3575f49613805565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961381660208a018a614b1c565b60ff1660010361382557506101015b60408051828101909152965061384a8761384260208c018c614b1c565b60ff166143e7565b60c085901b60018801526138788761386860808c0160608d01614a63565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138dc876138bd60208b018b614a84565b6040516138cb929190614b55565b604051809103902060b99190910152565b60d9870186905260016138f260208b018b614b1c565b60ff1610613924576139248761390e60608c0160408d01614b3c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139835760a7545f90815260a46020526040902060020154609954429161397691614a0b565b6139809190614a1e565b90505b604051806080016040528042815260200182609854426139a39190614a0b565b6139ad9190614a0b565b81526020016139c260608d0160408e01614b3c565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a649190614a4c565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613acc90613ac6908c018c614a84565b5f6143ee565b5f613ada60408d018d614a84565b6040518663ffffffff1660e01b8152600401613afa959493929190614bab565b602060405180830381865afa158015613b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b399190614a31565b613bab5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613c3b5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c4a846001015160c01c90565b90505f613c58856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c87876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d49885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d6d959493929190614c1e565b5f6040518083038186803b158015613d83575f80fd5b505afa158015613d95573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c57614442565b5f54610100900460ff16613f0a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c576144ca565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fba9190614a4c565b5f86815260a46020526040902060010154909150613fd9908290614a0b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614018908490614a0b565b909155505060405161402b908490614c4f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140929084614c7b565b61409c9190614c92565b90506140a88183614a1e565b60aa5f8282546140b89190614a0b565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140e4908490614a0b565b90915550506040516140f7908490614c4f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b50509050806141df5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141ec6133b0565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142213390565b6040516001600160a01b03909116815260200160405180910390a1565b61424661454f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614221565b5f816142c55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f8181106142d7576142d7614cca565b919091013560f81c949350505050565b5f8160f981101561433a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f81610101811461433a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143d88161ffff8716866145a1565b82900390912095945050505050565b8082535050565b60605f80808080614401888a018a614de4565b955095509550955095505081871061441f57945061443b9350505050565b83871061443357829550505050505061443b565b509293505050505b9392505050565b5f54610100900460ff166144be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166145465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c5733613da1565b60655460ff16611c575760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145b057508261443b565b609b546001600160a01b03165f5b8481101561465d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146489190614a4c565b875250602090950194600193840193016145be565b5093949350505050565b5f60208284031215614677575f80fd5b5035919050565b80356001600160a01b0381168114614694575f80fd5b919050565b5f602082840312156146a9575f80fd5b61443b8261467e565b5f8083601f8401126146c2575f80fd5b50813567ffffffffffffffff8111156146d9575f80fd5b6020830191508360208285010111156146f0575f80fd5b9250929050565b5f805f60408486031215614709575f80fd5b833567ffffffffffffffff81111561471f575f80fd5b61472b868287016146b2565b909790965060209590950135949350505050565b5f8060208385031215614750575f80fd5b823567ffffffffffffffff811115614766575f80fd5b614772858286016146b2565b90969095509350505050565b5f60e0828403121561478e575f80fd5b50919050565b5f6060828403121561478e575f80fd5b5f80604083850312156147b5575f80fd5b823567ffffffffffffffff808211156147cc575f80fd5b6147d88683870161477e565b935060208501359150808211156147ed575f80fd5b506147fa85828601614794565b9150509250929050565b5f805f805f8060808789031215614819575f80fd5b863567ffffffffffffffff80821115614830575f80fd5b61483c8a838b0161477e565b97506020890135915080821115614851575f80fd5b61485d8a838b01614794565b96506040890135915080821115614872575f80fd5b61487e8a838b016146b2565b90965094506060890135915080821115614896575f80fd5b506148a389828a016146b2565b979a9699509497509295939492505050565b5f805f805f8060c087890312156148ca575f80fd5b6148d38761467e565b95506148e16020880161467e565b94506148ef6040880161467e565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614923575f80fd5b843567ffffffffffffffff8082111561493a575f80fd5b614946888389016146b2565b9096509450602087013591508082111561495e575f80fd5b5061496b878288016146b2565b95989497509550505050565b80151581146128dd575f80fd5b5f60208284031215614994575f80fd5b813561443b81614977565b803567ffffffffffffffff81168114614694575f80fd5b5f80604083850312156149c7575f80fd5b6149d08361499f565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a66149de565b818103818111156113a6576113a66149de565b5f60208284031215614a41575f80fd5b815161443b81614977565b5f60208284031215614a5c575f80fd5b5051919050565b5f60208284031215614a73575f80fd5b813561ffff8116811461443b575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ab7575f80fd5b83018035915067ffffffffffffffff821115614ad1575f80fd5b6020019150368190038213156146f0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b1557614b156149de565b5060010190565b5f60208284031215614b2c575f80fd5b813560ff8116811461443b575f80fd5b5f60208284031215614b4c575f80fd5b61443b8261499f565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bf55784516001600160a01b031683529383019391830191600101614bd0565b50508760408601528481036060860152614c10818789614b64565b9a9950505050505050505050565b858152846020820152608060408201525f614c3d608083018587614b64565b90508260608301529695505050505050565b5f82515f5b81811015614c6e5760208186018101518583015201614c54565b505f920191825250919050565b80820281158282048414176113a6576113a66149de565b5f82614cc5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d33575f80fd5b8135602067ffffffffffffffff80831115614d5057614d50614cf7565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d9357614d93614cf7565b6040529384526020818701810194908101925087851115614db2575f80fd5b6020870191505b84821015614dd957614dca8261467e565b83529183019190830190614db9565b979650505050505050565b5f805f805f8060c08789031215614df9575f80fd5b86359550602087013567ffffffffffffffff80821115614e17575f80fd5b614e238a838b01614d24565b9650604089013595506060890135915080821115614e3f575f80fd5b614e4b8a838b01614d24565b94506080890135935060a0890135915080821115614e67575f80fd5b50614e7489828a01614d24565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle.go b/bindings/bindings/l1messagequeuewithgaspriceoracle.go index c4e947e59..5651c234a 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle.go @@ -32,7 +32,7 @@ var ( // L1MessageQueueWithGasPriceOracleMetaData contains all meta data concerning the L1MessageQueueWithGasPriceOracle contract. var L1MessageQueueWithGasPriceOracleMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstUnfinalizedMessageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getMessageEnqueueTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801562000010575f80fd5b506040516200179538038062001795833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115896200020c5f395f818161035b0152610a4a01525f8181610233015261043501525f81816102bc01526108f201526115895ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b73660046111f4565b610413565b6040519081526020015b60405180910390f35b6101e26101dd36600461120b565b610432565b005b6101bc6101f236600461124e565b6105a3565b6101bc6102053660046112bb565b610657565b6101bc60685481565b6101e2610221366004611337565b610847565b6101e26108dc565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a63660046111f4565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611350565b6108ef565b6101bc60675481565b6101bc6103083660046111f4565b6109d1565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103513660046113a6565b610a47565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b3660046111f4565b610b78565b6101e261039e3660046111f4565b610bbe565b6101e26103b1366004611419565b610c04565b6101bc6103c4366004611443565b60100261520801919050565b6101bc60655481565b6101e26103e7366004611337565b610dbd565b6101bc6103fa3660046111f4565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104bc5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b61010081111561050e5760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104b3565b816067541461055f5760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104b3565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610611573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106359190611482565b1561064157505f610651565b60655461064e90836114a8565b90505b92915050565b5f607e81610701565b5f8161066e57506001919050565b5b81156106845760089190911c9060010161066f565b919050565b8060808310600181146106c15761069f84610660565b60808101835360018301925084816020036008021b83528083019250506106e2565b84841516600181146106d5578483536106da565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061071460018c83610689565b905061072260018983610689565b905061072e89826106ea565b905061073c60018b83610689565b905060018614600181146107a45760388710600181146107895761075f88610660565b8060b701845360018401935088816020036008021b8452808401935050878984379187019161079e565b87608001835360018301925087898437918701915b506107b5565b6107b25f89355f1a84610689565b91505b506107c08c826106ea565b90508181035f8060388310600181146107f3576107dc84610660565b60f78101600882021b8517935060010191506107fe565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61084f610e5a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108e4610e5a565b6108ed5f610ec1565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461099a5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104b3565b6109a5838383610f37565b33731111000000000000000000000000000000001111016109ca81865f878787611033565b5050505050565b6066545f908210610a245760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104b3565b60668281548110610a3757610a376114e4565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610af25760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104b3565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b575760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104b3565b610b62838383610f37565b610b70868686868686611033565b505050505050565b610b80610e5a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610597565b610bc6610e5a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610597565b5f54610100900460ff1615808015610c2257505f54600160ff909116105b80610c3b5750303b158015610c3b57505f5460ff166001145b610cad5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104b3565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d09575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d116110f0565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610db8575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dc5610e5a565b73ffffffffffffffffffffffffffffffffffffffff8116610e4e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104b3565b610e5781610ec1565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104b3565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610faf5760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104b3565b60108102615208018084101561102d5760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104b3565b50505050565b6066545f6110468883888a898989610657565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e906110de908a9087908b908b908b90611511565b60405180910390a35050505050505050565b5f54610100900460ff1661116c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed5f54610100900460ff166111eb5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104b3565b6108ed33610ec1565b5f60208284031215611204575f80fd5b5035919050565b5f806040838503121561121c575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610684575f80fd5b5f806040838503121561125f575f80fd5b6112688361122b565b946020939093013593505050565b5f8083601f840112611286575f80fd5b50813567ffffffffffffffff81111561129d575f80fd5b6020830191508360208285010111156112b4575f80fd5b9250929050565b5f805f805f805f60c0888a0312156112d1575f80fd5b6112da8861122b565b965060208801359550604088013594506112f66060890161122b565b93506080880135925060a088013567ffffffffffffffff811115611318575f80fd5b6113248a828b01611276565b989b979a50959850939692959293505050565b5f60208284031215611347575f80fd5b61064e8261122b565b5f805f8060608587031215611363575f80fd5b61136c8561122b565b935060208501359250604085013567ffffffffffffffff81111561138e575f80fd5b61139a87828801611276565b95989497509550505050565b5f805f805f8060a087890312156113bb575f80fd5b6113c48761122b565b95506113d26020880161122b565b94506040870135935060608701359250608087013567ffffffffffffffff8111156113fb575f80fd5b61140789828a01611276565b979a9699509497509295939492505050565b5f806040838503121561142a575f80fd5b8235915061143a6020840161122b565b90509250929050565b5f8060208385031215611454575f80fd5b823567ffffffffffffffff81111561146a575f80fd5b61147685828601611276565b90969095509350505050565b5f60208284031215611492575f80fd5b815180151581146114a1575f80fd5b9392505050565b8082028115828204841417610651577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", + Bin: "0x60e060405234801562000010575f80fd5b50604051620017cb380380620017cb833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115bf6200020c5f395f818161034d0152610a8001525f8181610233015261042701525f81816102bc01526108e401526115bf5ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b736600461122a565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611241565b610424565b005b6101bc6101f2366004611284565b610595565b6101bc6102053660046112f1565b610649565b6101bc60685481565b6101e261022136600461136d565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a636600461122a565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611386565b6108e1565b6101bc60675481565b6101bc61030836600461122a565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113dc565b610a7d565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d36600461122a565b610bae565b6101e261039036600461122a565b610bf4565b6101e26103a336600461144f565b610c3a565b6101bc6103b6366004611479565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136d565b610df3565b6101bc6103ec36600461122a565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b8565b1561063357505f610643565b60655461064090836114de565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e90565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e90565b6108df5f610ef7565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6d565b33731111000000000000000000000000000000001111016109bc81865f878787611069565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a2961151a565b905f5260205f2001549050919050565b6066546067545f911115610a78576067545f908152606c60205260408120549003610a6357504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b285760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8d5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b98838383610f6d565b610ba6868686868686611069565b505050505050565b610bb6610e90565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfc610e90565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5857505f54600160ff909116105b80610c715750303b158015610c7157505f5460ff166001145b610ce35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d47611126565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610dee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfb610e90565b73ffffffffffffffffffffffffffffffffffffffff8116610e845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8d81610ef7565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe55760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110635760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107c8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611114908a9087908b908b908b90611547565b60405180910390a35050505050505050565b5f54610100900460ff166111a25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef7565b5f6020828403121561123a575f80fd5b5035919050565b5f8060408385031215611252575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611295575f80fd5b61129e83611261565b946020939093013593505050565b5f8083601f8401126112bc575f80fd5b50813567ffffffffffffffff8111156112d3575f80fd5b6020830191508360208285010111156112ea575f80fd5b9250929050565b5f805f805f805f60c0888a031215611307575f80fd5b61131088611261565b9650602088013595506040880135945061132c60608901611261565b93506080880135925060a088013567ffffffffffffffff81111561134e575f80fd5b61135a8a828b016112ac565b989b979a50959850939692959293505050565b5f6020828403121561137d575f80fd5b61064082611261565b5f805f8060608587031215611399575f80fd5b6113a285611261565b935060208501359250604085013567ffffffffffffffff8111156113c4575f80fd5b6113d0878288016112ac565b95989497509550505050565b5f805f805f8060a087890312156113f1575f80fd5b6113fa87611261565b955061140860208801611261565b94506040870135935060608701359250608087013567ffffffffffffffff811115611431575f80fd5b61143d89828a016112ac565b979a9699509497509295939492505050565b5f8060408385031215611460575f80fd5b8235915061147060208401611261565b90509250929050565b5f806020838503121561148a575f80fd5b823567ffffffffffffffff8111156114a0575f80fd5b6114ac858286016112ac565b90969095509350505050565b5f602082840312156114c8575f80fd5b815180151581146114d7575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", } // L1MessageQueueWithGasPriceOracleABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go index 11b599072..a7d44a7d8 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go @@ -13,7 +13,7 @@ const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astI var L1MessageQueueWithGasPriceOracleStorageLayout = new(solc.StorageLayout) -var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103d0578063f2fde38b146103d9578063f7ca0c51146103ec578063fd0ad31e1461040b575f80fd5b8063d99bc80e14610390578063da35a26f146103a3578063e172d3a1146103b6575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610343578063c276067714610356578063d5ad4a971461037d575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610323575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611360565b610413565b6040519081526020015b60405180910390f35b6101e26101dd366004611377565b610432565b005b6101bc6101f23660046113ba565b6105f1565b6101bc610205366004611427565b6106a5565b6101bc60685481565b6101e26102213660046114a3565b610895565b6101e261092a565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611360565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec3660046114bc565b61093d565b6101bc60675481565b6101bc610308366004611360565b610a39565b6067545f908152606c60205260409020546101bc565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e2610351366004611512565b610ac9565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261038b366004611360565b610c2e565b6101e261039e366004611360565b610c74565b6101e26103b1366004611585565b610cba565b6101bc6103c43660046115af565b60100261520801919050565b6101bc60655481565b6101e26103e73660046114a3565b610e8d565b6101bc6103fa366004611360565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610422575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104cd565b81606754146105ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104cd565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa15801561065f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068391906115ee565b1561068f57505f61069f565b60655461069c9083611614565b90505b92915050565b5f607e8161074f565b5f816106bc57506001919050565b5b81156106d25760089190911c906001016106bd565b919050565b80608083106001811461070f576106ed846106ae565b60808101835360018301925084816020036008021b8352808301925050610730565b848415166001811461072357848353610728565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061076260018c836106d7565b9050610770600189836106d7565b905061077c8982610738565b905061078a60018b836106d7565b905060018614600181146107f25760388710600181146107d7576107ad886106ae565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107ec565b87608001835360018301925087898437918701915b50610803565b6108005f89355f1a846106d7565b91505b5061080e8c82610738565b90508181035f8060388310600181146108415761082a846106ae565b60f78101600882021b85179350600101915061084c565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61089d610f44565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610932610f44565b61093b5f610fc5565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104cd565b610a0d83838361103b565b3373111100000000000000000000000000000000111101610a3281865f87878761116b565b5050505050565b6066545f908210610aa6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104cd565b60668281548110610ab957610ab9611650565b905f5260205f2001549050919050565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104cd565b73ffffffffffffffffffffffffffffffffffffffff86163b15610c0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104cd565b610c1883838361103b565b610c2686868686868661116b565b505050505050565b610c36610f44565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105e5565b610c7c610f44565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105e5565b5f54610100900460ff1615808015610cd857505f54600160ff909116105b80610cf15750303b158015610cf157505f5460ff166001145b610d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104cd565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610dd9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610de1611228565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610e88575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610e95610f44565b73ffffffffffffffffffffffffffffffffffffffff8116610f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104cd565b610f4181610fc5565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461093b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104cd565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6068548311156110cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104cd565b601081026152080180841015611165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104cd565b50505050565b6066545f61117e8883888a8989896106a5565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611216908a9087908b908b908b9061167d565b60405180910390a35050505050505050565b5f54610100900460ff166112be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104cd565b61093b5f54610100900460ff16611357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104cd565b61093b33610fc5565b5f60208284031215611370575f80fd5b5035919050565b5f8060408385031215611388575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d2575f80fd5b5f80604083850312156113cb575f80fd5b6113d483611397565b946020939093013593505050565b5f8083601f8401126113f2575f80fd5b50813567ffffffffffffffff811115611409575f80fd5b602083019150836020828501011115611420575f80fd5b9250929050565b5f805f805f805f60c0888a03121561143d575f80fd5b61144688611397565b9650602088013595506040880135945061146260608901611397565b93506080880135925060a088013567ffffffffffffffff811115611484575f80fd5b6114908a828b016113e2565b989b979a50959850939692959293505050565b5f602082840312156114b3575f80fd5b61069c82611397565b5f805f80606085870312156114cf575f80fd5b6114d885611397565b935060208501359250604085013567ffffffffffffffff8111156114fa575f80fd5b611506878288016113e2565b95989497509550505050565b5f805f805f8060a08789031215611527575f80fd5b61153087611397565b955061153e60208801611397565b94506040870135935060608701359250608087013567ffffffffffffffff811115611567575f80fd5b61157389828a016113e2565b979a9699509497509295939492505050565b5f8060408385031215611596575f80fd5b823591506115a660208401611397565b90509250929050565b5f80602083850312156115c0575f80fd5b823567ffffffffffffffff8111156115d6575f80fd5b6115e2858286016113e2565b90969095509350505050565b5f602082840312156115fe575f80fd5b8151801515811461160d575f80fd5b9392505050565b808202811582820484141761069f577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" +var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611396565b610405565b6040519081526020015b60405180910390f35b6101e26101dd3660046113ad565b610424565b005b6101bc6101f23660046113f0565b6105e3565b6101bc61020536600461145d565b610697565b6101bc60685481565b6101e26102213660046114d9565b610887565b6101e261091c565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611396565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec3660046114f2565b61092f565b6101bc60675481565b6101bc610308366004611396565b610a2b565b6101bc610abb565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e2610343366004611548565b610aff565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d366004611396565b610c64565b6101e2610390366004611396565b610caa565b6101e26103a33660046115bb565b610cf0565b6101bc6103b63660046115e5565b60100261520801919050565b6101bc60655481565b6101e26103d93660046114d9565b610ec3565b6101bc6103ec366004611396565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104bf565b816067541461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104bf565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610651573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106759190611624565b1561068157505f610691565b60655461068e908361164a565b90505b92915050565b5f607e81610741565b5f816106ae57506001919050565b5b81156106c45760089190911c906001016106af565b919050565b806080831060018114610701576106df846106a0565b60808101835360018301925084816020036008021b8352808301925050610722565b84841516600181146107155784835361071a565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061075460018c836106c9565b9050610762600189836106c9565b905061076e898261072a565b905061077c60018b836106c9565b905060018614600181146107e45760388710600181146107c95761079f886106a0565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107de565b87608001835360018301925087898437918701915b506107f5565b6107f25f89355f1a846106c9565b91505b506108008c8261072a565b90508181035f8060388310600181146108335761081c846106a0565b60f78101600882021b85179350600101915061083e565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61088f610f7a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610924610f7a565b61092d5f610ffb565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104bf565b6109ff838383611071565b3373111100000000000000000000000000000000111101610a2481865f8787876111a1565b5050505050565b6066545f908210610a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104bf565b60668281548110610aab57610aab611686565b905f5260205f2001549050919050565b6066546067545f911115610afa576067545f908152606c60205260408120549003610ae557504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104bf565b73ffffffffffffffffffffffffffffffffffffffff86163b15610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104bf565b610c4e838383611071565b610c5c8686868686866111a1565b505050505050565b610c6c610f7a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105d7565b610cb2610f7a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105d7565b5f54610100900460ff1615808015610d0e57505f54600160ff909116105b80610d275750303b158015610d2757505f5460ff166001145b610db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104bf565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e0f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610e1761125e565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610ebe575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610ecb610f7a565b73ffffffffffffffffffffffffffffffffffffffff8116610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104bf565b610f7781610ffb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104bf565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104bf565b60108102615208018084101561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104bf565b50505050565b6066545f6111b48883888a898989610697565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e9061124c908a9087908b908b908b906116b3565b60405180910390a35050505050505050565b5f54610100900460ff166112f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d5f54610100900460ff1661138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d33610ffb565b5f602082840312156113a6575f80fd5b5035919050565b5f80604083850312156113be575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c4575f80fd5b5f8060408385031215611401575f80fd5b61140a836113cd565b946020939093013593505050565b5f8083601f840112611428575f80fd5b50813567ffffffffffffffff81111561143f575f80fd5b602083019150836020828501011115611456575f80fd5b9250929050565b5f805f805f805f60c0888a031215611473575f80fd5b61147c886113cd565b96506020880135955060408801359450611498606089016113cd565b93506080880135925060a088013567ffffffffffffffff8111156114ba575f80fd5b6114c68a828b01611418565b989b979a50959850939692959293505050565b5f602082840312156114e9575f80fd5b61068e826113cd565b5f805f8060608587031215611505575f80fd5b61150e856113cd565b935060208501359250604085013567ffffffffffffffff811115611530575f80fd5b61153c87828801611418565b95989497509550505050565b5f805f805f8060a0878903121561155d575f80fd5b611566876113cd565b9550611574602088016113cd565b94506040870135935060608701359250608087013567ffffffffffffffff81111561159d575f80fd5b6115a989828a01611418565b979a9699509497509295939492505050565b5f80604083850312156115cc575f80fd5b823591506115dc602084016113cd565b90509250929050565b5f80602083850312156115f6575f80fd5b823567ffffffffffffffff81111561160c575f80fd5b61161885828601611418565b90969095509350505050565b5f60208284031215611634575f80fd5b81518015158114611643575f80fd5b9392505050565b8082028115828204841417610691577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(L1MessageQueueWithGasPriceOracleStorageLayoutJSON), L1MessageQueueWithGasPriceOracleStorageLayout); err != nil { diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 822ffd852..dce74ff1c 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -50,7 +50,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004f5438038062004f5483398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614df66200015e5f395f818161062b0152613bc50152614df65ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046145cf565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614601565b610a96565b005b3480156103cf575f80fd5b506103c26103de36600461465f565b610b68565b3480156103ee575f80fd5b5061036b6103fd3660046145cf565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146a7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046145cf565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046145cf565b61137e565b3480156104a8575f80fd5b506103956104b73660046145cf565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046145cf565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461470c565b6113ac565b6103c261057f36600461476c565b6115e8565b34801561058f575f80fd5b506103c261059e3660046145cf565b611866565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d43660046145cf565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c26106803660046145cf565b611911565b348015610690575f80fd5b5061039561069f3660046145cf565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614601565b611aec565b3480156106da575f80fd5b506103c2611ba9565b3480156106ee575f80fd5b506103c26106fd36600461481d565b611bbc565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a46107523660046145cf565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b6108023660046145cf565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614601565b611ec5565b348015610843575f80fd5b5061036b610852366004614601565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c26108953660046145cf565b611fa8565b3480156108a5575f80fd5b506103956108b4366004614601565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614878565b612058565b348015610904575f80fd5b506103c2610913366004614601565b61235c565b348015610923575f80fd5b506103c26109323660046146a7565b6123b5565b348015610942575f80fd5b506103c26109513660046148ec565b612705565b348015610961575f80fd5b506103c26109703660046145cf565b612843565b6103c261098336600461491e565b6128e6565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b73660046145cf565b612e78565b3480156109c7575f80fd5b506103c26109d6366004614601565b612fe7565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a293660046145cf565b6130a6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d3660046145cf565b6130f0565b348015610a6d575f80fd5b506103c2610a7c366004614601565b613193565b348015610a8c575f80fd5b5061039560a95481565b610a9e613220565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613220565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb858561327a565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614973565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614986565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130a6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614973565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613313565b5f80610f08848461327a565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130a6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614986565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613366565b60a25f611275600184614986565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614986565b81526020019081526020015f205f905560a45f6001836112ce9190614986565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614999565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613313565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061156891906149b4565b6115729190614973565b10156115da575f61158960808401606085016149cb565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613423565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613313565b60ac54609e545f90815260a26020526040812054909142916116629190614973565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de91906149b4565b6116e89190614973565b109050811580156116f65750805b1561175d575f61170c60808a0160608b016149cb565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613423565b5f806117c8888861327a565b915091505f6117db836001015160c01c90565b5f81815260a16020526040902054909150821461183a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a26020526040902042600190910155611859838888613b56565b5050505050505050505050565b61186e613220565b5f8111801561187f57506099548114155b6118cb5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561193157505f5460ff8083169116105b6119a35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001790556119c15f5460ff1690565b60ff16600214611a135760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611a865760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aaf57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b611af4613220565b6001600160a01b0381165f908152609f602052604090205460ff16611b5b5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611bb1613220565b611bba5f613d09565b565b5f54610100900460ff1615808015611bda57505f54600160ff909116105b80611bf35750303b158015611bf357505f5460ff166001145b611c655760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611c86575f805461ff0019166101001790555b6001600160a01b0386161580611ca357506001600160a01b038516155b15611cda576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d305760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d38613d72565b611d40613df6565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611ebc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611ecd613220565b6001600160a01b03811615801590611ef35750609c546001600160a01b03828116911614155b611f3f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b611fb0613220565b5f81118015611fc0575060648111155b8015611fce575060a9548114155b61201a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611905565b60a854156120a85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6120b0613313565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561211c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121409190614999565b61218c5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f80612198868661327a565b915091505f6121ab836001015160c01c90565b5f81815260a16020526040902054909150821461220a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612213816130a6565b61225f5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161229b91614973565b11612311575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261230c91839190613e7a565b611ebc565b61231c838686613b56565b611ebc81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250613fd6565b612364613220565b60aa80545f90915561237682826140a2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611905565b6123bd613220565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124345760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f80612440848461327a565b915091505f612453836001015160c01c90565b905080156124a35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124af846079015190565b9050806124fe5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125535760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f61255f856019015190565b036125ac5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440146125d8856039015190565b146126255760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61270d613220565b80156128115761271b61414c565b60a65460ff16156127d05760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161276f908490614973565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128196141a6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336127f3565b50565b61284b613220565b5f8111801561285c575060ac548114155b6128a85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611905565b335f908152609f602052604090205460ff166129445760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129945760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61299c613313565b60a65460ff16156129ef5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a4a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612ab15760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612ac48267ffffffffffffffff1661137e565b612b105760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612b8b5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c1b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c6b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c8f91906149b4565b341015612cde5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612df691815260200190565b60405180910390a35f609d546001612e0e9190614973565b90505b609e548111612e66578267ffffffffffffffff168114612e54576099545f82815260a2602052604081206001018054909190612e4e908490614973565b90915550505b80612e5e816149ec565b915050612e11565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612e9857505f5460ff8083169116105b612f0a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612f6c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611905565b335f90815260a56020526040812054908190036130465760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a5602052604081205561305f82826140a2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161309a91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6130f8613220565b5f8111801561310957506098548114155b6131555760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611905565b61319b613220565b6001600160a01b0381166132175760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61284081613d09565b6033546001600160a01b03163314611bba5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f61328785856141df565b90505f8160ff165f036132a85761329e868661424f565b9094509050613305565b8160ff166001036132bd5761329e86866142b8565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611bba5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f03613371575050565b8082035f5b8281101561341d5761010081840381111561339057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b1580156133f3575f80fd5b505af1158015613405573d5f803e3d5ffd5b50505050610100830192505061010081019050613376565b50505050565b6134306020830183614a23565b60ff16158061344e57506134476020830183614a23565b60ff166001145b61349a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356134eb5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561353c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f8061355361354e6020860186614a43565b61327a565b915091505f613566836001015160c01c90565b90505f60a181613577846001614973565b81526020019081526020015f2054146135d25760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136235760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461367f5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146136df5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f6136ee846011015160c01c90565b90505f61371a6137046060890160408a01614aa4565b61371460808a0160608b016149cb565b8461430b565b905061372c60808801606089016149cb565b6001939093019261ffff1691909101905f80491561374b575f4961376d565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961377e60208a018a614a23565b60ff1660010361378d57506101015b6040805182810190915296506137b2876137aa60208c018c614a23565b60ff1661434f565b60c085901b60018801526137e0876137d060808c0160608d016149cb565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138448761382560208b018b614a43565b604051613833929190614abd565b604051809103902060b99190910152565b60d98701869052600161385a60208b018b614a23565b60ff161061388c5761388c8761387660608c0160408d01614aa4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156138eb5760a7545f90815260a4602052604090206002015460995442916138de91614973565b6138e89190614986565b90505b6040518060800160405280428152602001826098544261390b9190614973565b6139159190614973565b815260200161392a60608d0160408e01614aa4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139cc91906149b4565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a3490613a2e908c018c614a43565b5f614356565b5f613a4260408d018d614a43565b6040518663ffffffff1660e01b8152600401613a62959493929190614b13565b602060405180830381865afa158015613a7d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aa19190614999565b613b135760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613ba35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613bb2846001015160c01c90565b90505f613bc0856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613bef876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613cb1885160f81c90565b858888866040518663ffffffff1660e01b8152600401613cd5959493929190614b86565b5f6040518083038186803b158015613ceb575f80fd5b505afa158015613cfd573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613dee5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba6143aa565b5f54610100900460ff16613e725760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba614432565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f2291906149b4565b5f86815260a46020526040902060010154909150613f41908290614973565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613f80908490614973565b9091555050604051613f93908490614bb7565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490613ffa9084614be3565b6140049190614bfa565b90506140108183614986565b60aa5f8282546140209190614973565b90915550506001600160a01b0384165f90815260a560205260408120805483929061404c908490614973565b909155505060405161405f908490614bb7565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146140f1576040519150601f19603f3d011682016040523d82523d5f602084013e6140f6565b606091505b50509050806141475760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b614154613313565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141893390565b6040516001600160a01b03909116815260200160405180910390a1565b6141ae6144b7565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614189565b5f8161422d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061423f5761423f614c32565b919091013560f81c949350505050565b5f8160f98110156142a25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142a25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143408161ffff871686614509565b82900390912095945050505050565b8082535050565b60605f80808080614369888a018a614d4c565b95509550955095509550508187106143875794506143a39350505050565b83871061439b5782955050505050506143a3565b509293505050505b9392505050565b5f54610100900460ff166144265760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144ae5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611bba33613d09565b60655460ff16611bba5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145185750826143a3565b609b546001600160a01b03165f5b848110156145c5576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa15801561458c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b091906149b4565b87525060209095019460019384019301614526565b5093949350505050565b5f602082840312156145df575f80fd5b5035919050565b80356001600160a01b03811681146145fc575f80fd5b919050565b5f60208284031215614611575f80fd5b6143a3826145e6565b5f8083601f84011261462a575f80fd5b50813567ffffffffffffffff811115614641575f80fd5b602083019150836020828501011115614658575f80fd5b9250929050565b5f805f60408486031215614671575f80fd5b833567ffffffffffffffff811115614687575f80fd5b6146938682870161461a565b909790965060209590950135949350505050565b5f80602083850312156146b8575f80fd5b823567ffffffffffffffff8111156146ce575f80fd5b6146da8582860161461a565b90969095509350505050565b5f60e082840312156146f6575f80fd5b50919050565b5f606082840312156146f6575f80fd5b5f806040838503121561471d575f80fd5b823567ffffffffffffffff80821115614734575f80fd5b614740868387016146e6565b93506020850135915080821115614755575f80fd5b50614762858286016146fc565b9150509250929050565b5f805f805f8060808789031215614781575f80fd5b863567ffffffffffffffff80821115614798575f80fd5b6147a48a838b016146e6565b975060208901359150808211156147b9575f80fd5b6147c58a838b016146fc565b965060408901359150808211156147da575f80fd5b6147e68a838b0161461a565b909650945060608901359150808211156147fe575f80fd5b5061480b89828a0161461a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614832575f80fd5b61483b876145e6565b9550614849602088016145e6565b9450614857604088016145e6565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561488b575f80fd5b843567ffffffffffffffff808211156148a2575f80fd5b6148ae8883890161461a565b909650945060208701359150808211156148c6575f80fd5b506148d38782880161461a565b95989497509550505050565b8015158114612840575f80fd5b5f602082840312156148fc575f80fd5b81356143a3816148df565b803567ffffffffffffffff811681146145fc575f80fd5b5f806040838503121561492f575f80fd5b61493883614907565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614946565b818103818111156113a6576113a6614946565b5f602082840312156149a9575f80fd5b81516143a3816148df565b5f602082840312156149c4575f80fd5b5051919050565b5f602082840312156149db575f80fd5b813561ffff811681146143a3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a1c57614a1c614946565b5060010190565b5f60208284031215614a33575f80fd5b813560ff811681146143a3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614a76575f80fd5b83018035915067ffffffffffffffff821115614a90575f80fd5b602001915036819003821315614658575f80fd5b5f60208284031215614ab4575f80fd5b6143a382614907565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614b5d5784516001600160a01b031683529383019391830191600101614b38565b50508760408601528481036060860152614b78818789614acc565b9a9950505050505050505050565b858152846020820152608060408201525f614ba5608083018587614acc565b90508260608301529695505050505050565b5f82515f5b81811015614bd65760208186018101518583015201614bbc565b505f920191825250919050565b80820281158282048414176113a6576113a6614946565b5f82614c2d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614c9b575f80fd5b8135602067ffffffffffffffff80831115614cb857614cb8614c5f565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614cfb57614cfb614c5f565b6040529384526020818701810194908101925087851115614d1a575f80fd5b6020870191505b84821015614d4157614d32826145e6565b83529183019190830190614d21565b979650505050505050565b5f805f805f8060c08789031215614d61575f80fd5b86359550602087013567ffffffffffffffff80821115614d7f575f80fd5b614d8b8a838b01614c8c565b9650604089013595506060890135915080821115614da7575f80fd5b614db38a838b01614c8c565b94506080890135935060a0890135915080821115614dcf575f80fd5b50614ddc89828a01614c8c565b915050929550929550929556fea164736f6c6343000818000a", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004fec38038062004fec83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e8e6200015e5f395f818161062b0152613c5d0152614e8e5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614667565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614699565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146f7565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614667565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461473f565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614667565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614667565b61137e565b3480156104a8575f80fd5b506103956104b7366004614667565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614667565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c3660046147a4565b6113ac565b6103c261057f366004614804565b6115e8565b34801561058f575f80fd5b506103c261059e366004614667565b611903565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614667565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614667565b6119ae565b348015610690575f80fd5b5061039561069f366004614667565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614699565b611b89565b3480156106da575f80fd5b506103c2611c46565b3480156106ee575f80fd5b506103c26106fd3660046148b5565b611c59565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614667565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614667565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614699565b611f62565b348015610843575f80fd5b5061036b610852366004614699565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614667565b612045565b3480156108a5575f80fd5b506103956108b4366004614699565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614910565b6120f5565b348015610904575f80fd5b506103c2610913366004614699565b6123f9565b348015610923575f80fd5b506103c261093236600461473f565b612452565b348015610942575f80fd5b506103c2610951366004614984565b6127a2565b348015610961575f80fd5b506103c2610970366004614667565b6128e0565b6103c26109833660046149b6565b612983565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614667565b612f15565b3480156109c7575f80fd5b506103c26109d6366004614699565b613084565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614667565b613143565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614667565b61318d565b348015610a6d575f80fd5b506103c2610a7c366004614699565b613230565b348015610a8c575f80fd5b5061039560a95481565b610a9e6132bd565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b706132bd565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613317565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614a0b565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614a1e565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d9981613143565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614a0b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6133b0565b5f80610f088484613317565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd881613143565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614a1e565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613403565b60a25f611275600184614a1e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614a1e565b81526020019081526020015f205f905560a45f6001836112ce9190614a1e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614a31565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06133b0565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a4c565b6115729190614a0b565b10156115da575f6115896080840160608501614a63565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e482826134c0565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6116406133b0565b60ac54609e545f90815260a26020526040812054909142916116629190614a0b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a4c565b6116e89190614a0b565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a63565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc88886134c0565b5f806117c88888613317565b915091505f6117db836001015160c01c90565b90505f6117e98460d9015190565b90505f6118016117fc60208f018f614a84565b613317565b9150508082146118795760405162461bcd60e51b815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f83815260a1602052604090205484146118d55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f83815260a260205260409020426001909101556118f4858a8a613bee565b50505050505050505050505050565b61190b6132bd565b5f8111801561191c57506099548114155b6119685760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156119ce57505f5460ff8083169116105b611a405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a5e5f5460ff1690565b60ff16600214611ab05760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611b235760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611b4c57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b611b916132bd565b6001600160a01b0381165f908152609f602052604090205460ff16611bf85760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c4e6132bd565b611c575f613da1565b565b5f54610100900460ff1615808015611c7757505f54600160ff909116105b80611c905750303b158015611c9057505f5460ff166001145b611d025760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611d23575f805461ff0019166101001790555b6001600160a01b0386161580611d4057506001600160a01b038516155b15611d77576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611dcd5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611dd5613e0a565b611ddd613e8e565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f59575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f6a6132bd565b6001600160a01b03811615801590611f905750609c546001600160a01b03828116911614155b611fdc5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61204d6132bd565b5f8111801561205d575060648111155b801561206b575060a9548114155b6120b75760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016119a2565b60a854156121455760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61214d6133b0565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dd9190614a31565b6122295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806122358686613317565b915091505f612248836001015160c01c90565b5f81815260a1602052604090205490915082146122a75760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6122b081613143565b6122fc5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161233891614a0b565b116123ae575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526123a991839190613f12565b611f59565b6123b9838686613bee565b611f5981336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061406e565b6124016132bd565b60aa80545f909155612413828261413a565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016119a2565b61245a6132bd565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124d15760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124dd8484613317565b915091505f6124f0836001015160c01c90565b905080156125405760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f61254c846079015190565b90508061259b5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125f05760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125fc856019015190565b036126495760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612675856039015190565b146126c25760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6127aa6132bd565b80156128ae576127b86141e4565b60a65460ff161561286d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161280c908490614a0b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128b661423e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612890565b50565b6128e86132bd565b5f811180156128f9575060ac548114155b6129455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b91016119a2565b335f908152609f602052604090205460ff166129e15760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a85415612a315760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612a396133b0565b60a65460ff1615612a8c5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612ae75760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b4e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b618267ffffffffffffffff1661137e565b612bad5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612c285760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612cb85760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2c9190614a4c565b341015612d7b5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e9391815260200190565b60405180910390a35f609d546001612eab9190614a0b565b90505b609e548111612f03578267ffffffffffffffff168114612ef1576099545f82815260a2602052604081206001018054909190612eeb908490614a0b565b90915550505b80612efb81614ae5565b915050612eae565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612f3557505f5460ff8083169116105b612fa75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001781558290036130095760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b335f90815260a56020526040812054908190036130e35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130fc828261413a565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161313791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6131956132bd565b5f811180156131a657506098548114155b6131f25760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016119a2565b6132386132bd565b6001600160a01b0381166132b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b6128dd81613da1565b6033546001600160a01b03163314611c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6133248585614277565b90505f8160ff165f036133455761333b86866142e7565b90945090506133a2565b8160ff1660010361335a5761333b8686614350565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c575760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361340e575050565b8082035f5b828110156134ba5761010081840381111561342d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613490575f80fd5b505af11580156134a2573d5f803e3d5ffd5b50505050610100830192505061010081019050613413565b50505050565b6134cd6020830183614b1c565b60ff1615806134eb57506134e46020830183614b1c565b60ff166001145b6135375760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356135885760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135d95760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135eb6117fc6020860186614a84565b915091505f6135fe836001015160c01c90565b90505f60a18161360f846001614a0b565b81526020019081526020015f20541461366a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136bb5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146137175760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146137775760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f613786846011015160c01c90565b90505f6137b261379c6060890160408a01614b3c565b6137ac60808a0160608b01614a63565b846143a3565b90506137c46080880160608901614a63565b6001939093019261ffff1691909101905f8049156137e3575f49613805565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961381660208a018a614b1c565b60ff1660010361382557506101015b60408051828101909152965061384a8761384260208c018c614b1c565b60ff166143e7565b60c085901b60018801526138788761386860808c0160608d01614a63565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138dc876138bd60208b018b614a84565b6040516138cb929190614b55565b604051809103902060b99190910152565b60d9870186905260016138f260208b018b614b1c565b60ff1610613924576139248761390e60608c0160408d01614b3c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139835760a7545f90815260a46020526040902060020154609954429161397691614a0b565b6139809190614a1e565b90505b604051806080016040528042815260200182609854426139a39190614a0b565b6139ad9190614a0b565b81526020016139c260608d0160408e01614b3c565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a649190614a4c565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613acc90613ac6908c018c614a84565b5f6143ee565b5f613ada60408d018d614a84565b6040518663ffffffff1660e01b8152600401613afa959493929190614bab565b602060405180830381865afa158015613b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b399190614a31565b613bab5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613c3b5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c4a846001015160c01c90565b90505f613c58856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c87876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d49885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d6d959493929190614c1e565b5f6040518083038186803b158015613d83575f80fd5b505afa158015613d95573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c57614442565b5f54610100900460ff16613f0a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c576144ca565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fba9190614a4c565b5f86815260a46020526040902060010154909150613fd9908290614a0b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614018908490614a0b565b909155505060405161402b908490614c4f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140929084614c7b565b61409c9190614c92565b90506140a88183614a1e565b60aa5f8282546140b89190614a0b565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140e4908490614a0b565b90915550506040516140f7908490614c4f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b50509050806141df5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141ec6133b0565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142213390565b6040516001600160a01b03909116815260200160405180910390a1565b61424661454f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614221565b5f816142c55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f8181106142d7576142d7614cca565b919091013560f81c949350505050565b5f8160f981101561433a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f81610101811461433a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143d88161ffff8716866145a1565b82900390912095945050505050565b8082535050565b60605f80808080614401888a018a614de4565b955095509550955095505081871061441f57945061443b9350505050565b83871061443357829550505050505061443b565b509293505050505b9392505050565b5f54610100900460ff166144be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166145465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c5733613da1565b60655460ff16611c575760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145b057508261443b565b609b546001600160a01b03165f5b8481101561465d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146489190614a4c565b875250602090950194600193840193016145be565b5093949350505050565b5f60208284031215614677575f80fd5b5035919050565b80356001600160a01b0381168114614694575f80fd5b919050565b5f602082840312156146a9575f80fd5b61443b8261467e565b5f8083601f8401126146c2575f80fd5b50813567ffffffffffffffff8111156146d9575f80fd5b6020830191508360208285010111156146f0575f80fd5b9250929050565b5f805f60408486031215614709575f80fd5b833567ffffffffffffffff81111561471f575f80fd5b61472b868287016146b2565b909790965060209590950135949350505050565b5f8060208385031215614750575f80fd5b823567ffffffffffffffff811115614766575f80fd5b614772858286016146b2565b90969095509350505050565b5f60e0828403121561478e575f80fd5b50919050565b5f6060828403121561478e575f80fd5b5f80604083850312156147b5575f80fd5b823567ffffffffffffffff808211156147cc575f80fd5b6147d88683870161477e565b935060208501359150808211156147ed575f80fd5b506147fa85828601614794565b9150509250929050565b5f805f805f8060808789031215614819575f80fd5b863567ffffffffffffffff80821115614830575f80fd5b61483c8a838b0161477e565b97506020890135915080821115614851575f80fd5b61485d8a838b01614794565b96506040890135915080821115614872575f80fd5b61487e8a838b016146b2565b90965094506060890135915080821115614896575f80fd5b506148a389828a016146b2565b979a9699509497509295939492505050565b5f805f805f8060c087890312156148ca575f80fd5b6148d38761467e565b95506148e16020880161467e565b94506148ef6040880161467e565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614923575f80fd5b843567ffffffffffffffff8082111561493a575f80fd5b614946888389016146b2565b9096509450602087013591508082111561495e575f80fd5b5061496b878288016146b2565b95989497509550505050565b80151581146128dd575f80fd5b5f60208284031215614994575f80fd5b813561443b81614977565b803567ffffffffffffffff81168114614694575f80fd5b5f80604083850312156149c7575f80fd5b6149d08361499f565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a66149de565b818103818111156113a6576113a66149de565b5f60208284031215614a41575f80fd5b815161443b81614977565b5f60208284031215614a5c575f80fd5b5051919050565b5f60208284031215614a73575f80fd5b813561ffff8116811461443b575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ab7575f80fd5b83018035915067ffffffffffffffff821115614ad1575f80fd5b6020019150368190038213156146f0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b1557614b156149de565b5060010190565b5f60208284031215614b2c575f80fd5b813560ff8116811461443b575f80fd5b5f60208284031215614b4c575f80fd5b61443b8261499f565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bf55784516001600160a01b031683529383019391830191600101614bd0565b50508760408601528481036060860152614c10818789614b64565b9a9950505050505050505050565b858152846020820152608060408201525f614c3d608083018587614b64565b90508260608301529695505050505050565b5f82515f5b81811015614c6e5760208186018101518583015201614c54565b505f920191825250919050565b80820281158282048414176113a6576113a66149de565b5f82614cc5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d33575f80fd5b8135602067ffffffffffffffff80831115614d5057614d50614cf7565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d9357614d93614cf7565b6040529384526020818701810194908101925087851115614db2575f80fd5b6020870191505b84821015614dd957614dca8261467e565b83529183019190830190614db9565b979650505050505050565b5f805f805f8060c08789031215614df9575f80fd5b86359550602087013567ffffffffffffffff80821115614e17575f80fd5b614e238a838b01614d24565b9650604089013595506060890135915080821115614e3f575f80fd5b614e4b8a838b01614d24565b94506080890135935060a0890135915080821115614e67575f80fd5b50614e7489828a01614d24565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 2693c8e5c..19dd191be 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046152fc565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461533b565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615399565b610c15565b3480156103ee575f80fd5b5061036b6103fd3660046152fc565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046153e1565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046152fc565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046152fc565b611600565b3480156104a8575f80fd5b506103956104b73660046152fc565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046152fc565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c2610593366004615446565b61162e565b6103c26105a63660046154a6565b6118df565b3480156105b6575f80fd5b506103c26105c53660046152fc565b611bdf565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb3660046152fc565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a73660046152fc565b611ca4565b3480156106b7575f80fd5b506103956106c63660046152fc565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f136600461533b565b611f07565b348015610701575f80fd5b506103c2612016565b348015610715575f80fd5b506103c2610724366004615557565b612029565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e56107863660046152fc565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b6108503660046152fc565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c261088136600461533b565b6123f2565b348015610891575f80fd5b5061036b6108a036600461533b565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e33660046152fc565b612516565b3480156108f3575f80fd5b5061039561090236600461533b565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c26109423660046155b2565b6125e0565b348015610952575f80fd5b506103c261096136600461533b565b6129bf565b348015610971575f80fd5b506103c26109803660046153e1565b612a25565b348015610990575f80fd5b506103c261099f366004615626565b612e11565b3480156109af575f80fd5b506103c26109be3660046152fc565b612fa4565b6103c26109d1366004615658565b613061565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a053660046152fc565b613776565b348015610a15575f80fd5b506103c2610a2436600461533b565b613953565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a843660046152fc565b613a39565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab83660046152fc565b613a90565b348015610ac8575f80fd5b506103c2610ad736600461533b565b613b4d565b348015610ae7575f80fd5b5061039560a95481565b610af9613c01565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613c01565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613c82565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c87856156ad565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e626001826156c0565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613a39565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f069084906156ad565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613d35565b5f8061107f8484613c82565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613a39565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f26001856156c0565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613da2565b60a25f6114da6001846156c0565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151390846156c0565b81526020019081526020015f205f905560a45f60018361153391906156c0565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d891906156d3565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613d35565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184591906156ee565b61184f91906156ad565b10156118d1575f6118666080840160608501615705565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613e6c565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613d35565b60ac54609e545f90815260a260205260408120549091429161197391906156ad565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0991906156ee565b611a1391906156ad565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b01615705565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613e6c565b5f80611b278888613c82565b915091505f611b3a836001015160c01c90565b5f81815260a160205260409020549091508214611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f81815260a26020526040902042600190910155611bd2838888614696565b5050505050505050505050565b611be7613c01565b5f81118015611bf857506099548114155b611c5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611cc457505f5460ff8083169116105b611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611d8b5f5460ff1690565b60ff16600214611df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611e84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611ead57609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c98565b611f0f613c01565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16611f9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b61201e613c01565b6120275f614870565b565b5f54610100900460ff161580801561204757505f54600160ff909116105b806120605750303b15801561206057505f5460ff166001145b6120ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015612148575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff8616158061217f575073ffffffffffffffffffffffffffffffffffffffff8516155b156121b6576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8716612233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b61223b6148e6565b612243614984565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156123e9575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6123fa613c01565b73ffffffffffffffffffffffffffffffffffffffff81161580159061243a5750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b6124a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61251e613c01565b5f8111801561252e575060648111155b801561253c575060a9548114155b6125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611c98565b60a8541561264a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612652613d35565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156126d8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126fc91906156d3565b612762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f8061276e8686613c82565b915091505f612781836001015160c01c90565b5f81815260a1602052604090205490915082146127fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61280381613a39565b612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916128e0916156ad565b11612974575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261296f91839190614a22565b6123e9565b61297f838686614696565b6123e981336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614ba5565b6129c7613c01565b60aa80545f9091556129d98282614c8b565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611c98565b612a2d613c01565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612abe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612aca8484613c82565b915091505f612add836001015160c01c90565b90508015612b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612b53846079015190565b905080612bbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612c2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612c37856019015190565b03612c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612cca856039015190565b14612d31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e19613c01565b8015612f7257612e27614d5c565b60a65460ff1615612f245760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612e889084906156ad565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612f7a614de1565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612f47565b50565b612fac613c01565b5f81118015612fbd575060ac548114155b613023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611c98565b335f908152609f602052604090205460ff166130d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a85415613143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b61314b613d35565b60a65460ff16156131b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d541061322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a1602052604090205481146132ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6132c18267ffffffffffffffff16611600565b613327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16156133c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a260205260409020600101544210613473576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061350191906156ee565b34101561356a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b9976346040516136d691815260200190565b60405180910390a35f609d5460016136ee91906156ad565b90505b609e548111613746578267ffffffffffffffff168114613734576099545f82815260a260205260408120600101805490919061372e9084906156ad565b90915550505b8061373e81615726565b9150506136f1565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561379657505f5460ff8083169116105b613822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001781558290036138bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611c98565b335f90815260a56020526040812054908190036139cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a560205260408120556139e58282614c8b565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613a2d91815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613a98613c01565b5f81118015613aa957506098548114155b613b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611c98565b613b55613c01565b73ffffffffffffffffffffffffffffffffffffffff8116613bf8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b612fa181614870565b60335473ffffffffffffffffffffffffffffffffffffffff163314612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613c8f8585614e38565b90505f8160ff165f03613cb057613ca68686614ec2565b9094509050613d27565b8160ff16600103613cc557613ca68686614f45565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613dad575050565b8082035f5b82811015613e6657610100818403811115613dcc57508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613e3c575f80fd5b505af1158015613e4e573d5f803e3d5ffd5b50505050610100830192505061010081019050613db2565b50505050565b613e79602083018361575d565b60ff161580613e975750613e90602083018361575d565b60ff166001145b613efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a0820135613fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f80613fea613fe5602086018661577d565b613c82565b915091505f613ffd836001015160c01c90565b90505f60a18161400e8460016156ad565b81526020019081526020015f205414614083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146140ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab60205260409020546080860135146141de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f6141ed846011015160c01c90565b90505f6142196142036060890160408a016157de565b61421360808a0160608b01615705565b84614fb2565b905061422b6080880160608901615705565b6001939093019261ffff1691909101905f80491561424a575f4961426c565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961427d60208a018a61575d565b60ff1660010361428c57506101015b6040805182810190915296506142b1876142a960208c018c61575d565b60ff16614ff6565b60c085901b60018801526142df876142cf60808c0160608d01615705565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143438761432460208b018b61577d565b6040516143329291906157f7565b604051809103902060b99190910152565b60d98701869052600161435960208b018b61575d565b60ff161061438b5761438b8761437560608c0160408d016157de565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156143ea5760a7545f90815260a4602052604090206002015460995442916143dd916156ad565b6143e791906156c0565b90505b6040518060800160405280428152602001826098544261440a91906156ad565b61441491906156ad565b815260200161442960608d0160408e016157de565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156144c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144e591906156ee565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061455a90614554908c018c61577d565b5f614ffd565b5f61456860408d018d61577d565b6040518663ffffffff1660e01b815260040161458895949392919061584d565b602060405180830381865afa1580156145a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145c791906156d3565b614653576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b806146fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f61470c846001015160c01c90565b90505f61471a856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000614749876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614818885160f81c90565b858888866040518663ffffffff1660e01b815260040161483c9594939291906158cd565b5f6040518083038186803b158015614852575f80fd5b505afa158015614864573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff1661497c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612027615051565b5f54610100900460ff16614a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612027615111565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614ab3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614ad791906156ee565b5f86815260a46020526040902060010154909150614af69082906156ad565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614b429084906156ad565b9091555050604051614b559084906158fe565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614bc9908461592a565b614bd39190615941565b9050614bdf81836156c0565b60aa5f828254614bef91906156ad565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c289084906156ad565b9091555050604051614c3b9084906158fe565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614ce7576040519150601f19603f3d011682016040523d82523d5f602084013e614cec565b606091505b5050905080614d57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614d64613d35565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614db73390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614de96151b0565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614db7565b5f81614ea0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614eb257614eb2615979565b919091013560f81c949350505050565b5f8160f9811015614f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614f2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f918101614fe78161ffff87168661521c565b82900390912095945050505050565b8082535050565b60605f80808080615010888a018a615a93565b955095509550955095505081871061502e57945061504a9350505050565b83871061504257829550505050505061504a565b509293505050505b9392505050565b5f54610100900460ff166150e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff166151a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b61202733614870565b60655460ff16612027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f0361522b57508261504a565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156152f2576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa1580156152b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906152dd91906156ee565b87525060209095019460019384019301615246565b5093949350505050565b5f6020828403121561530c575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114615336575f80fd5b919050565b5f6020828403121561534b575f80fd5b61504a82615313565b5f8083601f840112615364575f80fd5b50813567ffffffffffffffff81111561537b575f80fd5b602083019150836020828501011115615392575f80fd5b9250929050565b5f805f604084860312156153ab575f80fd5b833567ffffffffffffffff8111156153c1575f80fd5b6153cd86828701615354565b909790965060209590950135949350505050565b5f80602083850312156153f2575f80fd5b823567ffffffffffffffff811115615408575f80fd5b61541485828601615354565b90969095509350505050565b5f60e08284031215615430575f80fd5b50919050565b5f60608284031215615430575f80fd5b5f8060408385031215615457575f80fd5b823567ffffffffffffffff8082111561546e575f80fd5b61547a86838701615420565b9350602085013591508082111561548f575f80fd5b5061549c85828601615436565b9150509250929050565b5f805f805f80608087890312156154bb575f80fd5b863567ffffffffffffffff808211156154d2575f80fd5b6154de8a838b01615420565b975060208901359150808211156154f3575f80fd5b6154ff8a838b01615436565b96506040890135915080821115615514575f80fd5b6155208a838b01615354565b90965094506060890135915080821115615538575f80fd5b5061554589828a01615354565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561556c575f80fd5b61557587615313565b955061558360208801615313565b945061559160408801615313565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156155c5575f80fd5b843567ffffffffffffffff808211156155dc575f80fd5b6155e888838901615354565b90965094506020870135915080821115615600575f80fd5b5061560d87828801615354565b95989497509550505050565b8015158114612fa1575f80fd5b5f60208284031215615636575f80fd5b813561504a81615619565b803567ffffffffffffffff81168114615336575f80fd5b5f8060408385031215615669575f80fd5b61567283615641565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615680565b8181038181111561162857611628615680565b5f602082840312156156e3575f80fd5b815161504a81615619565b5f602082840312156156fe575f80fd5b5051919050565b5f60208284031215615715575f80fd5b813561ffff8116811461504a575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361575657615756615680565b5060010190565b5f6020828403121561576d575f80fd5b813560ff8116811461504a575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126157b0575f80fd5b83018035915067ffffffffffffffff8211156157ca575f80fd5b602001915036819003821315615392575f80fd5b5f602082840312156157ee575f80fd5b61504a82615641565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b818110156158a457845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615872565b505087604086015284810360608601526158bf818789615806565b9a9950505050505050505050565b858152846020820152608060408201525f6158ec608083018587615806565b90508260608301529695505050505050565b5f82515f5b8181101561591d5760208186018101518583015201615903565b505f920191825250919050565b808202811582820484141761162857611628615680565b5f82615974577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f8301126159e2575f80fd5b8135602067ffffffffffffffff808311156159ff576159ff6159a6565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615a4257615a426159a6565b6040529384526020818701810194908101925087851115615a61575f80fd5b6020870191505b84821015615a8857615a7982615313565b83529183019190830190615a68565b979650505050505050565b5f805f805f8060c08789031215615aa8575f80fd5b86359550602087013567ffffffffffffffff80821115615ac6575f80fd5b615ad28a838b016159d3565b9650604089013595506060890135915080821115615aee575f80fd5b615afa8a838b016159d3565b94506080890135935060a0890135915080821115615b16575f80fd5b50615b2389828a016159d3565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046153ae565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153ed565b610af1565b005b3480156103cf575f80fd5b506103c26103de36600461544b565b610c15565b3480156103ee575f80fd5b5061036b6103fd3660046153ae565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615493565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046153ae565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046153ae565b611600565b3480156104a8575f80fd5b506103956104b73660046153ae565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046153ae565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154f8565b61162e565b6103c26105a6366004615558565b6118df565b3480156105b6575f80fd5b506103c26105c53660046153ae565b611c96565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb3660046153ae565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a73660046153ae565b611d5b565b3480156106b7575f80fd5b506103956106c63660046153ae565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046153ed565b611fbe565b348015610701575f80fd5b506103c26120cd565b348015610715575f80fd5b506103c2610724366004615609565b6120e0565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e56107863660046153ae565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b6108503660046153ae565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046153ed565b6124a9565b348015610891575f80fd5b5061036b6108a03660046153ed565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e33660046153ae565b6125cd565b3480156108f3575f80fd5b506103956109023660046153ed565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c2610942366004615664565b612697565b348015610952575f80fd5b506103c26109613660046153ed565b612a76565b348015610971575f80fd5b506103c2610980366004615493565b612adc565b348015610990575f80fd5b506103c261099f3660046156d8565b612ec8565b3480156109af575f80fd5b506103c26109be3660046153ae565b61305b565b6103c26109d136600461570a565b613118565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a053660046153ae565b61382d565b348015610a15575f80fd5b506103c2610a243660046153ed565b613a0a565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a843660046153ae565b613af0565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab83660046153ae565b613b47565b348015610ac8575f80fd5b506103c2610ad73660046153ed565b613c04565b348015610ae7575f80fd5b5061039560a95481565b610af9613cb8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613cb8565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613d39565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561575f565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e62600182615772565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613af0565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061575f565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613dec565b5f8061107f8484613d39565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613af0565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f2600185615772565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613e59565b60a25f6114da600184615772565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115139084615772565b81526020019081526020015f205f905560a45f6001836115339190615772565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615785565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613dec565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184591906157a0565b61184f919061575f565b10156118d1575f61186660808401606085016157b7565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613f23565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613dec565b60ac54609e545f90815260a2602052604081205490914291611973919061575f565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0991906157a0565b611a13919061575f565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b016157b7565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613f23565b5f80611b278888613d39565b915091505f611b3a836001015160c01c90565b90505f611b488460d9015190565b90505f611b60611b5b60208f018f6157d8565b613d39565b915050808214611bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f83815260a160205260409020548414611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f83815260a26020526040902042600190910155611c87858a8a614748565b50505050505050505050505050565b611c9e613cb8565b5f81118015611caf57506099548114155b611d15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d7b57505f5460ff8083169116105b611e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e425f5460ff1690565b60ff16600214611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611f6457609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d4f565b611fc6613cb8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b6120d5613cb8565b6120de5f614922565b565b5f54610100900460ff16158080156120fe57505f54600160ff909116105b806121175750303b15801561211757505f5460ff166001145b6121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612236575073ffffffffffffffffffffffffffffffffffffffff8516155b1561226d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6122f2614998565b6122fa614a36565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156124a0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6124b1613cb8565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124f15750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6125d5613cb8565b5f811180156125e5575060648111155b80156125f3575060a9548114155b612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d4f565b60a85415612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612709613dec565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561278f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b39190615785565b612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806128258686613d39565b915091505f612838836001015160c01c90565b5f81815260a1602052604090205490915082146128b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6128ba81613af0565b612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916129979161575f565b11612a2b575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612a2691839190614ad4565b6124a0565b612a36838686614748565b6124a081336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c57565b612a7e613cb8565b60aa80545f909155612a908282614d3d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d4f565b612ae4613cb8565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612b818484613d39565b915091505f612b94836001015160c01c90565b90508015612bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612c0a846079015190565b905080612c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612cee856019015190565b03612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d81856039015190565b14612de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612ed0613cb8565b801561302957612ede614e0e565b60a65460ff1615612fdb5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612f3f90849061575f565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b613031614e93565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ffe565b50565b613063613cb8565b5f81118015613074575060ac548114155b6130da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d4f565b335f908152609f602052604090205460ff16613190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156131fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613202613dec565b60a65460ff161561326f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106132e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6133788267ffffffffffffffff16611600565b6133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061352a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613594573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b891906157a0565b341015613621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161378d91815260200190565b60405180910390a35f609d5460016137a5919061575f565b90505b609e5481116137fd578267ffffffffffffffff1681146137eb576099545f82815260a26020526040812060010180549091906137e590849061575f565b90915550505b806137f581615839565b9150506137a8565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561384d57505f5460ff8083169116105b6138d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d4f565b335f90815260a5602052604081205490819003613a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a56020526040812055613a9c8282614d3d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613ae491815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613b4f613cb8565b5f81118015613b6057506098548114155b613bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d4f565b613c0c613cb8565b73ffffffffffffffffffffffffffffffffffffffff8116613caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b61305881614922565b60335473ffffffffffffffffffffffffffffffffffffffff1633146120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613d468585614eea565b90505f8160ff165f03613d6757613d5d8686614f74565b9094509050613dde565b8160ff16600103613d7c57613d5d8686614ff7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff16156120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613e64575050565b8082035f5b82811015613f1d57610100818403811115613e8357508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613ef3575f80fd5b505af1158015613f05573d5f803e3d5ffd5b50505050610100830192505061010081019050613e69565b50505050565b613f306020830183615870565b60ff161580613f4e5750613f476020830183615870565b60ff166001145b613fb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b608082013561401f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a082013561408a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f8061409c611b5b60208601866157d8565b915091505f6140af836001015160c01c90565b90505f60a1816140c084600161575f565b81526020019081526020015f205414614135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146141a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab6020526040902054608086013514614290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f61429f846011015160c01c90565b90505f6142cb6142b56060890160408a01615890565b6142c560808a0160608b016157b7565b84615064565b90506142dd60808801606089016157b7565b6001939093019261ffff1691909101905f8049156142fc575f4961431e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961432f60208a018a615870565b60ff1660010361433e57506101015b6040805182810190915296506143638761435b60208c018c615870565b60ff166150a8565b60c085901b60018801526143918761438160808c0160608d016157b7565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143f5876143d660208b018b6157d8565b6040516143e49291906158a9565b604051809103902060b99190910152565b60d98701869052600161440b60208b018b615870565b60ff161061443d5761443d8761442760608c0160408d01615890565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561449c5760a7545f90815260a46020526040902060020154609954429161448f9161575f565b6144999190615772565b90505b604051806080016040528042815260200182609854426144bc919061575f565b6144c6919061575f565b81526020016144db60608d0160408e01615890565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614573573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061459791906157a0565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061460c90614606908c018c6157d8565b5f6150af565b5f61461a60408d018d6157d8565b6040518663ffffffff1660e01b815260040161463a9594939291906158ff565b602060405180830381865afa158015614655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146799190615785565b614705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b806147af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6147be846001015160c01c90565b90505f6147cc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147fb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a8486148ca885160f81c90565b858888866040518663ffffffff1660e01b81526004016148ee95949392919061597f565b5f6040518083038186803b158015614904575f80fd5b505afa158015614916573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de615103565b5f54610100900460ff16614acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de6151c3565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b8991906157a0565b5f86815260a46020526040902060010154909150614ba890829061575f565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bf490849061575f565b9091555050604051614c079084906159b0565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c7b90846159dc565b614c8591906159f3565b9050614c918183615772565b60aa5f828254614ca1919061575f565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614cda90849061575f565b9091555050604051614ced9084906159b0565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d99576040519150601f19603f3d011682016040523d82523d5f602084013e614d9e565b606091505b5050905080614e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614e16613dec565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e693390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e9b615262565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e69565b5f81614f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614f6457614f64615a2b565b919091013560f81c949350505050565b5f8160f9811015614fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016150998161ffff8716866152ce565b82900390912095945050505050565b8082535050565b60605f808080806150c2888a018a615b45565b95509550955095509550508187106150e05794506150fc9350505050565b8387106150f45782955050505050506150fc565b509293505050505b9392505050565b5f54610100900460ff16615199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de33614922565b60655460ff166120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036152dd5750826150fc565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156153a4576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561536b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061538f91906157a0565b875250602090950194600193840193016152f8565b5093949350505050565b5f602082840312156153be575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153e8575f80fd5b919050565b5f602082840312156153fd575f80fd5b6150fc826153c5565b5f8083601f840112615416575f80fd5b50813567ffffffffffffffff81111561542d575f80fd5b602083019150836020828501011115615444575f80fd5b9250929050565b5f805f6040848603121561545d575f80fd5b833567ffffffffffffffff811115615473575f80fd5b61547f86828701615406565b909790965060209590950135949350505050565b5f80602083850312156154a4575f80fd5b823567ffffffffffffffff8111156154ba575f80fd5b6154c685828601615406565b90969095509350505050565b5f60e082840312156154e2575f80fd5b50919050565b5f606082840312156154e2575f80fd5b5f8060408385031215615509575f80fd5b823567ffffffffffffffff80821115615520575f80fd5b61552c868387016154d2565b93506020850135915080821115615541575f80fd5b5061554e858286016154e8565b9150509250929050565b5f805f805f806080878903121561556d575f80fd5b863567ffffffffffffffff80821115615584575f80fd5b6155908a838b016154d2565b975060208901359150808211156155a5575f80fd5b6155b18a838b016154e8565b965060408901359150808211156155c6575f80fd5b6155d28a838b01615406565b909650945060608901359150808211156155ea575f80fd5b506155f789828a01615406565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561561e575f80fd5b615627876153c5565b9550615635602088016153c5565b9450615643604088016153c5565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615677575f80fd5b843567ffffffffffffffff8082111561568e575f80fd5b61569a88838901615406565b909650945060208701359150808211156156b2575f80fd5b506156bf87828801615406565b95989497509550505050565b8015158114613058575f80fd5b5f602082840312156156e8575f80fd5b81356150fc816156cb565b803567ffffffffffffffff811681146153e8575f80fd5b5f806040838503121561571b575f80fd5b615724836156f3565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615732565b8181038181111561162857611628615732565b5f60208284031215615795575f80fd5b81516150fc816156cb565b5f602082840312156157b0575f80fd5b5051919050565b5f602082840312156157c7575f80fd5b813561ffff811681146150fc575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261580b575f80fd5b83018035915067ffffffffffffffff821115615825575f80fd5b602001915036819003821315615444575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361586957615869615732565b5060010190565b5f60208284031215615880575f80fd5b813560ff811681146150fc575f80fd5b5f602082840312156158a0575f80fd5b6150fc826156f3565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561595657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615924565b505087604086015284810360608601526159718187896158b8565b9a9950505050505050505050565b858152846020820152608060408201525f61599e6080830185876158b8565b90508260608301529695505050505050565b5f82515f5b818110156159cf57602081860181015185830152016159b5565b505f920191825250919050565b808202811582820484141761162857611628615732565b5f82615a26577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a94575f80fd5b8135602067ffffffffffffffff80831115615ab157615ab1615a58565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615af457615af4615a58565b6040529384526020818701810194908101925087851115615b13575f80fd5b6020870191505b84821015615b3a57615b2b826153c5565b83529183019190830190615b1a565b979650505050505050565b5f805f805f8060c08789031215615b5a575f80fd5b86359550602087013567ffffffffffffffff80821115615b78575f80fd5b615b848a838b01615a85565b9650604089013595506060890135915080821115615ba0575f80fd5b615bac8a838b01615a85565b94506080890135935060a0890135915080821115615bc8575f80fd5b50615bd589828a01615a85565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol index d57ffcbf9..54cb12906 100644 --- a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol +++ b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol @@ -151,11 +151,7 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue len := 1 leave } - for { - - } gt(v, 0) { - - } { + for {} gt(v, 0) {} { len := add(len, 1) v := shr(8, v) } @@ -263,7 +259,18 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue } function getFirstUnfinalizedMessageEnqueueTime() external view returns (uint256 timestamp) { - return messageEnqueueTime[pendingQueueIndex]; + if (pendingQueueIndex < messageQueue.length) { + // has pending messages + if (messageEnqueueTime[pendingQueueIndex] == 0) { + // no enqueue time, return current timestamp + return block.timestamp; + } else { + // return enqueue time + return messageEnqueueTime[pendingQueueIndex]; + } + } + // no pending messages, return current timestamp + return block.timestamp; } function getMessageEnqueueTimestamp(uint256 index) external view returns (uint256 timestamp) { diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index f3e9fc3ce..f6f948d66 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -348,6 +348,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { // This enables permissionless batch submission when sequencers are offline or censoring bool rollupDelay = batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeriod < block.timestamp; + + // Check if L1 message queue is delayed bool l1MsgQueueDelayed = IL1MessageQueue(messageQueue).getFirstUnfinalizedMessageEnqueueTime() + rollupDelayPeriod < block.timestamp; @@ -363,6 +365,9 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); // check batch hash uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr); + bytes32 parentBatchHashFromHeader = BatchHeaderCodecV0.getParentBatchHash(memPtr); + (, bytes32 parentBatchHashFromInfo) = _loadBatchHeader(batchDataInput.parentBatchHeader); + require(parentBatchHashFromHeader == parentBatchHashFromInfo, "batch info mismatch with batch header"); require(committedBatches[_batchIndex] == _batchHash, "incorrect batch hash"); // Override finalizeTimestamp for ZKP-backed immediate finality diff --git a/contracts/contracts/test/Rollup.t.sol b/contracts/contracts/test/Rollup.t.sol index 2c015d5fd..c7fd2ae33 100644 --- a/contracts/contracts/test/Rollup.t.sol +++ b/contracts/contracts/test/Rollup.t.sol @@ -502,7 +502,7 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { // - rollupDelay = 1 + 3600 < 3601 => 3601 < 3601 => false ✓ // - l1MsgQueueDelayed = 0 + 3600 < 3601 => 3600 < 3601 => true ✓ - // Mock L1 message enqueue time to 0 (older than genesis) + // Mock L1 message enqueue time to 0 (simulates old unfinalized messages) hevm.mockCall( address(l1MessageQueueWithGasPriceOracle), abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), @@ -538,6 +538,55 @@ contract RollupCommitBatchWithProofTest is L1MessageBaseTest { hex"deadbeef" ); } + + /// @notice Test: commitBatchWithProof succeeds when queue is empty (no unfinalized messages) + function test_commitBatchWithProof_succeeds_when_queue_empty() public { + _mockVerifierCall(); + + // When queue is empty, L1MessageQueueWithGasPriceOracle.getFirstUnfinalizedMessageEnqueueTime() + // returns block.timestamp, which makes l1MsgQueueDelayed = false + // (because block.timestamp + rollupDelayPeriod >= block.timestamp is always true) + + // Warp first so we have a stable timestamp to mock + hevm.warp(block.timestamp + 7200); + + // Mock getFirstUnfinalizedMessageEnqueueTime to return block.timestamp (queue empty behavior) + hevm.mockCall( + address(l1MessageQueueWithGasPriceOracle), + abi.encodeWithSignature("getFirstUnfinalizedMessageEnqueueTime()"), + abi.encode(block.timestamp) + ); + + bytes32 prevStateRoot = bytes32(uint256(1)); + bytes32 postStateRoot = bytes32(uint256(2)); + bytes32 withdrawalRoot = getTreeRoot(); + + IRollup.BatchDataInput memory batchDataInput = IRollup.BatchDataInput({ + version: 0, + parentBatchHeader: batchHeader0, + lastBlockNumber: 1, + numL1Messages: 0, // No L1 messages - OK because queue is empty (l1MsgQueueDelayed = false) + prevStateRoot: prevStateRoot, + postStateRoot: postStateRoot, + withdrawalRoot: withdrawalRoot + }); + + bytes memory batchHeader1 = _createMatchingBatchHeader(1, 0, prevStateRoot, postStateRoot, withdrawalRoot); + + // Should succeed: + // - rollupDelay = true (7200 > 3600) + // - l1MsgQueueDelayed = false (block.timestamp + 3600 >= block.timestamp) + // Entry condition satisfied, no L1 message requirement triggered + hevm.prank(alice); + rollup.commitBatchWithProof( + batchDataInput, + batchSignatureInput, + batchHeader1, + hex"deadbeef" + ); + + assertEq(rollup.lastCommittedBatchIndex(), 1); + } } contract RollupCommitBatchTest is L1MessageBaseTest { From 59fb9e8ec65aca6bcfe5dd993ab1999940565126 Mon Sep 17 00:00:00 2001 From: kukoo Date: Thu, 15 Jan 2026 23:23:46 +0800 Subject: [PATCH 09/13] Update contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol Co-authored-by: vincent --- .../l1/rollup/L1MessageQueueWithGasPriceOracle.sol | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol index 54cb12906..c345d4a32 100644 --- a/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol +++ b/contracts/contracts/l1/rollup/L1MessageQueueWithGasPriceOracle.sol @@ -259,15 +259,9 @@ contract L1MessageQueueWithGasPriceOracle is OwnableUpgradeable, IL1MessageQueue } function getFirstUnfinalizedMessageEnqueueTime() external view returns (uint256 timestamp) { - if (pendingQueueIndex < messageQueue.length) { - // has pending messages - if (messageEnqueueTime[pendingQueueIndex] == 0) { - // no enqueue time, return current timestamp - return block.timestamp; - } else { - // return enqueue time + if (pendingQueueIndex < messageQueue.length && messageEnqueueTime[pendingQueueIndex] != 0) { + // has pending messages and return enqueue time return messageEnqueueTime[pendingQueueIndex]; - } } // no pending messages, return current timestamp return block.timestamp; From 84bd12317b8a5ae43b3e9b1f9169bc699894e45a Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Thu, 15 Jan 2026 23:39:11 +0800 Subject: [PATCH 10/13] update bindings --- bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex | 2 +- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/l1messagequeuewithgaspriceoracle.go | 2 +- bindings/bindings/l1messagequeuewithgaspriceoracle_more.go | 2 +- bindings/bindings/rollup.go | 2 +- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/Rollup.sol | 4 +--- 7 files changed, 7 insertions(+), 9 deletions(-) diff --git a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex index d11ef23ee..262279f7c 100644 --- a/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex +++ b/bindings/bin/l1messagequeuewithgaspriceoracle_deployed.hex @@ -1 +1 @@ -0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b736600461122a565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611241565b610424565b005b6101bc6101f2366004611284565b610595565b6101bc6102053660046112f1565b610649565b6101bc60685481565b6101e261022136600461136d565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a636600461122a565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611386565b6108e1565b6101bc60675481565b6101bc61030836600461122a565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113dc565b610a7d565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d36600461122a565b610bae565b6101e261039036600461122a565b610bf4565b6101e26103a336600461144f565b610c3a565b6101bc6103b6366004611479565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136d565b610df3565b6101bc6103ec36600461122a565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b8565b1561063357505f610643565b60655461064090836114de565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e90565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e90565b6108df5f610ef7565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6d565b33731111000000000000000000000000000000001111016109bc81865f878787611069565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a2961151a565b905f5260205f2001549050919050565b6066546067545f911115610a78576067545f908152606c60205260408120549003610a6357504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b285760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8d5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b98838383610f6d565b610ba6868686868686611069565b505050505050565b610bb6610e90565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfc610e90565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5857505f54600160ff909116105b80610c715750303b158015610c7157505f5460ff166001145b610ce35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d47611126565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610dee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfb610e90565b73ffffffffffffffffffffffffffffffffffffffff8116610e845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8d81610ef7565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe55760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110635760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107c8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611114908a9087908b908b908b90611547565b60405180910390a35050505050505050565b5f54610100900460ff166111a25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef7565b5f6020828403121561123a575f80fd5b5035919050565b5f8060408385031215611252575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611295575f80fd5b61129e83611261565b946020939093013593505050565b5f8083601f8401126112bc575f80fd5b50813567ffffffffffffffff8111156112d3575f80fd5b6020830191508360208285010111156112ea575f80fd5b9250929050565b5f805f805f805f60c0888a031215611307575f80fd5b61131088611261565b9650602088013595506040880135945061132c60608901611261565b93506080880135925060a088013567ffffffffffffffff81111561134e575f80fd5b61135a8a828b016112ac565b989b979a50959850939692959293505050565b5f6020828403121561137d575f80fd5b61064082611261565b5f805f8060608587031215611399575f80fd5b6113a285611261565b935060208501359250604085013567ffffffffffffffff8111156113c4575f80fd5b6113d0878288016112ac565b95989497509550505050565b5f805f805f8060a087890312156113f1575f80fd5b6113fa87611261565b955061140860208801611261565b94506040870135935060608701359250608087013567ffffffffffffffff811115611431575f80fd5b61143d89828a016112ac565b979a9699509497509295939492505050565b5f8060408385031215611460575f80fd5b8235915061147060208401611261565b90509250929050565b5f806020838503121561148a575f80fd5b823567ffffffffffffffff8111156114a0575f80fd5b6114ac858286016112ac565b90969095509350505050565b5f602082840312156114c8575f80fd5b815180151581146114d7575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a +0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611229565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611240565b610424565b005b6101bc6101f2366004611283565b610595565b6101bc6102053660046112f0565b610649565b6101bc60685481565b6101e261022136600461136c565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611229565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611385565b6108e1565b6101bc60675481565b6101bc610308366004611229565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113db565b610a7c565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d366004611229565b610bad565b6101e2610390366004611229565b610bf3565b6101e26103a336600461144e565b610c39565b6101bc6103b6366004611478565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136c565b610df2565b6101bc6103ec366004611229565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b7565b1561063357505f610643565b60655461064090836114dd565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e8f565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e8f565b6108df5f610ef6565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6c565b33731111000000000000000000000000000000001111016109bc81865f878787611068565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a29611519565b905f5260205f2001549050919050565b6066546067545f91118015610a5d57506067545f908152606c602052604090205415155b15610a7757506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b275760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8c5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b97838383610f6c565b610ba5868686868686611068565b505050505050565b610bb5610e8f565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfb610e8f565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5757505f54600160ff909116105b80610c705750303b158015610c7057505f5460ff166001145b610ce25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d46611125565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610ded575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfa610e8f565b73ffffffffffffffffffffffffffffffffffffffff8116610e835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8c81610ef6565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe45760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110625760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107b8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611113908a9087908b908b908b90611546565b60405180910390a35050505050505050565b5f54610100900460ff166111a15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112205760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef6565b5f60208284031215611239575f80fd5b5035919050565b5f8060408385031215611251575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611294575f80fd5b61129d83611260565b946020939093013593505050565b5f8083601f8401126112bb575f80fd5b50813567ffffffffffffffff8111156112d2575f80fd5b6020830191508360208285010111156112e9575f80fd5b9250929050565b5f805f805f805f60c0888a031215611306575f80fd5b61130f88611260565b9650602088013595506040880135945061132b60608901611260565b93506080880135925060a088013567ffffffffffffffff81111561134d575f80fd5b6113598a828b016112ab565b989b979a50959850939692959293505050565b5f6020828403121561137c575f80fd5b61064082611260565b5f805f8060608587031215611398575f80fd5b6113a185611260565b935060208501359250604085013567ffffffffffffffff8111156113c3575f80fd5b6113cf878288016112ab565b95989497509550505050565b5f805f805f8060a087890312156113f0575f80fd5b6113f987611260565b955061140760208801611260565b94506040870135935060608701359250608087013567ffffffffffffffff811115611430575f80fd5b61143c89828a016112ab565b979a9699509497509295939492505050565b5f806040838503121561145f575f80fd5b8235915061146f60208401611260565b90509250929050565b5f8060208385031215611489575f80fd5b823567ffffffffffffffff81111561149f575f80fd5b6114ab858286016112ab565b90969095509350505050565b5f602082840312156114c7575f80fd5b815180151581146114d6575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 425f11edc..e10fbebc6 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614667565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614699565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146f7565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614667565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461473f565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614667565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614667565b61137e565b3480156104a8575f80fd5b506103956104b7366004614667565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614667565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c3660046147a4565b6113ac565b6103c261057f366004614804565b6115e8565b34801561058f575f80fd5b506103c261059e366004614667565b611903565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614667565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614667565b6119ae565b348015610690575f80fd5b5061039561069f366004614667565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614699565b611b89565b3480156106da575f80fd5b506103c2611c46565b3480156106ee575f80fd5b506103c26106fd3660046148b5565b611c59565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614667565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614667565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614699565b611f62565b348015610843575f80fd5b5061036b610852366004614699565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614667565b612045565b3480156108a5575f80fd5b506103956108b4366004614699565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614910565b6120f5565b348015610904575f80fd5b506103c2610913366004614699565b6123f9565b348015610923575f80fd5b506103c261093236600461473f565b612452565b348015610942575f80fd5b506103c2610951366004614984565b6127a2565b348015610961575f80fd5b506103c2610970366004614667565b6128e0565b6103c26109833660046149b6565b612983565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614667565b612f15565b3480156109c7575f80fd5b506103c26109d6366004614699565b613084565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614667565b613143565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614667565b61318d565b348015610a6d575f80fd5b506103c2610a7c366004614699565b613230565b348015610a8c575f80fd5b5061039560a95481565b610a9e6132bd565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b706132bd565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613317565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614a0b565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614a1e565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d9981613143565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614a0b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6133b0565b5f80610f088484613317565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd881613143565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614a1e565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613403565b60a25f611275600184614a1e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614a1e565b81526020019081526020015f205f905560a45f6001836112ce9190614a1e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614a31565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06133b0565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a4c565b6115729190614a0b565b10156115da575f6115896080840160608501614a63565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e482826134c0565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6116406133b0565b60ac54609e545f90815260a26020526040812054909142916116629190614a0b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a4c565b6116e89190614a0b565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a63565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc88886134c0565b5f806117c88888613317565b915091505f6117db836001015160c01c90565b90505f6117e98460d9015190565b90505f6118016117fc60208f018f614a84565b613317565b9150508082146118795760405162461bcd60e51b815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f83815260a1602052604090205484146118d55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f83815260a260205260409020426001909101556118f4858a8a613bee565b50505050505050505050505050565b61190b6132bd565b5f8111801561191c57506099548114155b6119685760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156119ce57505f5460ff8083169116105b611a405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a5e5f5460ff1690565b60ff16600214611ab05760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611b235760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611b4c57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b611b916132bd565b6001600160a01b0381165f908152609f602052604090205460ff16611bf85760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c4e6132bd565b611c575f613da1565b565b5f54610100900460ff1615808015611c7757505f54600160ff909116105b80611c905750303b158015611c9057505f5460ff166001145b611d025760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611d23575f805461ff0019166101001790555b6001600160a01b0386161580611d4057506001600160a01b038516155b15611d77576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611dcd5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611dd5613e0a565b611ddd613e8e565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f59575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f6a6132bd565b6001600160a01b03811615801590611f905750609c546001600160a01b03828116911614155b611fdc5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61204d6132bd565b5f8111801561205d575060648111155b801561206b575060a9548114155b6120b75760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016119a2565b60a854156121455760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61214d6133b0565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dd9190614a31565b6122295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806122358686613317565b915091505f612248836001015160c01c90565b5f81815260a1602052604090205490915082146122a75760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6122b081613143565b6122fc5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161233891614a0b565b116123ae575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526123a991839190613f12565b611f59565b6123b9838686613bee565b611f5981336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061406e565b6124016132bd565b60aa80545f909155612413828261413a565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016119a2565b61245a6132bd565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124d15760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124dd8484613317565b915091505f6124f0836001015160c01c90565b905080156125405760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f61254c846079015190565b90508061259b5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125f05760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125fc856019015190565b036126495760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612675856039015190565b146126c25760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6127aa6132bd565b80156128ae576127b86141e4565b60a65460ff161561286d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161280c908490614a0b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128b661423e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612890565b50565b6128e86132bd565b5f811180156128f9575060ac548114155b6129455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b91016119a2565b335f908152609f602052604090205460ff166129e15760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a85415612a315760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612a396133b0565b60a65460ff1615612a8c5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612ae75760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b4e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b618267ffffffffffffffff1661137e565b612bad5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612c285760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612cb85760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2c9190614a4c565b341015612d7b5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e9391815260200190565b60405180910390a35f609d546001612eab9190614a0b565b90505b609e548111612f03578267ffffffffffffffff168114612ef1576099545f82815260a2602052604081206001018054909190612eeb908490614a0b565b90915550505b80612efb81614ae5565b915050612eae565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612f3557505f5460ff8083169116105b612fa75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001781558290036130095760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b335f90815260a56020526040812054908190036130e35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130fc828261413a565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161313791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6131956132bd565b5f811180156131a657506098548114155b6131f25760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016119a2565b6132386132bd565b6001600160a01b0381166132b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b6128dd81613da1565b6033546001600160a01b03163314611c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6133248585614277565b90505f8160ff165f036133455761333b86866142e7565b90945090506133a2565b8160ff1660010361335a5761333b8686614350565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c575760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361340e575050565b8082035f5b828110156134ba5761010081840381111561342d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613490575f80fd5b505af11580156134a2573d5f803e3d5ffd5b50505050610100830192505061010081019050613413565b50505050565b6134cd6020830183614b1c565b60ff1615806134eb57506134e46020830183614b1c565b60ff166001145b6135375760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356135885760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135d95760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135eb6117fc6020860186614a84565b915091505f6135fe836001015160c01c90565b90505f60a18161360f846001614a0b565b81526020019081526020015f20541461366a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136bb5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146137175760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146137775760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f613786846011015160c01c90565b90505f6137b261379c6060890160408a01614b3c565b6137ac60808a0160608b01614a63565b846143a3565b90506137c46080880160608901614a63565b6001939093019261ffff1691909101905f8049156137e3575f49613805565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961381660208a018a614b1c565b60ff1660010361382557506101015b60408051828101909152965061384a8761384260208c018c614b1c565b60ff166143e7565b60c085901b60018801526138788761386860808c0160608d01614a63565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138dc876138bd60208b018b614a84565b6040516138cb929190614b55565b604051809103902060b99190910152565b60d9870186905260016138f260208b018b614b1c565b60ff1610613924576139248761390e60608c0160408d01614b3c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139835760a7545f90815260a46020526040902060020154609954429161397691614a0b565b6139809190614a1e565b90505b604051806080016040528042815260200182609854426139a39190614a0b565b6139ad9190614a0b565b81526020016139c260608d0160408e01614b3c565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a649190614a4c565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613acc90613ac6908c018c614a84565b5f6143ee565b5f613ada60408d018d614a84565b6040518663ffffffff1660e01b8152600401613afa959493929190614bab565b602060405180830381865afa158015613b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b399190614a31565b613bab5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613c3b5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c4a846001015160c01c90565b90505f613c58856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c87876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d49885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d6d959493929190614c1e565b5f6040518083038186803b158015613d83575f80fd5b505afa158015613d95573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c57614442565b5f54610100900460ff16613f0a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c576144ca565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fba9190614a4c565b5f86815260a46020526040902060010154909150613fd9908290614a0b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614018908490614a0b565b909155505060405161402b908490614c4f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140929084614c7b565b61409c9190614c92565b90506140a88183614a1e565b60aa5f8282546140b89190614a0b565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140e4908490614a0b565b90915550506040516140f7908490614c4f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b50509050806141df5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141ec6133b0565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142213390565b6040516001600160a01b03909116815260200160405180910390a1565b61424661454f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614221565b5f816142c55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f8181106142d7576142d7614cca565b919091013560f81c949350505050565b5f8160f981101561433a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f81610101811461433a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143d88161ffff8716866145a1565b82900390912095945050505050565b8082535050565b60605f80808080614401888a018a614de4565b955095509550955095505081871061441f57945061443b9350505050565b83871061443357829550505050505061443b565b509293505050505b9392505050565b5f54610100900460ff166144be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166145465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c5733613da1565b60655460ff16611c575760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145b057508261443b565b609b546001600160a01b03165f5b8481101561465d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146489190614a4c565b875250602090950194600193840193016145be565b5093949350505050565b5f60208284031215614677575f80fd5b5035919050565b80356001600160a01b0381168114614694575f80fd5b919050565b5f602082840312156146a9575f80fd5b61443b8261467e565b5f8083601f8401126146c2575f80fd5b50813567ffffffffffffffff8111156146d9575f80fd5b6020830191508360208285010111156146f0575f80fd5b9250929050565b5f805f60408486031215614709575f80fd5b833567ffffffffffffffff81111561471f575f80fd5b61472b868287016146b2565b909790965060209590950135949350505050565b5f8060208385031215614750575f80fd5b823567ffffffffffffffff811115614766575f80fd5b614772858286016146b2565b90969095509350505050565b5f60e0828403121561478e575f80fd5b50919050565b5f6060828403121561478e575f80fd5b5f80604083850312156147b5575f80fd5b823567ffffffffffffffff808211156147cc575f80fd5b6147d88683870161477e565b935060208501359150808211156147ed575f80fd5b506147fa85828601614794565b9150509250929050565b5f805f805f8060808789031215614819575f80fd5b863567ffffffffffffffff80821115614830575f80fd5b61483c8a838b0161477e565b97506020890135915080821115614851575f80fd5b61485d8a838b01614794565b96506040890135915080821115614872575f80fd5b61487e8a838b016146b2565b90965094506060890135915080821115614896575f80fd5b506148a389828a016146b2565b979a9699509497509295939492505050565b5f805f805f8060c087890312156148ca575f80fd5b6148d38761467e565b95506148e16020880161467e565b94506148ef6040880161467e565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614923575f80fd5b843567ffffffffffffffff8082111561493a575f80fd5b614946888389016146b2565b9096509450602087013591508082111561495e575f80fd5b5061496b878288016146b2565b95989497509550505050565b80151581146128dd575f80fd5b5f60208284031215614994575f80fd5b813561443b81614977565b803567ffffffffffffffff81168114614694575f80fd5b5f80604083850312156149c7575f80fd5b6149d08361499f565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a66149de565b818103818111156113a6576113a66149de565b5f60208284031215614a41575f80fd5b815161443b81614977565b5f60208284031215614a5c575f80fd5b5051919050565b5f60208284031215614a73575f80fd5b813561ffff8116811461443b575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ab7575f80fd5b83018035915067ffffffffffffffff821115614ad1575f80fd5b6020019150368190038213156146f0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b1557614b156149de565b5060010190565b5f60208284031215614b2c575f80fd5b813560ff8116811461443b575f80fd5b5f60208284031215614b4c575f80fd5b61443b8261499f565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bf55784516001600160a01b031683529383019391830191600101614bd0565b50508760408601528481036060860152614c10818789614b64565b9a9950505050505050505050565b858152846020820152608060408201525f614c3d608083018587614b64565b90508260608301529695505050505050565b5f82515f5b81811015614c6e5760208186018101518583015201614c54565b505f920191825250919050565b80820281158282048414176113a6576113a66149de565b5f82614cc5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d33575f80fd5b8135602067ffffffffffffffff80831115614d5057614d50614cf7565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d9357614d93614cf7565b6040529384526020818701810194908101925087851115614db2575f80fd5b6020870191505b84821015614dd957614dca8261467e565b83529183019190830190614db9565b979650505050505050565b5f805f805f8060c08789031215614df9575f80fd5b86359550602087013567ffffffffffffffff80821115614e17575f80fd5b614e238a838b01614d24565b9650604089013595506060890135915080821115614e3f575f80fd5b614e4b8a838b01614d24565b94506080890135935060a0890135915080821115614e67575f80fd5b50614e7489828a01614d24565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461461f565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614651565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146af565b610b68565b3480156103ee575f80fd5b5061036b6103fd36600461461f565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146f7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461461f565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461461f565b61137e565b3480156104a8575f80fd5b506103956104b736600461461f565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461461f565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461475c565b6113ac565b6103c261057f3660046147bc565b6115e8565b34801561058f575f80fd5b506103c261059e36600461461f565b6118b6565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d436600461461f565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c261068036600461461f565b611961565b348015610690575f80fd5b5061039561069f36600461461f565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614651565b611b3c565b3480156106da575f80fd5b506103c2611bf9565b3480156106ee575f80fd5b506103c26106fd36600461486d565b611c0c565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a461075236600461461f565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b61080236600461461f565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614651565b611f15565b348015610843575f80fd5b5061036b610852366004614651565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c261089536600461461f565b611ff8565b3480156108a5575f80fd5b506103956108b4366004614651565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f43660046148c8565b6120a8565b348015610904575f80fd5b506103c2610913366004614651565b6123ac565b348015610923575f80fd5b506103c26109323660046146f7565b612405565b348015610942575f80fd5b506103c261095136600461493c565b612755565b348015610961575f80fd5b506103c261097036600461461f565b612893565b6103c261098336600461496e565b612936565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b736600461461f565b612ec8565b3480156109c7575f80fd5b506103c26109d6366004614651565b613037565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a2936600461461f565b6130f6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d36600461461f565b613140565b348015610a6d575f80fd5b506103c2610a7c366004614651565b6131e3565b348015610a8c575f80fd5b5061039560a95481565b610a9e613270565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613270565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb85856132ca565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b87856149c3565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d6001826149d6565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130f6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de49084906149c3565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613363565b5f80610f0884846132ca565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130f6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f96001856149d6565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c6133b6565b60a25f6112756001846149d6565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae90846149d6565b81526020019081526020015f205f905560a45f6001836112ce91906149d6565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c91906149e9565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613363565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a04565b61157291906149c3565b10156115da575f6115896080840160608501614a1b565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613473565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613363565b60ac54609e545f90815260a260205260408120549091429161166291906149c3565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a04565b6116e891906149c3565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a1b565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613473565b5f806117c888886132ca565b915091505f6117db836001015160c01c90565b905080609e541461182e5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461188a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a260205260409020426001909101556118a9838888613ba6565b5050505050505050505050565b6118be613270565b5f811180156118cf57506099548114155b61191b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198157505f5460ff8083169116105b6119f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a115f5460ff1690565b60ff16600214611a635760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611ad65760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aff57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b611b44613270565b6001600160a01b0381165f908152609f602052604090205460ff16611bab5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c01613270565b611c0a5f613d59565b565b5f54610100900460ff1615808015611c2a57505f54600160ff909116105b80611c435750303b158015611c4357505f5460ff166001145b611cb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611cd6575f805461ff0019166101001790555b6001600160a01b0386161580611cf357506001600160a01b038516155b15611d2a576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d88613dc2565b611d90613e46565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f0c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f1d613270565b6001600160a01b03811615801590611f435750609c546001600160a01b03828116911614155b611f8f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612000613270565b5f81118015612010575060648111155b801561201e575060a9548114155b61206a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611955565b60a854156120f85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612100613363565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219091906149e9565b6121dc5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121e886866132ca565b915091505f6121fb836001015160c01c90565b5f81815260a16020526040902054909150821461225a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612263816130f6565b6122af5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122eb916149c3565b11612361575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261235c91839190613eca565b611f0c565b61236c838686613ba6565b611f0c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614026565b6123b4613270565b60aa80545f9091556123c682826140f2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611955565b61240d613270565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124845760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061249084846132ca565b915091505f6124a3836001015160c01c90565b905080156124f35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ff846079015190565b90508061254e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125a35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125af856019015190565b036125fc5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612628856039015190565b146126755760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61275d613270565b80156128615761276b61419c565b60a65460ff16156128205760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127bf9084906149c3565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128696141f6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612843565b50565b61289b613270565b5f811180156128ac575060ac548114155b6128f85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611955565b335f908152609f602052604090205460ff166129945760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129ec613363565b60a65460ff1615612a3f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a9a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b015760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b148267ffffffffffffffff1661137e565b612b605760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612bdb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf9190614a04565b341015612d2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e4691815260200190565b60405180910390a35f609d546001612e5e91906149c3565b90505b609e548111612eb6578267ffffffffffffffff168114612ea4576099545f82815260a2602052604081206001018054909190612e9e9084906149c3565b90915550505b80612eae81614a3c565b915050612e61565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ee857505f5460ff8083169116105b612f5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612fbc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b335f90815260a56020526040812054908190036130965760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130af82826140f2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130ea91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b613148613270565b5f8111801561315957506098548114155b6131a55760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611955565b6131eb613270565b6001600160a01b0381166132675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61289081613d59565b6033546001600160a01b03163314611c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132d7858561422f565b90505f8160ff165f036132f8576132ee868661429f565b9094509050613355565b8160ff1660010361330d576132ee8686614308565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c0a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f036133c1575050565b8082035f5b8281101561346d576101008184038111156133e057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613443575f80fd5b505af1158015613455573d5f803e3d5ffd5b505050506101008301925050610100810190506133c6565b50505050565b6134806020830183614a73565b60ff16158061349e57506134976020830183614a73565b60ff166001145b6134ea5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b608082013561353b5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561358c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135a361359e6020860186614a93565b6132ca565b915091505f6135b6836001015160c01c90565b90505f60a1816135c78460016149c3565b81526020019081526020015f2054146136225760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136735760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136cf5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab602052604090205460808601351461372f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f61373e846011015160c01c90565b90505f61376a6137546060890160408a01614af4565b61376460808a0160608b01614a1b565b8461435b565b905061377c6080880160608901614a1b565b6001939093019261ffff1691909101905f80491561379b575f496137bd565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137ce60208a018a614a73565b60ff166001036137dd57506101015b604080518281019091529650613802876137fa60208c018c614a73565b60ff1661439f565b60c085901b60018801526138308761382060808c0160608d01614a1b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138948761387560208b018b614a93565b604051613883929190614b0d565b604051809103902060b99190910152565b60d9870186905260016138aa60208b018b614a73565b60ff16106138dc576138dc876138c660608c0160408d01614af4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561393b5760a7545f90815260a46020526040902060020154609954429161392e916149c3565b61393891906149d6565b90505b6040518060800160405280428152602001826098544261395b91906149c3565b61396591906149c3565b815260200161397a60608d0160408e01614af4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614a04565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a8490613a7e908c018c614a93565b5f6143a6565b5f613a9260408d018d614a93565b6040518663ffffffff1660e01b8152600401613ab2959493929190614b63565b602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af191906149e9565b613b635760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bf35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c02846001015160c01c90565b90505f613c10856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c3f876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d01885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d25959493929190614bd6565b5f6040518083038186803b158015613d3b575f80fd5b505afa158015613d4d573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a6143fa565b5f54610100900460ff16613ec25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a614482565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f729190614a04565b5f86815260a46020526040902060010154909150613f919082906149c3565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fd09084906149c3565b9091555050604051613fe3908490614c07565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061404a9084614c33565b6140549190614c4a565b905061406081836149d6565b60aa5f82825461407091906149c3565b90915550506001600160a01b0384165f90815260a560205260408120805483929061409c9084906149c3565b90915550506040516140af908490614c07565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614141576040519150601f19603f3d011682016040523d82523d5f602084013e614146565b606091505b50509050806141975760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141a4613363565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141d93390565b6040516001600160a01b03909116815260200160405180910390a1565b6141fe614507565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141d9565b5f8161427d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061428f5761428f614c82565b919091013560f81c949350505050565b5f8160f98110156142f25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142f25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143908161ffff871686614559565b82900390912095945050505050565b8082535050565b60605f808080806143b9888a018a614d9c565b95509550955095509550508187106143d75794506143f39350505050565b8387106143eb5782955050505050506143f3565b509293505050505b9392505050565b5f54610100900460ff166144765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a33613d59565b60655460ff16611c0a5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145685750826143f3565b609b546001600160a01b03165f5b84811015614615576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146009190614a04565b87525060209095019460019384019301614576565b5093949350505050565b5f6020828403121561462f575f80fd5b5035919050565b80356001600160a01b038116811461464c575f80fd5b919050565b5f60208284031215614661575f80fd5b6143f382614636565b5f8083601f84011261467a575f80fd5b50813567ffffffffffffffff811115614691575f80fd5b6020830191508360208285010111156146a8575f80fd5b9250929050565b5f805f604084860312156146c1575f80fd5b833567ffffffffffffffff8111156146d7575f80fd5b6146e38682870161466a565b909790965060209590950135949350505050565b5f8060208385031215614708575f80fd5b823567ffffffffffffffff81111561471e575f80fd5b61472a8582860161466a565b90969095509350505050565b5f60e08284031215614746575f80fd5b50919050565b5f60608284031215614746575f80fd5b5f806040838503121561476d575f80fd5b823567ffffffffffffffff80821115614784575f80fd5b61479086838701614736565b935060208501359150808211156147a5575f80fd5b506147b28582860161474c565b9150509250929050565b5f805f805f80608087890312156147d1575f80fd5b863567ffffffffffffffff808211156147e8575f80fd5b6147f48a838b01614736565b97506020890135915080821115614809575f80fd5b6148158a838b0161474c565b9650604089013591508082111561482a575f80fd5b6148368a838b0161466a565b9096509450606089013591508082111561484e575f80fd5b5061485b89828a0161466a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614882575f80fd5b61488b87614636565b955061489960208801614636565b94506148a760408801614636565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148db575f80fd5b843567ffffffffffffffff808211156148f2575f80fd5b6148fe8883890161466a565b90965094506020870135915080821115614916575f80fd5b506149238782880161466a565b95989497509550505050565b8015158114612890575f80fd5b5f6020828403121561494c575f80fd5b81356143f38161492f565b803567ffffffffffffffff8116811461464c575f80fd5b5f806040838503121561497f575f80fd5b61498883614957565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614996565b818103818111156113a6576113a6614996565b5f602082840312156149f9575f80fd5b81516143f38161492f565b5f60208284031215614a14575f80fd5b5051919050565b5f60208284031215614a2b575f80fd5b813561ffff811681146143f3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6c57614a6c614996565b5060010190565b5f60208284031215614a83575f80fd5b813560ff811681146143f3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac6575f80fd5b83018035915067ffffffffffffffff821115614ae0575f80fd5b6020019150368190038213156146a8575f80fd5b5f60208284031215614b04575f80fd5b6143f382614957565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bad5784516001600160a01b031683529383019391830191600101614b88565b50508760408601528481036060860152614bc8818789614b1c565b9a9950505050505050505050565b858152846020820152608060408201525f614bf5608083018587614b1c565b90508260608301529695505050505050565b5f82515f5b81811015614c265760208186018101518583015201614c0c565b505f920191825250919050565b80820281158282048414176113a6576113a6614996565b5f82614c7d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ceb575f80fd5b8135602067ffffffffffffffff80831115614d0857614d08614caf565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d4b57614d4b614caf565b6040529384526020818701810194908101925087851115614d6a575f80fd5b6020870191505b84821015614d9157614d8282614636565b83529183019190830190614d71565b979650505050505050565b5f805f805f8060c08789031215614db1575f80fd5b86359550602087013567ffffffffffffffff80821115614dcf575f80fd5b614ddb8a838b01614cdc565b9650604089013595506060890135915080821115614df7575f80fd5b614e038a838b01614cdc565b94506080890135935060a0890135915080821115614e1f575f80fd5b50614e2c89828a01614cdc565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle.go b/bindings/bindings/l1messagequeuewithgaspriceoracle.go index 5651c234a..c2a248f6c 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle.go @@ -32,7 +32,7 @@ var ( // L1MessageQueueWithGasPriceOracleMetaData contains all meta data concerning the L1MessageQueueWithGasPriceOracle contract. var L1MessageQueueWithGasPriceOracleMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_rollup\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_enforcedTxGateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"DequeueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"queueIndex\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"QueueTransaction\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGateway\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGateway\",\"type\":\"address\"}],\"name\":\"UpdateEnforcedTxGateway\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldGasOracle\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newGasOracle\",\"type\":\"address\"}],\"name\":\"UpdateGasOracle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldL2BaseFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"UpdateL2BaseFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_oldMaxGasLimit\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"UpdateMaxGasLimit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_oldWhitelistChecker\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"UpdateWhitelistChecker\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ENFORCED_TX_GATEWAAY\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MESSENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ROLLUP_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"appendEnforcedTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_calldata\",\"type\":\"bytes\"}],\"name\":\"calculateIntrinsicGasFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"computeTransactionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_gasLimit\",\"type\":\"uint256\"}],\"name\":\"estimateCrossDomainMessageFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_queueIndex\",\"type\":\"uint256\"}],\"name\":\"getCrossDomainMessage\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFirstUnfinalizedMessageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getMessageEnqueueTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_maxGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_whitelistChecker\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxGasLimit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageEnqueueTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextCrossDomainMessageIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingQueueIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"popCrossDomainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newL2BaseFee\",\"type\":\"uint256\"}],\"name\":\"setL2BaseFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newMaxGasLimit\",\"type\":\"uint256\"}],\"name\":\"updateMaxGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newWhitelistChecker\",\"type\":\"address\"}],\"name\":\"updateWhitelistChecker\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"whitelistChecker\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60e060405234801562000010575f80fd5b50604051620017cb380380620017cb833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115bf6200020c5f395f818161034d0152610a8001525f8181610233015261042701525f81816102bc01526108e401526115bf5ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b736600461122a565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611241565b610424565b005b6101bc6101f2366004611284565b610595565b6101bc6102053660046112f1565b610649565b6101bc60685481565b6101e261022136600461136d565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a636600461122a565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611386565b6108e1565b6101bc60675481565b6101bc61030836600461122a565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113dc565b610a7d565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d36600461122a565b610bae565b6101e261039036600461122a565b610bf4565b6101e26103a336600461144f565b610c3a565b6101bc6103b6366004611479565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136d565b610df3565b6101bc6103ec36600461122a565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b8565b1561063357505f610643565b60655461064090836114de565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e90565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e90565b6108df5f610ef7565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6d565b33731111000000000000000000000000000000001111016109bc81865f878787611069565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a2961151a565b905f5260205f2001549050919050565b6066546067545f911115610a78576067545f908152606c60205260408120549003610a6357504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b285760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8d5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b98838383610f6d565b610ba6868686868686611069565b505050505050565b610bb6610e90565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfc610e90565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5857505f54600160ff909116105b80610c715750303b158015610c7157505f5460ff166001145b610ce35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d47611126565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610dee575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfb610e90565b73ffffffffffffffffffffffffffffffffffffffff8116610e845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8d81610ef7565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe55760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110635760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107c8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611114908a9087908b908b908b90611547565b60405180910390a35050505050505050565b5f54610100900460ff166111a25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112215760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef7565b5f6020828403121561123a575f80fd5b5035919050565b5f8060408385031215611252575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611295575f80fd5b61129e83611261565b946020939093013593505050565b5f8083601f8401126112bc575f80fd5b50813567ffffffffffffffff8111156112d3575f80fd5b6020830191508360208285010111156112ea575f80fd5b9250929050565b5f805f805f805f60c0888a031215611307575f80fd5b61131088611261565b9650602088013595506040880135945061132c60608901611261565b93506080880135925060a088013567ffffffffffffffff81111561134e575f80fd5b61135a8a828b016112ac565b989b979a50959850939692959293505050565b5f6020828403121561137d575f80fd5b61064082611261565b5f805f8060608587031215611399575f80fd5b6113a285611261565b935060208501359250604085013567ffffffffffffffff8111156113c4575f80fd5b6113d0878288016112ac565b95989497509550505050565b5f805f805f8060a087890312156113f1575f80fd5b6113fa87611261565b955061140860208801611261565b94506040870135935060608701359250608087013567ffffffffffffffff811115611431575f80fd5b61143d89828a016112ac565b979a9699509497509295939492505050565b5f8060408385031215611460575f80fd5b8235915061147060208401611261565b90509250929050565b5f806020838503121561148a575f80fd5b823567ffffffffffffffff8111156114a0575f80fd5b6114ac858286016112ac565b90969095509350505050565b5f602082840312156114c8575f80fd5b815180151581146114d7575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", + Bin: "0x60e060405234801562000010575f80fd5b50604051620017ca380380620017ca833981016040819052620000339162000185565b6001600160a01b03831615806200005157506001600160a01b038216155b806200006457506001600160a01b038116155b156200008357604051630ecc6fdf60e41b815260040160405180910390fd5b6200008d620000ab565b6001600160a01b0392831660805290821660a0521660c052620001cc565b5f54610100900460ff1615620001175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161462000167575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b038116811462000180575f80fd5b919050565b5f805f6060848603121562000198575f80fd5b620001a38462000169565b9250620001b36020850162000169565b9150620001c36040850162000169565b90509250925092565b60805160a05160c0516115be6200020c5f395f818161034d0152610a7f01525f8181610233015261042701525f81816102bc01526108e401526115be5ff3fe608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611229565b610405565b6040519081526020015b60405180910390f35b6101e26101dd366004611240565b610424565b005b6101bc6101f2366004611283565b610595565b6101bc6102053660046112f0565b610649565b6101bc60685481565b6101e261022136600461136c565b610839565b6101e26108ce565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611229565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec366004611385565b6108e1565b6101bc60675481565b6101bc610308366004611229565b6109c3565b6101bc610a39565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e26103433660046113db565b610a7c565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d366004611229565b610bad565b6101e2610390366004611229565b610bf3565b6101e26103a336600461144e565b610c39565b6101bc6103b6366004611478565b60100261520801919050565b6101bc60655481565b6101e26103d936600461136c565b610df2565b6101bc6103ec366004611229565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104ae5760405162461bcd60e51b815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b6101008111156105005760405162461bcd60e51b815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104a5565b81606754146105515760405162461bcd60e51b815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104a5565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610603573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061062791906114b7565b1561063357505f610643565b60655461064090836114dd565b90505b92915050565b5f607e816106f3565b5f8161066057506001919050565b5b81156106765760089190911c90600101610661565b919050565b8060808310600181146106b35761069184610652565b60808101835360018301925084816020036008021b83528083019250506106d4565b84841516600181146106c7578483536106cc565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061070660018c8361067b565b90506107146001898361067b565b905061072089826106dc565b905061072e60018b8361067b565b9050600186146001811461079657603887106001811461077b5761075188610652565b8060b701845360018401935088816020036008021b84528084019350508789843791870191610790565b87608001835360018301925087898437918701915b506107a7565b6107a45f89355f1a8461067b565b91505b506107b28c826106dc565b90508181035f8060388310600181146107e5576107ce84610652565b60f78101600882021b8517935060010191506107f0565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b610841610e8f565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6108d6610e8f565b6108df5f610ef6565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff161461098c5760405162461bcd60e51b815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104a5565b610997838383610f6c565b33731111000000000000000000000000000000001111016109bc81865f878787611068565b5050505050565b6066545f908210610a165760405162461bcd60e51b815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104a5565b60668281548110610a2957610a29611519565b905f5260205f2001549050919050565b6066546067545f91118015610a5d57506067545f908152606c602052604090205415155b15610a7757506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610b275760405162461bcd60e51b815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104a5565b73ffffffffffffffffffffffffffffffffffffffff86163b15610b8c5760405162461bcd60e51b815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104a5565b610b97838383610f6c565b610ba5868686868686611068565b505050505050565b610bb5610e8f565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c59101610589565b610bfb610e8f565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead3663299101610589565b5f54610100900460ff1615808015610c5757505f54600160ff909116105b80610c705750303b158015610c7057505f5460ff166001145b610ce25760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104a5565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610d3e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610d46611125565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610ded575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610dfa610e8f565b73ffffffffffffffffffffffffffffffffffffffff8116610e835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104a5565b610e8c81610ef6565b50565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115610fe45760405162461bcd60e51b815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104a5565b6010810261520801808410156110625760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104a5565b50505050565b6066545f61107b8883888a898989610649565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e90611113908a9087908b908b908b90611546565b60405180910390a35050505050505050565b5f54610100900460ff166111a15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df5f54610100900460ff166112205760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104a5565b6108df33610ef6565b5f60208284031215611239575f80fd5b5035919050565b5f8060408385031215611251575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff81168114610676575f80fd5b5f8060408385031215611294575f80fd5b61129d83611260565b946020939093013593505050565b5f8083601f8401126112bb575f80fd5b50813567ffffffffffffffff8111156112d2575f80fd5b6020830191508360208285010111156112e9575f80fd5b9250929050565b5f805f805f805f60c0888a031215611306575f80fd5b61130f88611260565b9650602088013595506040880135945061132b60608901611260565b93506080880135925060a088013567ffffffffffffffff81111561134d575f80fd5b6113598a828b016112ab565b989b979a50959850939692959293505050565b5f6020828403121561137c575f80fd5b61064082611260565b5f805f8060608587031215611398575f80fd5b6113a185611260565b935060208501359250604085013567ffffffffffffffff8111156113c3575f80fd5b6113cf878288016112ab565b95989497509550505050565b5f805f805f8060a087890312156113f0575f80fd5b6113f987611260565b955061140760208801611260565b94506040870135935060608701359250608087013567ffffffffffffffff811115611430575f80fd5b61143c89828a016112ab565b979a9699509497509295939492505050565b5f806040838503121561145f575f80fd5b8235915061146f60208401611260565b90509250929050565b5f8060208385031215611489575f80fd5b823567ffffffffffffffff81111561149f575f80fd5b6114ab858286016112ab565b90969095509350505050565b5f602082840312156114c7575f80fd5b815180151581146114d6575f80fd5b9392505050565b8082028115828204841417610643577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a", } // L1MessageQueueWithGasPriceOracleABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go index a7d44a7d8..beaba5dd0 100644 --- a/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go +++ b/bindings/bindings/l1messagequeuewithgaspriceoracle_more.go @@ -13,7 +13,7 @@ const L1MessageQueueWithGasPriceOracleStorageLayoutJSON = "{\"storage\":[{\"astI var L1MessageQueueWithGasPriceOracleStorageLayout = new(solc.StorageLayout) -var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611396565b610405565b6040519081526020015b60405180910390f35b6101e26101dd3660046113ad565b610424565b005b6101bc6101f23660046113f0565b6105e3565b6101bc61020536600461145d565b610697565b6101bc60685481565b6101e26102213660046114d9565b610887565b6101e261091c565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611396565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec3660046114f2565b61092f565b6101bc60675481565b6101bc610308366004611396565b610a2b565b6101bc610abb565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e2610343366004611548565b610aff565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d366004611396565b610c64565b6101e2610390366004611396565b610caa565b6101e26103a33660046115bb565b610cf0565b6101bc6103b63660046115e5565b60100261520801919050565b6101bc60655481565b6101e26103d93660046114d9565b610ec3565b6101bc6103ec366004611396565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104bf565b816067541461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104bf565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610651573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106759190611624565b1561068157505f610691565b60655461068e908361164a565b90505b92915050565b5f607e81610741565b5f816106ae57506001919050565b5b81156106c45760089190911c906001016106af565b919050565b806080831060018114610701576106df846106a0565b60808101835360018301925084816020036008021b8352808301925050610722565b84841516600181146107155784835361071a565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061075460018c836106c9565b9050610762600189836106c9565b905061076e898261072a565b905061077c60018b836106c9565b905060018614600181146107e45760388710600181146107c95761079f886106a0565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107de565b87608001835360018301925087898437918701915b506107f5565b6107f25f89355f1a846106c9565b91505b506108008c8261072a565b90508181035f8060388310600181146108335761081c846106a0565b60f78101600882021b85179350600101915061083e565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61088f610f7a565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610924610f7a565b61092d5f610ffb565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104bf565b6109ff838383611071565b3373111100000000000000000000000000000000111101610a2481865f8787876111a1565b5050505050565b6066545f908210610a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104bf565b60668281548110610aab57610aab611686565b905f5260205f2001549050919050565b6066546067545f911115610afa576067545f908152606c60205260408120549003610ae557504290565b506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104bf565b73ffffffffffffffffffffffffffffffffffffffff86163b15610c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104bf565b610c4e838383611071565b610c5c8686868686866111a1565b505050505050565b610c6c610f7a565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105d7565b610cb2610f7a565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105d7565b5f54610100900460ff1615808015610d0e57505f54600160ff909116105b80610d275750303b158015610d2757505f5460ff166001145b610db3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104bf565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e0f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610e1761125e565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610ebe575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610ecb610f7a565b73ffffffffffffffffffffffffffffffffffffffff8116610f6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104bf565b610f7781610ffb565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104bf565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115611103576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104bf565b60108102615208018084101561119b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104bf565b50505050565b6066545f6111b48883888a898989610697565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e9061124c908a9087908b908b908b906116b3565b60405180910390a35050505050505050565b5f54610100900460ff166112f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d5f54610100900460ff1661138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d33610ffb565b5f602082840312156113a6575f80fd5b5035919050565b5f80604083850312156113be575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c4575f80fd5b5f8060408385031215611401575f80fd5b61140a836113cd565b946020939093013593505050565b5f8083601f840112611428575f80fd5b50813567ffffffffffffffff81111561143f575f80fd5b602083019150836020828501011115611456575f80fd5b9250929050565b5f805f805f805f60c0888a031215611473575f80fd5b61147c886113cd565b96506020880135955060408801359450611498606089016113cd565b93506080880135925060a088013567ffffffffffffffff8111156114ba575f80fd5b6114c68a828b01611418565b989b979a50959850939692959293505050565b5f602082840312156114e9575f80fd5b61068e826113cd565b5f805f8060608587031215611505575f80fd5b61150e856113cd565b935060208501359250604085013567ffffffffffffffff811115611530575f80fd5b61153c87828801611418565b95989497509550505050565b5f805f805f8060a0878903121561155d575f80fd5b611566876113cd565b9550611574602088016113cd565b94506040870135935060608701359250608087013567ffffffffffffffff81111561159d575f80fd5b6115a989828a01611418565b979a9699509497509295939492505050565b5f80604083850312156115cc575f80fd5b823591506115dc602084016113cd565b90509250929050565b5f80602083850312156115f6575f80fd5b823567ffffffffffffffff81111561160c575f80fd5b61161885828601611418565b90969095509350505050565b5f60208284031215611634575f80fd5b81518015158114611643575f80fd5b9392505050565b8082028115828204841417610691577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" +var L1MessageQueueWithGasPriceOracleDeployedBin = "0x608060405234801561000f575f80fd5b50600436106101a5575f3560e01c8063ae453cd5116100e8578063d99bc80e11610093578063e3176bd51161006e578063e3176bd5146103c2578063f2fde38b146103cb578063f7ca0c51146103de578063fd0ad31e146103fd575f80fd5b8063d99bc80e14610382578063da35a26f14610395578063e172d3a1146103a8575f80fd5b8063bdc6f0a0116100c3578063bdc6f0a014610335578063c276067714610348578063d5ad4a971461036f575f80fd5b8063ae453cd5146102fa578063b59b1a781461030d578063bb7862ca14610315575f80fd5b8063715018a6116101535780638dc73d871161012e5780638dc73d8714610298578063927ede2d146102b75780639b159782146102de578063a85006ca146102f1575f80fd5b8063715018a6146102265780638770d7071461022e5780638da5cb5b1461027a575f80fd5b80635ad9945a116101835780635ad9945a146101f75780635e45da231461020a5780635f9cd92e14610213575f80fd5b806329aa604b146101a95780633c7f5283146101cf5780633e4cbbe6146101e4575b5f80fd5b6101bc6101b7366004611395565b610405565b6040519081526020015b60405180910390f35b6101e26101dd3660046113ac565b610424565b005b6101bc6101f23660046113ef565b6105e3565b6101bc61020536600461145c565b610697565b6101bc60685481565b6101e26102213660046114d8565b610887565b6101e261091c565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c6565b60335473ffffffffffffffffffffffffffffffffffffffff16610255565b6101bc6102a6366004611395565b606c6020525f908152604090205481565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e26102ec3660046114f1565b61092f565b6101bc60675481565b6101bc610308366004611395565b610a2b565b6101bc610abb565b606b546102559073ffffffffffffffffffffffffffffffffffffffff1681565b6101e2610343366004611547565b610afe565b6102557f000000000000000000000000000000000000000000000000000000000000000081565b6101e261037d366004611395565b610c63565b6101e2610390366004611395565b610ca9565b6101e26103a33660046115ba565b610cef565b6101bc6103b63660046115e4565b60100261520801919050565b6101bc60655481565b6101e26103d93660046114d8565b610ec2565b6101bc6103ec366004611395565b5f908152606c602052604090205490565b6066546101bc565b60668181548110610414575f80fd5b5f91825260209091200154905081565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146104c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f4f6e6c792063616c6c61626c652062792074686520726f6c6c7570000000000060448201526064015b60405180910390fd5b610100811115610534576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f706f7020746f6f206d616e79206d65737361676573000000000000000000000060448201526064016104bf565b816067541461059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f737461727420696e646578206d69736d6174636800000000000000000000000060448201526064016104bf565b80820160675560408051838152602081018390527f3d48b97f20730c965868963266b0d25d8abe3f06babb60fc3b2b80c9e8907f2691015b60405180910390a15050565b606b546040517fefc7840100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301525f92169063efc7840190602401602060405180830381865afa158015610651573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106759190611623565b1561068157505f610691565b60655461068e9083611649565b90505b92915050565b5f607e81610741565b5f816106ae57506001919050565b5b81156106c45760089190911c906001016106af565b919050565b806080831060018114610701576106df846106a0565b60808101835360018301925084816020036008021b8352808301925050610722565b84841516600181146107155784835361071a565b608083535b506001820191505b509392505050565b806094815360609290921b60018301525060150190565b6005604051018061075460018c836106c9565b9050610762600189836106c9565b905061076e898261072a565b905061077c60018b836106c9565b905060018614600181146107e45760388710600181146107c95761079f886106a0565b8060b701845360018401935088816020036008021b845280840193505087898437918701916107de565b87608001835360018301925087898437918701915b506107f5565b6107f25f89355f1a846106c9565b91505b506108008c8261072a565b90508181035f8060388310600181146108335761081c846106a0565b60f78101600882021b85179350600101915061083e565b8360c0019250600191505b5086816008021b821791506001810190508060080292508451831c8284610100031b17915080850394505080845250508181038220925050508092505050979650505050505050565b61088f610f79565b606b5460405173ffffffffffffffffffffffffffffffffffffffff8084169216907ff91b2a410a89d46f14ee984a57e6d7892c217f116905371180998e20cef237e5905f90a3606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610924610f79565b61092d5f610ffa565b565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16146109f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4f6e6c792063616c6c61626c6520627920746865204c3143726f7373446f6d6160448201527f696e4d657373656e67657200000000000000000000000000000000000000000060648201526084016104bf565b6109ff838383611070565b3373111100000000000000000000000000000000111101610a2481865f8787876111a0565b5050505050565b6066545f908210610a98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d65737361676520696e646578206f7574206f662072616e676500000000000060448201526064016104bf565b60668281548110610aab57610aab611685565b905f5260205f2001549050919050565b6066546067545f91118015610adf57506067545f908152606c602052604090205415155b15610af957506067545f908152606c602052604090205490565b504290565b337f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f6e6c792063616c6c61626c652062792074686520456e666f7263656454784760448201527f617465776179000000000000000000000000000000000000000000000000000060648201526084016104bf565b73ffffffffffffffffffffffffffffffffffffffff86163b15610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6f6e6c7920454f4100000000000000000000000000000000000000000000000060448201526064016104bf565b610c4d838383611070565b610c5b8686868686866111a0565b505050505050565b610c6b610f79565b606880549082905560408051828152602081018490527fa030881e03ff723954dd0d35500564afab9603555d09d4456a32436f2b2373c591016105d7565b610cb1610f79565b606580549082905560408051828152602081018490527fc5271ba80b67178cc31f04a3755325121400925878dc608432b6fcaead36632991016105d7565b5f54610100900460ff1615808015610d0d57505f54600160ff909116105b80610d265750303b158015610d2657505f5460ff166001145b610db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016104bf565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610e0e575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610e1661125d565b6068839055606b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610ebd575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610eca610f79565b73ffffffffffffffffffffffffffffffffffffffff8116610f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016104bf565b610f7681610ffa565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461092d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104bf565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606854831115611102576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f476173206c696d6974206d757374206e6f7420657863656564206d617847617360448201527f4c696d697400000000000000000000000000000000000000000000000000000060648201526084016104bf565b60108102615208018084101561119a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f496e73756666696369656e7420676173206c696d69742c206d7573742062652060448201527f61626f766520696e7472696e736963206761730000000000000000000000000060648201526084016104bf565b50505050565b6066545f6111b38883888a898989610697565b60668054600181019091557f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354018190555f838152606c6020526040908190204290555190915073ffffffffffffffffffffffffffffffffffffffff80891691908a16907f69cfcb8e6d4192b8aba9902243912587f37e550d75c1fa801491fce26717f37e9061124b908a9087908b908b908b906116b2565b60405180910390a35050505050505050565b5f54610100900460ff166112f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d5f54610100900460ff1661138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016104bf565b61092d33610ffa565b5f602082840312156113a5575f80fd5b5035919050565b5f80604083850312156113bd575f80fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146106c4575f80fd5b5f8060408385031215611400575f80fd5b611409836113cc565b946020939093013593505050565b5f8083601f840112611427575f80fd5b50813567ffffffffffffffff81111561143e575f80fd5b602083019150836020828501011115611455575f80fd5b9250929050565b5f805f805f805f60c0888a031215611472575f80fd5b61147b886113cc565b96506020880135955060408801359450611497606089016113cc565b93506080880135925060a088013567ffffffffffffffff8111156114b9575f80fd5b6114c58a828b01611417565b989b979a50959850939692959293505050565b5f602082840312156114e8575f80fd5b61068e826113cc565b5f805f8060608587031215611504575f80fd5b61150d856113cc565b935060208501359250604085013567ffffffffffffffff81111561152f575f80fd5b61153b87828801611417565b95989497509550505050565b5f805f805f8060a0878903121561155c575f80fd5b611565876113cc565b9550611573602088016113cc565b94506040870135935060608701359250608087013567ffffffffffffffff81111561159c575f80fd5b6115a889828a01611417565b979a9699509497509295939492505050565b5f80604083850312156115cb575f80fd5b823591506115db602084016113cc565b90509250929050565b5f80602083850312156115f5575f80fd5b823567ffffffffffffffff81111561160b575f80fd5b61161785828601611417565b90969095509350505050565b5f60208284031215611633575f80fd5b81518015158114611642575f80fd5b9392505050565b8082028115828204841417610691577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b85815267ffffffffffffffff8516602082015283604082015260806060820152816080820152818360a08301375f81830160a090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010194935050505056fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(L1MessageQueueWithGasPriceOracleStorageLayoutJSON), L1MessageQueueWithGasPriceOracleStorageLayout); err != nil { diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index dce74ff1c..65c8a7a17 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -50,7 +50,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004fec38038062004fec83398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e8e6200015e5f395f818161062b0152613c5d0152614e8e5ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004614667565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614699565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146f7565b610b68565b3480156103ee575f80fd5b5061036b6103fd366004614667565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461473f565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004614667565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004614667565b61137e565b3480156104a8575f80fd5b506103956104b7366004614667565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004614667565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c3660046147a4565b6113ac565b6103c261057f366004614804565b6115e8565b34801561058f575f80fd5b506103c261059e366004614667565b611903565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d4366004614667565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c2610680366004614667565b6119ae565b348015610690575f80fd5b5061039561069f366004614667565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614699565b611b89565b3480156106da575f80fd5b506103c2611c46565b3480156106ee575f80fd5b506103c26106fd3660046148b5565b611c59565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a4610752366004614667565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b610802366004614667565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614699565b611f62565b348015610843575f80fd5b5061036b610852366004614699565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c2610895366004614667565b612045565b3480156108a5575f80fd5b506103956108b4366004614699565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f4366004614910565b6120f5565b348015610904575f80fd5b506103c2610913366004614699565b6123f9565b348015610923575f80fd5b506103c261093236600461473f565b612452565b348015610942575f80fd5b506103c2610951366004614984565b6127a2565b348015610961575f80fd5b506103c2610970366004614667565b6128e0565b6103c26109833660046149b6565b612983565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b7366004614667565b612f15565b3480156109c7575f80fd5b506103c26109d6366004614699565b613084565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a29366004614667565b613143565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d366004614667565b61318d565b348015610a6d575f80fd5b506103c2610a7c366004614699565b613230565b348015610a8c575f80fd5b5061039560a95481565b610a9e6132bd565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b706132bd565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb8585613317565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b8785614a0b565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d600182614a1e565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d9981613143565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de4908490614a0b565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc6133b0565b5f80610f088484613317565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd881613143565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f9600185614a1e565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c613403565b60a25f611275600184614a1e565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae9084614a1e565b81526020019081526020015f205f905560a45f6001836112ce9190614a1e565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c9190614a31565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e06133b0565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a4c565b6115729190614a0b565b10156115da575f6115896080840160608501614a63565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e482826134c0565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6116406133b0565b60ac54609e545f90815260a26020526040812054909142916116629190614a0b565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a4c565b6116e89190614a0b565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a63565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc88886134c0565b5f806117c88888613317565b915091505f6117db836001015160c01c90565b90505f6117e98460d9015190565b90505f6118016117fc60208f018f614a84565b613317565b9150508082146118795760405162461bcd60e51b815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f83815260a1602052604090205484146118d55760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f83815260a260205260409020426001909101556118f4858a8a613bee565b50505050505050505050505050565b61190b6132bd565b5f8111801561191c57506099548114155b6119685760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff161580156119ce57505f5460ff8083169116105b611a405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a5e5f5460ff1690565b60ff16600214611ab05760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611b235760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611b4c57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b611b916132bd565b6001600160a01b0381165f908152609f602052604090205460ff16611bf85760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c4e6132bd565b611c575f613da1565b565b5f54610100900460ff1615808015611c7757505f54600160ff909116105b80611c905750303b158015611c9057505f5460ff166001145b611d025760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611d23575f805461ff0019166101001790555b6001600160a01b0386161580611d4057506001600160a01b038516155b15611d77576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611dcd5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611dd5613e0a565b611ddd613e8e565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f59575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f6a6132bd565b6001600160a01b03811615801590611f905750609c546001600160a01b03828116911614155b611fdc5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61204d6132bd565b5f8111801561205d575060648111155b801561206b575060a9548114155b6120b75760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b022391016119a2565b60a854156121455760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b61214d6133b0565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156121b9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dd9190614a31565b6122295760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806122358686613317565b915091505f612248836001015160c01c90565b5f81815260a1602052604090205490915082146122a75760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b6122b081613143565b6122fc5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff19169055609954600290910154429161233891614a0b565b116123ae575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526123a991839190613f12565b611f59565b6123b9838686613bee565b611f5981336040518060400160405280600d81526020017f50726f6f6620737563636573730000000000000000000000000000000000000081525061406e565b6124016132bd565b60aa80545f909155612413828261413a565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d8791016119a2565b61245a6132bd565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124d15760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f806124dd8484613317565b915091505f6124f0836001015160c01c90565b905080156125405760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f61254c846079015190565b90508061259b5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125f05760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125fc856019015190565b036126495760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612675856039015190565b146126c25760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b6127aa6132bd565b80156128ae576127b86141e4565b60a65460ff161561286d5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a5909252822080549192909161280c908490614a0b565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128b661423e565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612890565b50565b6128e86132bd565b5f811180156128f9575060ac548114155b6129455760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b91016119a2565b335f908152609f602052604090205460ff166129e15760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a85415612a315760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612a396133b0565b60a65460ff1615612a8c5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612ae75760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b4e5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b618267ffffffffffffffff1661137e565b612bad5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612c285760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612cb85760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d08573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d2c9190614a4c565b341015612d7b5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e9391815260200190565b60405180910390a35f609d546001612eab9190614a0b565b90505b609e548111612f03578267ffffffffffffffff168114612ef1576099545f82815260a2602052604081206001018054909190612eeb908490614a0b565b90915550505b80612efb81614ae5565b915050612eae565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612f3557505f5460ff8083169116105b612fa75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff8316176101001781558290036130095760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016119a2565b335f90815260a56020526040812054908190036130e35760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130fc828261413a565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a8260405161313791815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b6131956132bd565b5f811180156131a657506098548114155b6131f25760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a43791016119a2565b6132386132bd565b6001600160a01b0381166132b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b6128dd81613da1565b6033546001600160a01b03163314611c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6133248585614277565b90505f8160ff165f036133455761333b86866142e7565b90945090506133a2565b8160ff1660010361335a5761333b8686614350565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c575760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f0361340e575050565b8082035f5b828110156134ba5761010081840381111561342d57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613490575f80fd5b505af11580156134a2573d5f803e3d5ffd5b50505050610100830192505061010081019050613413565b50505050565b6134cd6020830183614b1c565b60ff1615806134eb57506134e46020830183614b1c565b60ff166001145b6135375760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b60808201356135885760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a08201356135d95760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135eb6117fc6020860186614a84565b915091505f6135fe836001015160c01c90565b90505f60a18161360f846001614a0b565b81526020019081526020015f20541461366a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136bb5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146137175760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab60205260409020546080860135146137775760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f613786846011015160c01c90565b90505f6137b261379c6060890160408a01614b3c565b6137ac60808a0160608b01614a63565b846143a3565b90506137c46080880160608901614a63565b6001939093019261ffff1691909101905f8049156137e3575f49613805565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961381660208a018a614b1c565b60ff1660010361382557506101015b60408051828101909152965061384a8761384260208c018c614b1c565b60ff166143e7565b60c085901b60018801526138788761386860808c0160608d01614a63565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138dc876138bd60208b018b614a84565b6040516138cb929190614b55565b604051809103902060b99190910152565b60d9870186905260016138f260208b018b614b1c565b60ff1610613924576139248761390e60608c0160408d01614b3c565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139835760a7545f90815260a46020526040902060020154609954429161397691614a0b565b6139809190614a1e565b90505b604051806080016040528042815260200182609854426139a39190614a0b565b6139ad9190614a0b565b81526020016139c260608d0160408e01614b3c565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a40573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a649190614a4c565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613acc90613ac6908c018c614a84565b5f6143ee565b5f613ada60408d018d614a84565b6040518663ffffffff1660e01b8152600401613afa959493929190614bab565b602060405180830381865afa158015613b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b399190614a31565b613bab5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613c3b5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c4a846001015160c01c90565b90505f613c58856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c87876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d49885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d6d959493929190614c1e565b5f6040518083038186803b158015613d83575f80fd5b505afa158015613d95573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e865760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c57614442565b5f54610100900460ff16613f0a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c576144ca565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613fba9190614a4c565b5f86815260a46020526040902060010154909150613fd9908290614a0b565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190614018908490614a0b565b909155505060405161402b908490614c4f565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140929084614c7b565b61409c9190614c92565b90506140a88183614a1e565b60aa5f8282546140b89190614a0b565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140e4908490614a0b565b90915550506040516140f7908490614c4f565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614189576040519150601f19603f3d011682016040523d82523d5f602084013e61418e565b606091505b50509050806141df5760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141ec6133b0565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586142213390565b6040516001600160a01b03909116815260200160405180910390a1565b61424661454f565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614221565b5f816142c55760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f8181106142d7576142d7614cca565b919091013560f81c949350505050565b5f8160f981101561433a5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f81610101811461433a5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143d88161ffff8716866145a1565b82900390912095945050505050565b8082535050565b60605f80808080614401888a018a614de4565b955095509550955095505081871061441f57945061443b9350505050565b83871061443357829550505050505061443b565b509293505050505b9392505050565b5f54610100900460ff166144be5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166145465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c5733613da1565b60655460ff16611c575760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145b057508261443b565b609b546001600160a01b03165f5b8481101561465d576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa158015614624573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146489190614a4c565b875250602090950194600193840193016145be565b5093949350505050565b5f60208284031215614677575f80fd5b5035919050565b80356001600160a01b0381168114614694575f80fd5b919050565b5f602082840312156146a9575f80fd5b61443b8261467e565b5f8083601f8401126146c2575f80fd5b50813567ffffffffffffffff8111156146d9575f80fd5b6020830191508360208285010111156146f0575f80fd5b9250929050565b5f805f60408486031215614709575f80fd5b833567ffffffffffffffff81111561471f575f80fd5b61472b868287016146b2565b909790965060209590950135949350505050565b5f8060208385031215614750575f80fd5b823567ffffffffffffffff811115614766575f80fd5b614772858286016146b2565b90969095509350505050565b5f60e0828403121561478e575f80fd5b50919050565b5f6060828403121561478e575f80fd5b5f80604083850312156147b5575f80fd5b823567ffffffffffffffff808211156147cc575f80fd5b6147d88683870161477e565b935060208501359150808211156147ed575f80fd5b506147fa85828601614794565b9150509250929050565b5f805f805f8060808789031215614819575f80fd5b863567ffffffffffffffff80821115614830575f80fd5b61483c8a838b0161477e565b97506020890135915080821115614851575f80fd5b61485d8a838b01614794565b96506040890135915080821115614872575f80fd5b61487e8a838b016146b2565b90965094506060890135915080821115614896575f80fd5b506148a389828a016146b2565b979a9699509497509295939492505050565b5f805f805f8060c087890312156148ca575f80fd5b6148d38761467e565b95506148e16020880161467e565b94506148ef6040880161467e565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215614923575f80fd5b843567ffffffffffffffff8082111561493a575f80fd5b614946888389016146b2565b9096509450602087013591508082111561495e575f80fd5b5061496b878288016146b2565b95989497509550505050565b80151581146128dd575f80fd5b5f60208284031215614994575f80fd5b813561443b81614977565b803567ffffffffffffffff81168114614694575f80fd5b5f80604083850312156149c7575f80fd5b6149d08361499f565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a66149de565b818103818111156113a6576113a66149de565b5f60208284031215614a41575f80fd5b815161443b81614977565b5f60208284031215614a5c575f80fd5b5051919050565b5f60208284031215614a73575f80fd5b813561ffff8116811461443b575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ab7575f80fd5b83018035915067ffffffffffffffff821115614ad1575f80fd5b6020019150368190038213156146f0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b1557614b156149de565b5060010190565b5f60208284031215614b2c575f80fd5b813560ff8116811461443b575f80fd5b5f60208284031215614b4c575f80fd5b61443b8261499f565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bf55784516001600160a01b031683529383019391830191600101614bd0565b50508760408601528481036060860152614c10818789614b64565b9a9950505050505050505050565b858152846020820152608060408201525f614c3d608083018587614b64565b90508260608301529695505050505050565b5f82515f5b81811015614c6e5760208186018101518583015201614c54565b505f920191825250919050565b80820281158282048414176113a6576113a66149de565b5f82614cc5577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614d33575f80fd5b8135602067ffffffffffffffff80831115614d5057614d50614cf7565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d9357614d93614cf7565b6040529384526020818701810194908101925087851115614db2575f80fd5b6020870191505b84821015614dd957614dca8261467e565b83529183019190830190614db9565b979650505050505050565b5f805f805f8060c08789031215614df9575f80fd5b86359550602087013567ffffffffffffffff80821115614e17575f80fd5b614e238a838b01614d24565b9650604089013595506060890135915080821115614e3f575f80fd5b614e4b8a838b01614d24565b94506080890135935060a0890135915080821115614e67575f80fd5b50614e7489828a01614d24565b915050929550929550929556fea164736f6c6343000818000a", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004fa438038062004fa483398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e466200015e5f395f818161062b0152613c150152614e465ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461461f565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614651565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146af565b610b68565b3480156103ee575f80fd5b5061036b6103fd36600461461f565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146f7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461461f565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461461f565b61137e565b3480156104a8575f80fd5b506103956104b736600461461f565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461461f565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461475c565b6113ac565b6103c261057f3660046147bc565b6115e8565b34801561058f575f80fd5b506103c261059e36600461461f565b6118b6565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d436600461461f565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c261068036600461461f565b611961565b348015610690575f80fd5b5061039561069f36600461461f565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614651565b611b3c565b3480156106da575f80fd5b506103c2611bf9565b3480156106ee575f80fd5b506103c26106fd36600461486d565b611c0c565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a461075236600461461f565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b61080236600461461f565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614651565b611f15565b348015610843575f80fd5b5061036b610852366004614651565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c261089536600461461f565b611ff8565b3480156108a5575f80fd5b506103956108b4366004614651565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f43660046148c8565b6120a8565b348015610904575f80fd5b506103c2610913366004614651565b6123ac565b348015610923575f80fd5b506103c26109323660046146f7565b612405565b348015610942575f80fd5b506103c261095136600461493c565b612755565b348015610961575f80fd5b506103c261097036600461461f565b612893565b6103c261098336600461496e565b612936565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b736600461461f565b612ec8565b3480156109c7575f80fd5b506103c26109d6366004614651565b613037565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a2936600461461f565b6130f6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d36600461461f565b613140565b348015610a6d575f80fd5b506103c2610a7c366004614651565b6131e3565b348015610a8c575f80fd5b5061039560a95481565b610a9e613270565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613270565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb85856132ca565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b87856149c3565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d6001826149d6565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130f6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de49084906149c3565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613363565b5f80610f0884846132ca565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130f6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f96001856149d6565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c6133b6565b60a25f6112756001846149d6565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae90846149d6565b81526020019081526020015f205f905560a45f6001836112ce91906149d6565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c91906149e9565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613363565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a04565b61157291906149c3565b10156115da575f6115896080840160608501614a1b565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613473565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613363565b60ac54609e545f90815260a260205260408120549091429161166291906149c3565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a04565b6116e891906149c3565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a1b565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613473565b5f806117c888886132ca565b915091505f6117db836001015160c01c90565b905080609e541461182e5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461188a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a260205260409020426001909101556118a9838888613ba6565b5050505050505050505050565b6118be613270565b5f811180156118cf57506099548114155b61191b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198157505f5460ff8083169116105b6119f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a115f5460ff1690565b60ff16600214611a635760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611ad65760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aff57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b611b44613270565b6001600160a01b0381165f908152609f602052604090205460ff16611bab5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c01613270565b611c0a5f613d59565b565b5f54610100900460ff1615808015611c2a57505f54600160ff909116105b80611c435750303b158015611c4357505f5460ff166001145b611cb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611cd6575f805461ff0019166101001790555b6001600160a01b0386161580611cf357506001600160a01b038516155b15611d2a576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d88613dc2565b611d90613e46565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f0c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f1d613270565b6001600160a01b03811615801590611f435750609c546001600160a01b03828116911614155b611f8f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612000613270565b5f81118015612010575060648111155b801561201e575060a9548114155b61206a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611955565b60a854156120f85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612100613363565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219091906149e9565b6121dc5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121e886866132ca565b915091505f6121fb836001015160c01c90565b5f81815260a16020526040902054909150821461225a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612263816130f6565b6122af5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122eb916149c3565b11612361575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261235c91839190613eca565b611f0c565b61236c838686613ba6565b611f0c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614026565b6123b4613270565b60aa80545f9091556123c682826140f2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611955565b61240d613270565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124845760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061249084846132ca565b915091505f6124a3836001015160c01c90565b905080156124f35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ff846079015190565b90508061254e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125a35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125af856019015190565b036125fc5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612628856039015190565b146126755760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61275d613270565b80156128615761276b61419c565b60a65460ff16156128205760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127bf9084906149c3565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128696141f6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612843565b50565b61289b613270565b5f811180156128ac575060ac548114155b6128f85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611955565b335f908152609f602052604090205460ff166129945760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129ec613363565b60a65460ff1615612a3f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a9a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b015760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b148267ffffffffffffffff1661137e565b612b605760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612bdb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf9190614a04565b341015612d2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e4691815260200190565b60405180910390a35f609d546001612e5e91906149c3565b90505b609e548111612eb6578267ffffffffffffffff168114612ea4576099545f82815260a2602052604081206001018054909190612e9e9084906149c3565b90915550505b80612eae81614a3c565b915050612e61565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ee857505f5460ff8083169116105b612f5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612fbc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b335f90815260a56020526040812054908190036130965760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130af82826140f2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130ea91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b613148613270565b5f8111801561315957506098548114155b6131a55760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611955565b6131eb613270565b6001600160a01b0381166132675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61289081613d59565b6033546001600160a01b03163314611c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132d7858561422f565b90505f8160ff165f036132f8576132ee868661429f565b9094509050613355565b8160ff1660010361330d576132ee8686614308565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c0a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f036133c1575050565b8082035f5b8281101561346d576101008184038111156133e057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613443575f80fd5b505af1158015613455573d5f803e3d5ffd5b505050506101008301925050610100810190506133c6565b50505050565b6134806020830183614a73565b60ff16158061349e57506134976020830183614a73565b60ff166001145b6134ea5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b608082013561353b5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561358c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135a361359e6020860186614a93565b6132ca565b915091505f6135b6836001015160c01c90565b90505f60a1816135c78460016149c3565b81526020019081526020015f2054146136225760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136735760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136cf5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab602052604090205460808601351461372f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f61373e846011015160c01c90565b90505f61376a6137546060890160408a01614af4565b61376460808a0160608b01614a1b565b8461435b565b905061377c6080880160608901614a1b565b6001939093019261ffff1691909101905f80491561379b575f496137bd565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137ce60208a018a614a73565b60ff166001036137dd57506101015b604080518281019091529650613802876137fa60208c018c614a73565b60ff1661439f565b60c085901b60018801526138308761382060808c0160608d01614a1b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138948761387560208b018b614a93565b604051613883929190614b0d565b604051809103902060b99190910152565b60d9870186905260016138aa60208b018b614a73565b60ff16106138dc576138dc876138c660608c0160408d01614af4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561393b5760a7545f90815260a46020526040902060020154609954429161392e916149c3565b61393891906149d6565b90505b6040518060800160405280428152602001826098544261395b91906149c3565b61396591906149c3565b815260200161397a60608d0160408e01614af4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614a04565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a8490613a7e908c018c614a93565b5f6143a6565b5f613a9260408d018d614a93565b6040518663ffffffff1660e01b8152600401613ab2959493929190614b63565b602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af191906149e9565b613b635760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bf35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c02846001015160c01c90565b90505f613c10856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c3f876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d01885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d25959493929190614bd6565b5f6040518083038186803b158015613d3b575f80fd5b505afa158015613d4d573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a6143fa565b5f54610100900460ff16613ec25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a614482565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f729190614a04565b5f86815260a46020526040902060010154909150613f919082906149c3565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fd09084906149c3565b9091555050604051613fe3908490614c07565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061404a9084614c33565b6140549190614c4a565b905061406081836149d6565b60aa5f82825461407091906149c3565b90915550506001600160a01b0384165f90815260a560205260408120805483929061409c9084906149c3565b90915550506040516140af908490614c07565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614141576040519150601f19603f3d011682016040523d82523d5f602084013e614146565b606091505b50509050806141975760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141a4613363565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141d93390565b6040516001600160a01b03909116815260200160405180910390a1565b6141fe614507565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141d9565b5f8161427d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061428f5761428f614c82565b919091013560f81c949350505050565b5f8160f98110156142f25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142f25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143908161ffff871686614559565b82900390912095945050505050565b8082535050565b60605f808080806143b9888a018a614d9c565b95509550955095509550508187106143d75794506143f39350505050565b8387106143eb5782955050505050506143f3565b509293505050505b9392505050565b5f54610100900460ff166144765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a33613d59565b60655460ff16611c0a5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145685750826143f3565b609b546001600160a01b03165f5b84811015614615576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146009190614a04565b87525060209095019460019384019301614576565b5093949350505050565b5f6020828403121561462f575f80fd5b5035919050565b80356001600160a01b038116811461464c575f80fd5b919050565b5f60208284031215614661575f80fd5b6143f382614636565b5f8083601f84011261467a575f80fd5b50813567ffffffffffffffff811115614691575f80fd5b6020830191508360208285010111156146a8575f80fd5b9250929050565b5f805f604084860312156146c1575f80fd5b833567ffffffffffffffff8111156146d7575f80fd5b6146e38682870161466a565b909790965060209590950135949350505050565b5f8060208385031215614708575f80fd5b823567ffffffffffffffff81111561471e575f80fd5b61472a8582860161466a565b90969095509350505050565b5f60e08284031215614746575f80fd5b50919050565b5f60608284031215614746575f80fd5b5f806040838503121561476d575f80fd5b823567ffffffffffffffff80821115614784575f80fd5b61479086838701614736565b935060208501359150808211156147a5575f80fd5b506147b28582860161474c565b9150509250929050565b5f805f805f80608087890312156147d1575f80fd5b863567ffffffffffffffff808211156147e8575f80fd5b6147f48a838b01614736565b97506020890135915080821115614809575f80fd5b6148158a838b0161474c565b9650604089013591508082111561482a575f80fd5b6148368a838b0161466a565b9096509450606089013591508082111561484e575f80fd5b5061485b89828a0161466a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614882575f80fd5b61488b87614636565b955061489960208801614636565b94506148a760408801614636565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148db575f80fd5b843567ffffffffffffffff808211156148f2575f80fd5b6148fe8883890161466a565b90965094506020870135915080821115614916575f80fd5b506149238782880161466a565b95989497509550505050565b8015158114612890575f80fd5b5f6020828403121561494c575f80fd5b81356143f38161492f565b803567ffffffffffffffff8116811461464c575f80fd5b5f806040838503121561497f575f80fd5b61498883614957565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614996565b818103818111156113a6576113a6614996565b5f602082840312156149f9575f80fd5b81516143f38161492f565b5f60208284031215614a14575f80fd5b5051919050565b5f60208284031215614a2b575f80fd5b813561ffff811681146143f3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6c57614a6c614996565b5060010190565b5f60208284031215614a83575f80fd5b813560ff811681146143f3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac6575f80fd5b83018035915067ffffffffffffffff821115614ae0575f80fd5b6020019150368190038213156146a8575f80fd5b5f60208284031215614b04575f80fd5b6143f382614957565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bad5784516001600160a01b031683529383019391830191600101614b88565b50508760408601528481036060860152614bc8818789614b1c565b9a9950505050505050505050565b858152846020820152608060408201525f614bf5608083018587614b1c565b90508260608301529695505050505050565b5f82515f5b81811015614c265760208186018101518583015201614c0c565b505f920191825250919050565b80820281158282048414176113a6576113a6614996565b5f82614c7d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ceb575f80fd5b8135602067ffffffffffffffff80831115614d0857614d08614caf565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d4b57614d4b614caf565b6040529384526020818701810194908101925087851115614d6a575f80fd5b6020870191505b84821015614d9157614d8282614636565b83529183019190830190614d71565b979650505050505050565b5f805f805f8060c08789031215614db1575f80fd5b86359550602087013567ffffffffffffffff80821115614dcf575f80fd5b614ddb8a838b01614cdc565b9650604089013595506060890135915080821115614df7575f80fd5b614e038a838b01614cdc565b94506080890135935060a0890135915080821115614e1f575f80fd5b50614e2c89828a01614cdc565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 19dd191be..3876a60b6 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b6103573660046153ae565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153ed565b610af1565b005b3480156103cf575f80fd5b506103c26103de36600461544b565b610c15565b3480156103ee575f80fd5b5061036b6103fd3660046153ae565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615493565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b6104683660046153ae565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b6104983660046153ae565b611600565b3480156104a8575f80fd5b506103956104b73660046153ae565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e23660046153ae565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154f8565b61162e565b6103c26105a6366004615558565b6118df565b3480156105b6575f80fd5b506103c26105c53660046153ae565b611c96565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb3660046153ae565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a73660046153ae565b611d5b565b3480156106b7575f80fd5b506103956106c63660046153ae565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046153ed565b611fbe565b348015610701575f80fd5b506103c26120cd565b348015610715575f80fd5b506103c2610724366004615609565b6120e0565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e56107863660046153ae565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b6108503660046153ae565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046153ed565b6124a9565b348015610891575f80fd5b5061036b6108a03660046153ed565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e33660046153ae565b6125cd565b3480156108f3575f80fd5b506103956109023660046153ed565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c2610942366004615664565b612697565b348015610952575f80fd5b506103c26109613660046153ed565b612a76565b348015610971575f80fd5b506103c2610980366004615493565b612adc565b348015610990575f80fd5b506103c261099f3660046156d8565b612ec8565b3480156109af575f80fd5b506103c26109be3660046153ae565b61305b565b6103c26109d136600461570a565b613118565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a053660046153ae565b61382d565b348015610a15575f80fd5b506103c2610a243660046153ed565b613a0a565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a843660046153ae565b613af0565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab83660046153ae565b613b47565b348015610ac8575f80fd5b506103c2610ad73660046153ed565b613c04565b348015610ae7575f80fd5b5061039560a95481565b610af9613cb8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613cb8565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613d39565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c878561575f565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e62600182615772565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613af0565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f0690849061575f565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613dec565b5f8061107f8484613d39565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613af0565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f2600185615772565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613e59565b60a25f6114da600184615772565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906115139084615772565b81526020019081526020015f205f905560a45f6001836115339190615772565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d89190615785565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613dec565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184591906157a0565b61184f919061575f565b10156118d1575f61186660808401606085016157b7565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613f23565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613dec565b60ac54609e545f90815260a2602052604081205490914291611973919061575f565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a0991906157a0565b611a13919061575f565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b016157b7565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613f23565b5f80611b278888613d39565b915091505f611b3a836001015160c01c90565b90505f611b488460d9015190565b90505f611b60611b5b60208f018f6157d8565b613d39565b915050808214611bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f626174636820696e666f206d69736d617463682077697468206261746368206860448201527f65616465720000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f83815260a160205260409020548414611c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f83815260a26020526040902042600190910155611c87858a8a614748565b50505050505050505050505050565b611c9e613cb8565b5f81118015611caf57506099548114155b611d15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d7b57505f5460ff8083169116105b611e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e425f5460ff1690565b60ff16600214611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611f6457609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d4f565b611fc6613cb8565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b6120d5613cb8565b6120de5f614922565b565b5f54610100900460ff16158080156120fe57505f54600160ff909116105b806121175750303b15801561211757505f5460ff166001145b6121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121ff575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff86161580612236575073ffffffffffffffffffffffffffffffffffffffff8516155b1561226d576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6122f2614998565b6122fa614a36565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a180156124a0575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6124b1613cb8565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124f15750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b6125d5613cb8565b5f811180156125e5575060648111155b80156125f3575060a9548114155b612659576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d4f565b60a85415612701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b612709613dec565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561278f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b39190615785565b612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806128258686613d39565b915091505f612838836001015160c01c90565b5f81815260a1602052604090205490915082146128b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6128ba81613af0565b612920576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560995460029091015442916129979161575f565b11612a2b575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f75740000000000000000000000000000000000000000000000000091830191909152612a2691839190614ad4565b6124a0565b612a36838686614748565b6124a081336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c57565b612a7e613cb8565b60aa80545f909155612a908282614d3d565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d4f565b612ae4613cb8565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612b818484613d39565b915091505f612b94836001015160c01c90565b90508015612bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612c0a846079015190565b905080612c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612cee856019015190565b03612d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d81856039015190565b14612de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612ed0613cb8565b801561302957612ede614e0e565b60a65460ff1615612fdb5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612f3f90849061575f565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b613031614e93565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612ffe565b50565b613063613cb8565b5f81118015613074575060ac548114155b6130da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d4f565b335f908152609f602052604090205460ff16613190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156131fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b613202613dec565b60a65460ff161561326f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d54106132e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b6133788267ffffffffffffffff16611600565b6133de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a26020526040902060010154421061352a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613594573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135b891906157a0565b341015613621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161378d91815260200190565b60405180910390a35f609d5460016137a5919061575f565b90505b609e5481116137fd578267ffffffffffffffff1681146137eb576099545f82815260a26020526040812060010180549091906137e590849061575f565b90915550505b806137f581615839565b9150506137a8565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561384d57505f5460ff8083169116105b6138d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d4f565b335f90815260a5602052604081205490819003613a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a56020526040812055613a9c8282614d3d565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613ae491815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613b4f613cb8565b5f81118015613b6057506098548114155b613bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d4f565b613c0c613cb8565b73ffffffffffffffffffffffffffffffffffffffff8116613caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b61305881614922565b60335473ffffffffffffffffffffffffffffffffffffffff1633146120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613d468585614eea565b90505f8160ff165f03613d6757613d5d8686614f74565b9094509050613dde565b8160ff16600103613d7c57613d5d8686614ff7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff16156120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613e64575050565b8082035f5b82811015613f1d57610100818403811115613e8357508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613ef3575f80fd5b505af1158015613f05573d5f803e3d5ffd5b50505050610100830192505061010081019050613e69565b50505050565b613f306020830183615870565b60ff161580613f4e5750613f476020830183615870565b60ff166001145b613fb4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b608082013561401f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a082013561408a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f8061409c611b5b60208601866157d8565b915091505f6140af836001015160c01c90565b90505f60a1816140c084600161575f565b81526020019081526020015f205414614135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e5481146141a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214614216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab6020526040902054608086013514614290576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f61429f846011015160c01c90565b90505f6142cb6142b56060890160408a01615890565b6142c560808a0160608b016157b7565b84615064565b90506142dd60808801606089016157b7565b6001939093019261ffff1691909101905f8049156142fc575f4961431e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f961432f60208a018a615870565b60ff1660010361433e57506101015b6040805182810190915296506143638761435b60208c018c615870565b60ff166150a8565b60c085901b60018801526143918761438160808c0160608d016157b7565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143f5876143d660208b018b6157d8565b6040516143e49291906158a9565b604051809103902060b99190910152565b60d98701869052600161440b60208b018b615870565b60ff161061443d5761443d8761442760608c0160408d01615890565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561449c5760a7545f90815260a46020526040902060020154609954429161448f9161575f565b6144999190615772565b90505b604051806080016040528042815260200182609854426144bc919061575f565b6144c6919061575f565b81526020016144db60608d0160408e01615890565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614573573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061459791906157a0565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b7915089359061460c90614606908c018c6157d8565b5f6150af565b5f61461a60408d018d6157d8565b6040518663ffffffff1660e01b815260040161463a9594939291906158ff565b602060405180830381865afa158015614655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146799190615785565b614705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b806147af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f6147be846001015160c01c90565b90505f6147cc856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147fb876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a8486148ca885160f81c90565b858888866040518663ffffffff1660e01b81526004016148ee95949392919061597f565b5f6040518083038186803b158015614904575f80fd5b505afa158015614916573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16614a2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de615103565b5f54610100900460ff16614acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de6151c3565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b8991906157a0565b5f86815260a46020526040902060010154909150614ba890829061575f565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bf490849061575f565b9091555050604051614c079084906159b0565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c7b90846159dc565b614c8591906159f3565b9050614c918183615772565b60aa5f828254614ca1919061575f565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614cda90849061575f565b9091555050604051614ced9084906159b0565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d99576040519150601f19603f3d011682016040523d82523d5f602084013e614d9e565b606091505b5050905080614e09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614e16613dec565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e693390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e9b615262565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e69565b5f81614f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614f6457614f64615a2b565b919091013560f81c949350505050565b5f8160f9811015614fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016150998161ffff8716866152ce565b82900390912095945050505050565b8082535050565b60605f808080806150c2888a018a615b45565b95509550955095509550508187106150e05794506150fc9350505050565b8387106150f45782955050505050506150fc565b509293505050505b9392505050565b5f54610100900460ff16615199576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615259576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120de33614922565b60655460ff166120de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036152dd5750826150fc565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b848110156153a4576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561536b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061538f91906157a0565b875250602090950194600193840193016152f8565b5093949350505050565b5f602082840312156153be575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153e8575f80fd5b919050565b5f602082840312156153fd575f80fd5b6150fc826153c5565b5f8083601f840112615416575f80fd5b50813567ffffffffffffffff81111561542d575f80fd5b602083019150836020828501011115615444575f80fd5b9250929050565b5f805f6040848603121561545d575f80fd5b833567ffffffffffffffff811115615473575f80fd5b61547f86828701615406565b909790965060209590950135949350505050565b5f80602083850312156154a4575f80fd5b823567ffffffffffffffff8111156154ba575f80fd5b6154c685828601615406565b90969095509350505050565b5f60e082840312156154e2575f80fd5b50919050565b5f606082840312156154e2575f80fd5b5f8060408385031215615509575f80fd5b823567ffffffffffffffff80821115615520575f80fd5b61552c868387016154d2565b93506020850135915080821115615541575f80fd5b5061554e858286016154e8565b9150509250929050565b5f805f805f806080878903121561556d575f80fd5b863567ffffffffffffffff80821115615584575f80fd5b6155908a838b016154d2565b975060208901359150808211156155a5575f80fd5b6155b18a838b016154e8565b965060408901359150808211156155c6575f80fd5b6155d28a838b01615406565b909650945060608901359150808211156155ea575f80fd5b506155f789828a01615406565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561561e575f80fd5b615627876153c5565b9550615635602088016153c5565b9450615643604088016153c5565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f8060408587031215615677575f80fd5b843567ffffffffffffffff8082111561568e575f80fd5b61569a88838901615406565b909650945060208701359150808211156156b2575f80fd5b506156bf87828801615406565b95989497509550505050565b8015158114613058575f80fd5b5f602082840312156156e8575f80fd5b81356150fc816156cb565b803567ffffffffffffffff811681146153e8575f80fd5b5f806040838503121561571b575f80fd5b615724836156f3565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561162857611628615732565b8181038181111561162857611628615732565b5f60208284031215615795575f80fd5b81516150fc816156cb565b5f602082840312156157b0575f80fd5b5051919050565b5f602082840312156157c7575f80fd5b813561ffff811681146150fc575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261580b575f80fd5b83018035915067ffffffffffffffff821115615825575f80fd5b602001915036819003821315615444575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361586957615869615732565b5060010190565b5f60208284031215615880575f80fd5b813560ff811681146150fc575f80fd5b5f602082840312156158a0575f80fd5b6150fc826156f3565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561595657845173ffffffffffffffffffffffffffffffffffffffff1683529383019391830191600101615924565b505087604086015284810360608601526159718187896158b8565b9a9950505050505050505050565b858152846020820152608060408201525f61599e6080830185876158b8565b90508260608301529695505050505050565b5f82515f5b818110156159cf57602081860181015185830152016159b5565b505f920191825250919050565b808202811582820484141761162857611628615732565b5f82615a26577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a94575f80fd5b8135602067ffffffffffffffff80831115615ab157615ab1615a58565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615af457615af4615a58565b6040529384526020818701810194908101925087851115615b13575f80fd5b6020870191505b84821015615b3a57615b2b826153c5565b83529183019190830190615b1a565b979650505050505050565b5f805f805f8060c08789031215615b5a575f80fd5b86359550602087013567ffffffffffffffff80821115615b78575f80fd5b615b848a838b01615a85565b9650604089013595506060890135915080821115615ba0575f80fd5b615bac8a838b01615a85565b94506080890135935060a0890135915080821115615bc8575f80fd5b50615bd589828a01615a85565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615366565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153a5565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615403565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615366565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461544b565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615366565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615366565b611600565b3480156104a8575f80fd5b506103956104b7366004615366565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615366565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154b0565b61162e565b6103c26105a6366004615510565b6118df565b3480156105b6575f80fd5b506103c26105c5366004615366565b611c49565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615366565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615366565b611d0e565b3480156106b7575f80fd5b506103956106c6366004615366565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046153a5565b611f71565b348015610701575f80fd5b506103c2612080565b348015610715575f80fd5b506103c26107243660046155c1565b612093565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615366565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615366565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046153a5565b61245c565b348015610891575f80fd5b5061036b6108a03660046153a5565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615366565b612580565b3480156108f3575f80fd5b506103956109023660046153a5565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461561c565b61264a565b348015610952575f80fd5b506103c26109613660046153a5565b612a29565b348015610971575f80fd5b506103c261098036600461544b565b612a8f565b348015610990575f80fd5b506103c261099f366004615690565b612e7b565b3480156109af575f80fd5b506103c26109be366004615366565b61300e565b6103c26109d13660046156c2565b6130cb565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a05366004615366565b6137e0565b348015610a15575f80fd5b506103c2610a243660046153a5565b6139bd565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615366565b613aa3565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615366565b613afa565b348015610ac8575f80fd5b506103c2610ad73660046153a5565b613bb7565b348015610ae7575f80fd5b5061039560a95481565b610af9613c6b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613c6b565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613cec565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c8785615717565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261572a565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613aa3565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f06908490615717565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613d9f565b5f8061107f8484613cec565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613aa3565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561572a565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613e0c565b60a25f6114da60018461572a565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461572a565b81526020019081526020015f205f905560a45f600183611533919061572a565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d8919061573d565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613d9f565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118459190615758565b61184f9190615717565b10156118d1575f611866608084016060850161576f565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613ed6565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613d9f565b60ac54609e545f90815260a26020526040812054909142916119739190615717565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a099190615758565b611a139190615717565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b0161576f565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613ed6565b5f80611b278888613cec565b915091505f611b3a836001015160c01c90565b905080609e5414611ba7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f81815260a26020526040902042600190910155611c3c838888614700565b5050505050505050505050565b611c51613c6b565b5f81118015611c6257506099548114155b611cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d2e57505f5460ff8083169116105b611dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611df55f5460ff1690565b60ff16600214611e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611f1757609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d02565b611f79613c6b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b612088613c6b565b6120915f6148da565b565b5f54610100900460ff16158080156120b157505f54600160ff909116105b806120ca5750303b1580156120ca57505f5460ff166001145b612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121e9575073ffffffffffffffffffffffffffffffffffffffff8516155b15612220576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871661229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6122a5614950565b6122ad6149ee565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612453575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612464613c6b565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124a45750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b61250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612588613c6b565b5f81118015612598575060648111155b80156125a6575060a9548114155b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d02565b60a854156126b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6126bc613d9f565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612742573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612766919061573d565b6127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127d88686613cec565b915091505f6127eb836001015160c01c90565b5f81815260a160205260409020549091508214612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61286d81613aa3565b6128d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161294a91615717565b116129de575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129d991839190614a8c565b612453565b6129e9838686614700565b61245381336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c0f565b612a31613c6b565b60aa80545f909155612a438282614cf5565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d02565b612a97613c6b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612b348484613cec565b915091505f612b47836001015160c01c90565b90508015612bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612bbd846079015190565b905080612c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612c95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612ca1856019015190565b03612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d34856039015190565b14612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e83613c6b565b8015612fdc57612e91614dc6565b60a65460ff1615612f8e5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612ef2908490615717565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612fe4614e4b565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fb1565b50565b613016613c6b565b5f81118015613027575060ac548114155b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d02565b335f908152609f602052604090205460ff16613143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156131ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6131b5613d9f565b60a65460ff1615613222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d5410613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61332b8267ffffffffffffffff16611600565b613391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613547573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061356b9190615758565b3410156135d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374091815260200190565b60405180910390a35f609d5460016137589190615717565b90505b609e5481116137b0578267ffffffffffffffff16811461379e576099545f82815260a2602052604081206001018054909190613798908490615717565b90915550505b806137a881615790565b91505061375b565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380057505f5460ff8083169116105b61388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d02565b335f90815260a5602052604081205490819003613a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a56020526040812055613a4f8282614cf5565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613a9791815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613b02613c6b565b5f81118015613b1357506098548114155b613b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d02565b613bbf613c6b565b73ffffffffffffffffffffffffffffffffffffffff8116613c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b61300b816148da565b60335473ffffffffffffffffffffffffffffffffffffffff163314612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613cf98585614ea2565b90505f8160ff165f03613d1a57613d108686614f2c565b9094509050613d91565b8160ff16600103613d2f57613d108686614faf565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613e17575050565b8082035f5b82811015613ed057610100818403811115613e3657508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613ea6575f80fd5b505af1158015613eb8573d5f803e3d5ffd5b50505050610100830192505061010081019050613e1c565b50505050565b613ee360208301836157c7565b60ff161580613f015750613efa60208301836157c7565b60ff166001145b613f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613fd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a082013561403d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f8061405461404f60208601866157e7565b613cec565b915091505f614067836001015160c01c90565b90505f60a181614078846001615717565b81526020019081526020015f2054146140ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e548114614158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a1602052604090205482146141ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab6020526040902054608086013514614248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f614257846011015160c01c90565b90505f61428361426d6060890160408a01615848565b61427d60808a0160608b0161576f565b8461501c565b9050614295608088016060890161576f565b6001939093019261ffff1691909101905f8049156142b4575f496142d6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142e760208a018a6157c7565b60ff166001036142f657506101015b60408051828101909152965061431b8761431360208c018c6157c7565b60ff16615060565b60c085901b60018801526143498761433960808c0160608d0161576f565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143ad8761438e60208b018b6157e7565b60405161439c929190615861565b604051809103902060b99190910152565b60d9870186905260016143c360208b018b6157c7565b60ff16106143f5576143f5876143df60608c0160408d01615848565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144545760a7545f90815260a46020526040902060020154609954429161444791615717565b614451919061572a565b90505b604051806080016040528042815260200182609854426144749190615717565b61447e9190615717565b815260200161449360608d0160408e01615848565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561452b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061454f9190615758565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145c4906145be908c018c6157e7565b5f615067565b5f6145d260408d018d6157e7565b6040518663ffffffff1660e01b81526004016145f29594939291906158b7565b602060405180830381865afa15801561460d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614631919061573d565b6146bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f614776846001015160c01c90565b90505f614784856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147b3876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614882885160f81c90565b858888866040518663ffffffff1660e01b81526004016148a6959493929190615937565b5f6040518083038186803b1580156148bc575f80fd5b505afa1580156148ce573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120916150bb565b5f54610100900460ff16614a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b61209161517b565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b419190615758565b5f86815260a46020526040902060010154909150614b60908290615717565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bac908490615717565b9091555050604051614bbf908490615968565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c339084615994565b614c3d91906159ab565b9050614c49818361572a565b60aa5f828254614c599190615717565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c92908490615717565b9091555050604051614ca5908490615968565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d51576040519150601f19603f3d011682016040523d82523d5f602084013e614d56565b606091505b5050905080614dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614dce613d9f565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e213390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5361521a565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e21565b5f81614f0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614f1c57614f1c6159e3565b919091013560f81c949350505050565b5f8160f9811015614f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016150518161ffff871686615286565b82900390912095945050505050565b8082535050565b60605f8080808061507a888a018a615afd565b95509550955095509550508187106150985794506150b49350505050565b8387106150ac5782955050505050506150b4565b509293505050505b9392505050565b5f54610100900460ff16615151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612091336148da565b60655460ff16612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036152955750826150b4565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561535c576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153479190615758565b875250602090950194600193840193016152b0565b5093949350505050565b5f60208284031215615376575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153a0575f80fd5b919050565b5f602082840312156153b5575f80fd5b6150b48261537d565b5f8083601f8401126153ce575f80fd5b50813567ffffffffffffffff8111156153e5575f80fd5b6020830191508360208285010111156153fc575f80fd5b9250929050565b5f805f60408486031215615415575f80fd5b833567ffffffffffffffff81111561542b575f80fd5b615437868287016153be565b909790965060209590950135949350505050565b5f806020838503121561545c575f80fd5b823567ffffffffffffffff811115615472575f80fd5b61547e858286016153be565b90969095509350505050565b5f60e0828403121561549a575f80fd5b50919050565b5f6060828403121561549a575f80fd5b5f80604083850312156154c1575f80fd5b823567ffffffffffffffff808211156154d8575f80fd5b6154e48683870161548a565b935060208501359150808211156154f9575f80fd5b50615506858286016154a0565b9150509250929050565b5f805f805f8060808789031215615525575f80fd5b863567ffffffffffffffff8082111561553c575f80fd5b6155488a838b0161548a565b9750602089013591508082111561555d575f80fd5b6155698a838b016154a0565b9650604089013591508082111561557e575f80fd5b61558a8a838b016153be565b909650945060608901359150808211156155a2575f80fd5b506155af89828a016153be565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155d6575f80fd5b6155df8761537d565b95506155ed6020880161537d565b94506155fb6040880161537d565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561562f575f80fd5b843567ffffffffffffffff80821115615646575f80fd5b615652888389016153be565b9096509450602087013591508082111561566a575f80fd5b50615677878288016153be565b95989497509550505050565b801515811461300b575f80fd5b5f602082840312156156a0575f80fd5b81356150b481615683565b803567ffffffffffffffff811681146153a0575f80fd5b5f80604083850312156156d3575f80fd5b6156dc836156ab565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611628576116286156ea565b81810381811115611628576116286156ea565b5f6020828403121561574d575f80fd5b81516150b481615683565b5f60208284031215615768575f80fd5b5051919050565b5f6020828403121561577f575f80fd5b813561ffff811681146150b4575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c0576157c06156ea565b5060010190565b5f602082840312156157d7575f80fd5b813560ff811681146150b4575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261581a575f80fd5b83018035915067ffffffffffffffff821115615834575f80fd5b6020019150368190038213156153fc575f80fd5b5f60208284031215615858575f80fd5b6150b4826156ab565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561590e57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158dc565b50508760408601528481036060860152615929818789615870565b9a9950505050505050505050565b858152846020820152608060408201525f615956608083018587615870565b90508260608301529695505050505050565b5f82515f5b81811015615987576020818601810151858301520161596d565b505f920191825250919050565b8082028115828204841417611628576116286156ea565b5f826159de577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a4c575f80fd5b8135602067ffffffffffffffff80831115615a6957615a69615a10565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615aac57615aac615a10565b6040529384526020818701810194908101925087851115615acb575f80fd5b6020870191505b84821015615af257615ae38261537d565b83529183019190830190615ad2565b979650505050505050565b5f805f805f8060c08789031215615b12575f80fd5b86359550602087013567ffffffffffffffff80821115615b30575f80fd5b615b3c8a838b01615a3d565b9650604089013595506060890135915080821115615b58575f80fd5b615b648a838b01615a3d565b94506080890135935060a0890135915080821115615b80575f80fd5b50615b8d89828a01615a3d565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index f6f948d66..2cfea7ca0 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -365,9 +365,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { (uint256 memPtr, bytes32 _batchHash) = _loadBatchHeader(_batchHeader); // check batch hash uint256 _batchIndex = BatchHeaderCodecV0.getBatchIndex(memPtr); - bytes32 parentBatchHashFromHeader = BatchHeaderCodecV0.getParentBatchHash(memPtr); - (, bytes32 parentBatchHashFromInfo) = _loadBatchHeader(batchDataInput.parentBatchHeader); - require(parentBatchHashFromHeader == parentBatchHashFromInfo, "batch info mismatch with batch header"); + require(lastCommittedBatchIndex == _batchIndex, "incorrect batch header"); require(committedBatches[_batchIndex] == _batchHash, "incorrect batch hash"); // Override finalizeTimestamp for ZKP-backed immediate finality From 5ed2108c8f8a215d82016e4160f61b876390c2e5 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Fri, 16 Jan 2026 00:40:51 +0800 Subject: [PATCH 11/13] clean revert range --- bindings/bindings/rollup.go | 147 +--------------------- contracts/contracts/l1/rollup/IRollup.sol | 5 - 2 files changed, 1 insertion(+), 151 deletions(-) diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 65c8a7a17..76914ba8a 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,7 +49,7 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"startBatchIndex\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"RevertBatchRange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", Bin: "0x60a060405234801562000010575f80fd5b5060405162004fa438038062004fa483398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e466200015e5f395f818161062b0152613c150152614e465ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461461f565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614651565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146af565b610b68565b3480156103ee575f80fd5b5061036b6103fd36600461461f565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146f7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461461f565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461461f565b61137e565b3480156104a8575f80fd5b506103956104b736600461461f565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461461f565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461475c565b6113ac565b6103c261057f3660046147bc565b6115e8565b34801561058f575f80fd5b506103c261059e36600461461f565b6118b6565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d436600461461f565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c261068036600461461f565b611961565b348015610690575f80fd5b5061039561069f36600461461f565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614651565b611b3c565b3480156106da575f80fd5b506103c2611bf9565b3480156106ee575f80fd5b506103c26106fd36600461486d565b611c0c565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a461075236600461461f565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b61080236600461461f565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614651565b611f15565b348015610843575f80fd5b5061036b610852366004614651565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c261089536600461461f565b611ff8565b3480156108a5575f80fd5b506103956108b4366004614651565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f43660046148c8565b6120a8565b348015610904575f80fd5b506103c2610913366004614651565b6123ac565b348015610923575f80fd5b506103c26109323660046146f7565b612405565b348015610942575f80fd5b506103c261095136600461493c565b612755565b348015610961575f80fd5b506103c261097036600461461f565b612893565b6103c261098336600461496e565b612936565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b736600461461f565b612ec8565b3480156109c7575f80fd5b506103c26109d6366004614651565b613037565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a2936600461461f565b6130f6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d36600461461f565b613140565b348015610a6d575f80fd5b506103c2610a7c366004614651565b6131e3565b348015610a8c575f80fd5b5061039560a95481565b610a9e613270565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613270565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb85856132ca565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b87856149c3565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d6001826149d6565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130f6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de49084906149c3565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613363565b5f80610f0884846132ca565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130f6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f96001856149d6565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c6133b6565b60a25f6112756001846149d6565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae90846149d6565b81526020019081526020015f205f905560a45f6001836112ce91906149d6565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c91906149e9565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613363565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a04565b61157291906149c3565b10156115da575f6115896080840160608501614a1b565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613473565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613363565b60ac54609e545f90815260a260205260408120549091429161166291906149c3565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a04565b6116e891906149c3565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a1b565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613473565b5f806117c888886132ca565b915091505f6117db836001015160c01c90565b905080609e541461182e5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461188a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a260205260409020426001909101556118a9838888613ba6565b5050505050505050505050565b6118be613270565b5f811180156118cf57506099548114155b61191b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198157505f5460ff8083169116105b6119f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a115f5460ff1690565b60ff16600214611a635760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611ad65760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aff57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b611b44613270565b6001600160a01b0381165f908152609f602052604090205460ff16611bab5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c01613270565b611c0a5f613d59565b565b5f54610100900460ff1615808015611c2a57505f54600160ff909116105b80611c435750303b158015611c4357505f5460ff166001145b611cb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611cd6575f805461ff0019166101001790555b6001600160a01b0386161580611cf357506001600160a01b038516155b15611d2a576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d88613dc2565b611d90613e46565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f0c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f1d613270565b6001600160a01b03811615801590611f435750609c546001600160a01b03828116911614155b611f8f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612000613270565b5f81118015612010575060648111155b801561201e575060a9548114155b61206a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611955565b60a854156120f85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612100613363565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219091906149e9565b6121dc5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121e886866132ca565b915091505f6121fb836001015160c01c90565b5f81815260a16020526040902054909150821461225a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612263816130f6565b6122af5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122eb916149c3565b11612361575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261235c91839190613eca565b611f0c565b61236c838686613ba6565b611f0c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614026565b6123b4613270565b60aa80545f9091556123c682826140f2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611955565b61240d613270565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124845760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061249084846132ca565b915091505f6124a3836001015160c01c90565b905080156124f35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ff846079015190565b90508061254e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125a35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125af856019015190565b036125fc5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612628856039015190565b146126755760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61275d613270565b80156128615761276b61419c565b60a65460ff16156128205760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127bf9084906149c3565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128696141f6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612843565b50565b61289b613270565b5f811180156128ac575060ac548114155b6128f85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611955565b335f908152609f602052604090205460ff166129945760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129ec613363565b60a65460ff1615612a3f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a9a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b015760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b148267ffffffffffffffff1661137e565b612b605760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612bdb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf9190614a04565b341015612d2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e4691815260200190565b60405180910390a35f609d546001612e5e91906149c3565b90505b609e548111612eb6578267ffffffffffffffff168114612ea4576099545f82815260a2602052604081206001018054909190612e9e9084906149c3565b90915550505b80612eae81614a3c565b915050612e61565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ee857505f5460ff8083169116105b612f5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612fbc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b335f90815260a56020526040812054908190036130965760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130af82826140f2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130ea91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b613148613270565b5f8111801561315957506098548114155b6131a55760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611955565b6131eb613270565b6001600160a01b0381166132675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61289081613d59565b6033546001600160a01b03163314611c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132d7858561422f565b90505f8160ff165f036132f8576132ee868661429f565b9094509050613355565b8160ff1660010361330d576132ee8686614308565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c0a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f036133c1575050565b8082035f5b8281101561346d576101008184038111156133e057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613443575f80fd5b505af1158015613455573d5f803e3d5ffd5b505050506101008301925050610100810190506133c6565b50505050565b6134806020830183614a73565b60ff16158061349e57506134976020830183614a73565b60ff166001145b6134ea5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b608082013561353b5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561358c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135a361359e6020860186614a93565b6132ca565b915091505f6135b6836001015160c01c90565b90505f60a1816135c78460016149c3565b81526020019081526020015f2054146136225760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136735760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136cf5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab602052604090205460808601351461372f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f61373e846011015160c01c90565b90505f61376a6137546060890160408a01614af4565b61376460808a0160608b01614a1b565b8461435b565b905061377c6080880160608901614a1b565b6001939093019261ffff1691909101905f80491561379b575f496137bd565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137ce60208a018a614a73565b60ff166001036137dd57506101015b604080518281019091529650613802876137fa60208c018c614a73565b60ff1661439f565b60c085901b60018801526138308761382060808c0160608d01614a1b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138948761387560208b018b614a93565b604051613883929190614b0d565b604051809103902060b99190910152565b60d9870186905260016138aa60208b018b614a73565b60ff16106138dc576138dc876138c660608c0160408d01614af4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561393b5760a7545f90815260a46020526040902060020154609954429161392e916149c3565b61393891906149d6565b90505b6040518060800160405280428152602001826098544261395b91906149c3565b61396591906149c3565b815260200161397a60608d0160408e01614af4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614a04565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a8490613a7e908c018c614a93565b5f6143a6565b5f613a9260408d018d614a93565b6040518663ffffffff1660e01b8152600401613ab2959493929190614b63565b602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af191906149e9565b613b635760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bf35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c02846001015160c01c90565b90505f613c10856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c3f876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d01885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d25959493929190614bd6565b5f6040518083038186803b158015613d3b575f80fd5b505afa158015613d4d573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a6143fa565b5f54610100900460ff16613ec25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a614482565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f729190614a04565b5f86815260a46020526040902060010154909150613f919082906149c3565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fd09084906149c3565b9091555050604051613fe3908490614c07565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061404a9084614c33565b6140549190614c4a565b905061406081836149d6565b60aa5f82825461407091906149c3565b90915550506001600160a01b0384165f90815260a560205260408120805483929061409c9084906149c3565b90915550506040516140af908490614c07565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614141576040519150601f19603f3d011682016040523d82523d5f602084013e614146565b606091505b50509050806141975760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141a4613363565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141d93390565b6040516001600160a01b03909116815260200160405180910390a1565b6141fe614507565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141d9565b5f8161427d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061428f5761428f614c82565b919091013560f81c949350505050565b5f8160f98110156142f25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142f25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143908161ffff871686614559565b82900390912095945050505050565b8082535050565b60605f808080806143b9888a018a614d9c565b95509550955095509550508187106143d75794506143f39350505050565b8387106143eb5782955050505050506143f3565b509293505050505b9392505050565b5f54610100900460ff166144765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a33613d59565b60655460ff16611c0a5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145685750826143f3565b609b546001600160a01b03165f5b84811015614615576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146009190614a04565b87525060209095019460019384019301614576565b5093949350505050565b5f6020828403121561462f575f80fd5b5035919050565b80356001600160a01b038116811461464c575f80fd5b919050565b5f60208284031215614661575f80fd5b6143f382614636565b5f8083601f84011261467a575f80fd5b50813567ffffffffffffffff811115614691575f80fd5b6020830191508360208285010111156146a8575f80fd5b9250929050565b5f805f604084860312156146c1575f80fd5b833567ffffffffffffffff8111156146d7575f80fd5b6146e38682870161466a565b909790965060209590950135949350505050565b5f8060208385031215614708575f80fd5b823567ffffffffffffffff81111561471e575f80fd5b61472a8582860161466a565b90969095509350505050565b5f60e08284031215614746575f80fd5b50919050565b5f60608284031215614746575f80fd5b5f806040838503121561476d575f80fd5b823567ffffffffffffffff80821115614784575f80fd5b61479086838701614736565b935060208501359150808211156147a5575f80fd5b506147b28582860161474c565b9150509250929050565b5f805f805f80608087890312156147d1575f80fd5b863567ffffffffffffffff808211156147e8575f80fd5b6147f48a838b01614736565b97506020890135915080821115614809575f80fd5b6148158a838b0161474c565b9650604089013591508082111561482a575f80fd5b6148368a838b0161466a565b9096509450606089013591508082111561484e575f80fd5b5061485b89828a0161466a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614882575f80fd5b61488b87614636565b955061489960208801614636565b94506148a760408801614636565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148db575f80fd5b843567ffffffffffffffff808211156148f2575f80fd5b6148fe8883890161466a565b90965094506020870135915080821115614916575f80fd5b506149238782880161466a565b95989497509550505050565b8015158114612890575f80fd5b5f6020828403121561494c575f80fd5b81356143f38161492f565b803567ffffffffffffffff8116811461464c575f80fd5b5f806040838503121561497f575f80fd5b61498883614957565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614996565b818103818111156113a6576113a6614996565b5f602082840312156149f9575f80fd5b81516143f38161492f565b5f60208284031215614a14575f80fd5b5051919050565b5f60208284031215614a2b575f80fd5b813561ffff811681146143f3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6c57614a6c614996565b5060010190565b5f60208284031215614a83575f80fd5b813560ff811681146143f3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac6575f80fd5b83018035915067ffffffffffffffff821115614ae0575f80fd5b6020019150368190038213156146a8575f80fd5b5f60208284031215614b04575f80fd5b6143f382614957565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bad5784516001600160a01b031683529383019391830191600101614b88565b50508760408601528481036060860152614bc8818789614b1c565b9a9950505050505050505050565b858152846020820152608060408201525f614bf5608083018587614b1c565b90508260608301529695505050505050565b5f82515f5b81811015614c265760208186018101518583015201614c0c565b505f920191825250919050565b80820281158282048414176113a6576113a6614996565b5f82614c7d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ceb575f80fd5b8135602067ffffffffffffffff80831115614d0857614d08614caf565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d4b57614d4b614caf565b6040529384526020818701810194908101925087851115614d6a575f80fd5b6020870191505b84821015614d9157614d8282614636565b83529183019190830190614d71565b979650505050505050565b5f805f805f8060c08789031215614db1575f80fd5b86359550602087013567ffffffffffffffff80821115614dcf575f80fd5b614ddb8a838b01614cdc565b9650604089013595506060890135915080821115614df7575f80fd5b614e038a838b01614cdc565b94506080890135935060a0890135915080821115614e1f575f80fd5b50614e2c89828a01614cdc565b915050929550929550929556fea164736f6c6343000818000a", } @@ -3169,151 +3169,6 @@ func (_Rollup *RollupFilterer) ParseRevertBatch(log types.Log) (*RollupRevertBat return event, nil } -// RollupRevertBatchRangeIterator is returned from FilterRevertBatchRange and is used to iterate over the raw logs and unpacked data for RevertBatchRange events raised by the Rollup contract. -type RollupRevertBatchRangeIterator struct { - Event *RollupRevertBatchRange // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RollupRevertBatchRangeIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RollupRevertBatchRange) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RollupRevertBatchRange) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RollupRevertBatchRangeIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RollupRevertBatchRangeIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RollupRevertBatchRange represents a RevertBatchRange event raised by the Rollup contract. -type RollupRevertBatchRange struct { - StartBatchIndex *big.Int - Count *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRevertBatchRange is a free log retrieval operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. -// -// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) -func (_Rollup *RollupFilterer) FilterRevertBatchRange(opts *bind.FilterOpts, startBatchIndex []*big.Int) (*RollupRevertBatchRangeIterator, error) { - - var startBatchIndexRule []interface{} - for _, startBatchIndexItem := range startBatchIndex { - startBatchIndexRule = append(startBatchIndexRule, startBatchIndexItem) - } - - logs, sub, err := _Rollup.contract.FilterLogs(opts, "RevertBatchRange", startBatchIndexRule) - if err != nil { - return nil, err - } - return &RollupRevertBatchRangeIterator{contract: _Rollup.contract, event: "RevertBatchRange", logs: logs, sub: sub}, nil -} - -// WatchRevertBatchRange is a free log subscription operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. -// -// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) -func (_Rollup *RollupFilterer) WatchRevertBatchRange(opts *bind.WatchOpts, sink chan<- *RollupRevertBatchRange, startBatchIndex []*big.Int) (event.Subscription, error) { - - var startBatchIndexRule []interface{} - for _, startBatchIndexItem := range startBatchIndex { - startBatchIndexRule = append(startBatchIndexRule, startBatchIndexItem) - } - - logs, sub, err := _Rollup.contract.WatchLogs(opts, "RevertBatchRange", startBatchIndexRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RollupRevertBatchRange) - if err := _Rollup.contract.UnpackLog(event, "RevertBatchRange", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRevertBatchRange is a log parse operation binding the contract event 0x2890bceda88e7dee580ab3fba38cbadf12c1a5db04e8852138cf60175adee11d. -// -// Solidity: event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count) -func (_Rollup *RollupFilterer) ParseRevertBatchRange(log types.Log) (*RollupRevertBatchRange, error) { - event := new(RollupRevertBatchRange) - if err := _Rollup.contract.UnpackLog(event, "RevertBatchRange", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RollupRollupDelayPeriodUpdateIterator is returned from FilterRollupDelayPeriodUpdate and is used to iterate over the raw logs and unpacked data for RollupDelayPeriodUpdate events raised by the Rollup contract. type RollupRollupDelayPeriodUpdateIterator struct { Event *RollupRollupDelayPeriodUpdate // Event containing the contract specifics and raw log diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 73edfa417..6f03d46fa 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -89,11 +89,6 @@ interface IRollup { /// @param batchHash The hash of the batch event RevertBatch(uint256 indexed batchIndex, bytes32 indexed batchHash); - /// @notice Emitted when a range of batches is reverted in commitBatchWithProof. - /// @param startBatchIndex The starting batch index (inclusive). - /// @param count The number of batches reverted. - event RevertBatchRange(uint256 indexed startBatchIndex, uint256 count); - /// @notice Emitted when a batch is finalized. /// @param batchIndex The index of the batch. /// @param batchHash The hash of the batch From db36567957b83bff58fc28439d620335ce595ab6 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Fri, 16 Jan 2026 01:12:55 +0800 Subject: [PATCH 12/13] add comment --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 10 +++++----- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/IRollup.sol | 14 ++++++++++++++ contracts/contracts/l1/rollup/Rollup.sol | 10 +++++++++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index e10fbebc6..3504b2b05 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461461f565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614651565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146af565b610b68565b3480156103ee575f80fd5b5061036b6103fd36600461461f565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146f7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461461f565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461461f565b61137e565b3480156104a8575f80fd5b506103956104b736600461461f565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461461f565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461475c565b6113ac565b6103c261057f3660046147bc565b6115e8565b34801561058f575f80fd5b506103c261059e36600461461f565b6118b6565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d436600461461f565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c261068036600461461f565b611961565b348015610690575f80fd5b5061039561069f36600461461f565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614651565b611b3c565b3480156106da575f80fd5b506103c2611bf9565b3480156106ee575f80fd5b506103c26106fd36600461486d565b611c0c565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a461075236600461461f565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b61080236600461461f565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614651565b611f15565b348015610843575f80fd5b5061036b610852366004614651565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c261089536600461461f565b611ff8565b3480156108a5575f80fd5b506103956108b4366004614651565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f43660046148c8565b6120a8565b348015610904575f80fd5b506103c2610913366004614651565b6123ac565b348015610923575f80fd5b506103c26109323660046146f7565b612405565b348015610942575f80fd5b506103c261095136600461493c565b612755565b348015610961575f80fd5b506103c261097036600461461f565b612893565b6103c261098336600461496e565b612936565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b736600461461f565b612ec8565b3480156109c7575f80fd5b506103c26109d6366004614651565b613037565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a2936600461461f565b6130f6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d36600461461f565b613140565b348015610a6d575f80fd5b506103c2610a7c366004614651565b6131e3565b348015610a8c575f80fd5b5061039560a95481565b610a9e613270565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613270565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb85856132ca565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b87856149c3565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d6001826149d6565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130f6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de49084906149c3565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613363565b5f80610f0884846132ca565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130f6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f96001856149d6565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c6133b6565b60a25f6112756001846149d6565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae90846149d6565b81526020019081526020015f205f905560a45f6001836112ce91906149d6565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c91906149e9565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613363565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a04565b61157291906149c3565b10156115da575f6115896080840160608501614a1b565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613473565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613363565b60ac54609e545f90815260a260205260408120549091429161166291906149c3565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a04565b6116e891906149c3565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a1b565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613473565b5f806117c888886132ca565b915091505f6117db836001015160c01c90565b905080609e541461182e5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461188a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a260205260409020426001909101556118a9838888613ba6565b5050505050505050505050565b6118be613270565b5f811180156118cf57506099548114155b61191b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198157505f5460ff8083169116105b6119f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a115f5460ff1690565b60ff16600214611a635760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611ad65760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aff57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b611b44613270565b6001600160a01b0381165f908152609f602052604090205460ff16611bab5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c01613270565b611c0a5f613d59565b565b5f54610100900460ff1615808015611c2a57505f54600160ff909116105b80611c435750303b158015611c4357505f5460ff166001145b611cb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611cd6575f805461ff0019166101001790555b6001600160a01b0386161580611cf357506001600160a01b038516155b15611d2a576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d88613dc2565b611d90613e46565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f0c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f1d613270565b6001600160a01b03811615801590611f435750609c546001600160a01b03828116911614155b611f8f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612000613270565b5f81118015612010575060648111155b801561201e575060a9548114155b61206a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611955565b60a854156120f85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612100613363565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219091906149e9565b6121dc5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121e886866132ca565b915091505f6121fb836001015160c01c90565b5f81815260a16020526040902054909150821461225a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612263816130f6565b6122af5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122eb916149c3565b11612361575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261235c91839190613eca565b611f0c565b61236c838686613ba6565b611f0c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614026565b6123b4613270565b60aa80545f9091556123c682826140f2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611955565b61240d613270565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124845760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061249084846132ca565b915091505f6124a3836001015160c01c90565b905080156124f35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ff846079015190565b90508061254e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125a35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125af856019015190565b036125fc5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612628856039015190565b146126755760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61275d613270565b80156128615761276b61419c565b60a65460ff16156128205760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127bf9084906149c3565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128696141f6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612843565b50565b61289b613270565b5f811180156128ac575060ac548114155b6128f85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611955565b335f908152609f602052604090205460ff166129945760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129ec613363565b60a65460ff1615612a3f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a9a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b015760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b148267ffffffffffffffff1661137e565b612b605760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612bdb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf9190614a04565b341015612d2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e4691815260200190565b60405180910390a35f609d546001612e5e91906149c3565b90505b609e548111612eb6578267ffffffffffffffff168114612ea4576099545f82815260a2602052604081206001018054909190612e9e9084906149c3565b90915550505b80612eae81614a3c565b915050612e61565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ee857505f5460ff8083169116105b612f5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612fbc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b335f90815260a56020526040812054908190036130965760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130af82826140f2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130ea91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b613148613270565b5f8111801561315957506098548114155b6131a55760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611955565b6131eb613270565b6001600160a01b0381166132675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61289081613d59565b6033546001600160a01b03163314611c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132d7858561422f565b90505f8160ff165f036132f8576132ee868661429f565b9094509050613355565b8160ff1660010361330d576132ee8686614308565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c0a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f036133c1575050565b8082035f5b8281101561346d576101008184038111156133e057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613443575f80fd5b505af1158015613455573d5f803e3d5ffd5b505050506101008301925050610100810190506133c6565b50505050565b6134806020830183614a73565b60ff16158061349e57506134976020830183614a73565b60ff166001145b6134ea5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b608082013561353b5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561358c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135a361359e6020860186614a93565b6132ca565b915091505f6135b6836001015160c01c90565b90505f60a1816135c78460016149c3565b81526020019081526020015f2054146136225760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136735760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136cf5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab602052604090205460808601351461372f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f61373e846011015160c01c90565b90505f61376a6137546060890160408a01614af4565b61376460808a0160608b01614a1b565b8461435b565b905061377c6080880160608901614a1b565b6001939093019261ffff1691909101905f80491561379b575f496137bd565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137ce60208a018a614a73565b60ff166001036137dd57506101015b604080518281019091529650613802876137fa60208c018c614a73565b60ff1661439f565b60c085901b60018801526138308761382060808c0160608d01614a1b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138948761387560208b018b614a93565b604051613883929190614b0d565b604051809103902060b99190910152565b60d9870186905260016138aa60208b018b614a73565b60ff16106138dc576138dc876138c660608c0160408d01614af4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561393b5760a7545f90815260a46020526040902060020154609954429161392e916149c3565b61393891906149d6565b90505b6040518060800160405280428152602001826098544261395b91906149c3565b61396591906149c3565b815260200161397a60608d0160408e01614af4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614a04565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a8490613a7e908c018c614a93565b5f6143a6565b5f613a9260408d018d614a93565b6040518663ffffffff1660e01b8152600401613ab2959493929190614b63565b602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af191906149e9565b613b635760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bf35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c02846001015160c01c90565b90505f613c10856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c3f876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d01885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d25959493929190614bd6565b5f6040518083038186803b158015613d3b575f80fd5b505afa158015613d4d573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a6143fa565b5f54610100900460ff16613ec25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a614482565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f729190614a04565b5f86815260a46020526040902060010154909150613f919082906149c3565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fd09084906149c3565b9091555050604051613fe3908490614c07565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061404a9084614c33565b6140549190614c4a565b905061406081836149d6565b60aa5f82825461407091906149c3565b90915550506001600160a01b0384165f90815260a560205260408120805483929061409c9084906149c3565b90915550506040516140af908490614c07565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614141576040519150601f19603f3d011682016040523d82523d5f602084013e614146565b606091505b50509050806141975760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141a4613363565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141d93390565b6040516001600160a01b03909116815260200160405180910390a1565b6141fe614507565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141d9565b5f8161427d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061428f5761428f614c82565b919091013560f81c949350505050565b5f8160f98110156142f25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142f25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143908161ffff871686614559565b82900390912095945050505050565b8082535050565b60605f808080806143b9888a018a614d9c565b95509550955095509550508187106143d75794506143f39350505050565b8387106143eb5782955050505050506143f3565b509293505050505b9392505050565b5f54610100900460ff166144765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a33613d59565b60655460ff16611c0a5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145685750826143f3565b609b546001600160a01b03165f5b84811015614615576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146009190614a04565b87525060209095019460019384019301614576565b5093949350505050565b5f6020828403121561462f575f80fd5b5035919050565b80356001600160a01b038116811461464c575f80fd5b919050565b5f60208284031215614661575f80fd5b6143f382614636565b5f8083601f84011261467a575f80fd5b50813567ffffffffffffffff811115614691575f80fd5b6020830191508360208285010111156146a8575f80fd5b9250929050565b5f805f604084860312156146c1575f80fd5b833567ffffffffffffffff8111156146d7575f80fd5b6146e38682870161466a565b909790965060209590950135949350505050565b5f8060208385031215614708575f80fd5b823567ffffffffffffffff81111561471e575f80fd5b61472a8582860161466a565b90969095509350505050565b5f60e08284031215614746575f80fd5b50919050565b5f60608284031215614746575f80fd5b5f806040838503121561476d575f80fd5b823567ffffffffffffffff80821115614784575f80fd5b61479086838701614736565b935060208501359150808211156147a5575f80fd5b506147b28582860161474c565b9150509250929050565b5f805f805f80608087890312156147d1575f80fd5b863567ffffffffffffffff808211156147e8575f80fd5b6147f48a838b01614736565b97506020890135915080821115614809575f80fd5b6148158a838b0161474c565b9650604089013591508082111561482a575f80fd5b6148368a838b0161466a565b9096509450606089013591508082111561484e575f80fd5b5061485b89828a0161466a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614882575f80fd5b61488b87614636565b955061489960208801614636565b94506148a760408801614636565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148db575f80fd5b843567ffffffffffffffff808211156148f2575f80fd5b6148fe8883890161466a565b90965094506020870135915080821115614916575f80fd5b506149238782880161466a565b95989497509550505050565b8015158114612890575f80fd5b5f6020828403121561494c575f80fd5b81356143f38161492f565b803567ffffffffffffffff8116811461464c575f80fd5b5f806040838503121561497f575f80fd5b61498883614957565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614996565b818103818111156113a6576113a6614996565b5f602082840312156149f9575f80fd5b81516143f38161492f565b5f60208284031215614a14575f80fd5b5051919050565b5f60208284031215614a2b575f80fd5b813561ffff811681146143f3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6c57614a6c614996565b5060010190565b5f60208284031215614a83575f80fd5b813560ff811681146143f3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac6575f80fd5b83018035915067ffffffffffffffff821115614ae0575f80fd5b6020019150368190038213156146a8575f80fd5b5f60208284031215614b04575f80fd5b6143f382614957565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bad5784516001600160a01b031683529383019391830191600101614b88565b50508760408601528481036060860152614bc8818789614b1c565b9a9950505050505050505050565b858152846020820152608060408201525f614bf5608083018587614b1c565b90508260608301529695505050505050565b5f82515f5b81811015614c265760208186018101518583015201614c0c565b505f920191825250919050565b80820281158282048414176113a6576113a6614996565b5f82614c7d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ceb575f80fd5b8135602067ffffffffffffffff80831115614d0857614d08614caf565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d4b57614d4b614caf565b6040529384526020818701810194908101925087851115614d6a575f80fd5b6020870191505b84821015614d9157614d8282614636565b83529183019190830190614d71565b979650505050505050565b5f805f805f8060c08789031215614db1575f80fd5b86359550602087013567ffffffffffffffff80821115614dcf575f80fd5b614ddb8a838b01614cdc565b9650604089013595506060890135915080821115614df7575f80fd5b614e038a838b01614cdc565b94506080890135935060a0890135915080821115614e1f575f80fd5b50614e2c89828a01614cdc565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index 76914ba8a..c7d740117 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004fa438038062004fa483398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e466200015e5f395f818161062b0152613c150152614e465ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a2e578063e3fff1dd14610a43578063f2fde38b14610a62578063fb1e8b0414610a81575f80fd5b8063d8dc99d2146109db578063ddd8a3dc146109f0578063de8b303514610a0f575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610988578063cf9a67451461099d578063d279c191146109bc575f80fd5b8063bedb86fb14610937578063c555389214610956578063cd4edc6914610975575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108c5578063b3484425146108da578063b35dac4e146108f9578063b3e0a50914610918575f80fd5b8063a479265d14610866578063a4f209b01461087b578063abc8d68d1461089a575f80fd5b8063910129d411610182578063910129d4146107e857806397fc007c14610819578063a415d8dc14610838575f80fd5b806388b1ea09146107025780638da5cb5b1461071b5780638f1d377614610738575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106855780636c578c1d146106b0578063715018a6146106cf578063728cdbca146106e3575f80fd5b80635ef7a94a146105ba5780635f77cf1d1461061a5780636126729014610666575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105845780635c975abb146105a3575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461461f565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd366004614651565b610a96565b005b3480156103cf575f80fd5b506103c26103de3660046146af565b610b68565b3480156103ee575f80fd5b5061036b6103fd36600461461f565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c26104343660046146f7565b610ea4565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461461f565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461461f565b61137e565b3480156104a8575f80fd5b506103956104b736600461461f565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461461f565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c36600461475c565b6113ac565b6103c261057f3660046147bc565b6115e8565b34801561058f575f80fd5b506103c261059e36600461461f565b6118b6565b3480156105ae575f80fd5b5060655460ff1661036b565b3480156105c5575f80fd5b506105fa6105d436600461461f565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610625575f80fd5b5061064d7f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610671575f80fd5b506103c261068036600461461f565b611961565b348015610690575f80fd5b5061039561069f36600461461f565b60ab6020525f908152604090205481565b3480156106bb575f80fd5b506103c26106ca366004614651565b611b3c565b3480156106da575f80fd5b506103c2611bf9565b3480156106ee575f80fd5b506103c26106fd36600461486d565b611c0c565b34801561070d575f80fd5b5060a65461036b9060ff1681565b348015610726575f80fd5b506033546001600160a01b0316610512565b348015610743575f80fd5b506107a461075236600461461f565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107f3575f80fd5b5061036b61080236600461461f565b5f90815260a4602052604090206003015460ff1690565b348015610824575f80fd5b506103c2610833366004614651565b611f15565b348015610843575f80fd5b5061036b610852366004614651565b609f6020525f908152604090205460ff1681565b348015610871575f80fd5b5061039560995481565b348015610886575f80fd5b506103c261089536600461461f565b611ff8565b3480156108a5575f80fd5b506103956108b4366004614651565b60a56020525f908152604090205481565b3480156108d0575f80fd5b5061039560a85481565b3480156108e5575f80fd5b506103c26108f43660046148c8565b6120a8565b348015610904575f80fd5b506103c2610913366004614651565b6123ac565b348015610923575f80fd5b506103c26109323660046146f7565b612405565b348015610942575f80fd5b506103c261095136600461493c565b612755565b348015610961575f80fd5b506103c261097036600461461f565b612893565b6103c261098336600461496e565b612936565b348015610993575f80fd5b5061039560985481565b3480156109a8575f80fd5b506103c26109b736600461461f565b612ec8565b3480156109c7575f80fd5b506103c26109d6366004614651565b613037565b3480156109e6575f80fd5b5061039560ac5481565b3480156109fb575f80fd5b50609754610512906001600160a01b031681565b348015610a1a575f80fd5b5061036b610a2936600461461f565b6130f6565b348015610a39575f80fd5b50610395609a5481565b348015610a4e575f80fd5b506103c2610a5d36600461461f565b613140565b348015610a6d575f80fd5b506103c2610a7c366004614651565b6131e3565b348015610a8c575f80fd5b5061039560a95481565b610a9e613270565b6001600160a01b0381165f908152609f602052604090205460ff1615610b0b5760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b70613270565b5f8111610bbf5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b02565b5f80610bcb85856132ca565b915091505f610bde836001015160c01c90565b5f81815260a160205260409020549091508214610c3d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f60a181610c4b87856149c3565b81526020019081526020015f205414610ccb5760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b02565b609d548111610d425760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b610d4d6001826149d6565b609e555b8315610e9c57604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610d99816130f6565b15610df4575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610de49084906149c3565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e54575060a85481145b15610e5e575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d51575b505050505050565b60a85415610ef45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b610efc613363565b5f80610f0884846132ca565b915091505f610f1b836001015160c01c90565b5f81815260a160205260409020549091508214610f7a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b610f838161137e565b610fcf5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b610fd8816130f6565b156110255760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a4602052604090206003015460ff16156110865760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b02565b5f81815260a260205260409020600101544210156110e65760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b02565b605983015160a05f6110f96001856149d6565b81526020019081526020015f2054146111545760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f81815260a06020526040902054156111af5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b02565b80609d54600101146112035760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b609d819055600160a35f611218866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a0602052604090205561126761125a846011015160c01c90565b600985015160c01c6133b6565b60a25f6112756001846149d6565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ae90846149d6565b81526020019081526020015f205f905560a45f6001836112ce91906149d6565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d61135a866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113a657505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611418573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061143c91906149e9565b6114885760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b60a854156114d85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6114e0613363565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611544573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115689190614a04565b61157291906149c3565b10156115da575f6115896080840160608501614a1b565b61ffff16116115da5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b6115e48282613473565b5050565b60a854156116385760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b611640613363565b60ac54609e545f90815260a260205260408120549091429161166291906149c3565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116de9190614a04565b6116e891906149c3565b109050811580156116f65750805b1561175d575f61170c60808a0160608b01614a1b565b61ffff161161175d5760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b02565b81806117665750805b6117b25760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b02565b6117bc8888613473565b5f806117c888886132ca565b915091505f6117db836001015160c01c90565b905080609e541461182e5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b02565b5f81815260a16020526040902054821461188a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b5f81815260a260205260409020426001909101556118a9838888613ba6565b5050505050505050505050565b6118be613270565b5f811180156118cf57506099548114155b61191b5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b02565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198157505f5460ff8083169116105b6119f35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100179055611a115f5460ff1690565b60ff16600214611a635760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b02565b81611ad65760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b02565b609e545f90815260ab6020526040902054611aff57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b611b44613270565b6001600160a01b0381165f908152609f602052604090205460ff16611bab5760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b02565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b5d565b611c01613270565b611c0a5f613d59565b565b5f54610100900460ff1615808015611c2a57505f54600160ff909116105b80611c435750303b158015611c4357505f5460ff166001145b611cb55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805460ff191660011790558015611cd6575f805461ff0019166101001790555b6001600160a01b0386161580611cf357506001600160a01b038516155b15611d2a576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d805760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b02565b611d88613dc2565b611d90613e46565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f0c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f1d613270565b6001600160a01b03811615801590611f435750609c546001600160a01b03828116911614155b611f8f5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b02565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612000613270565b5f81118015612010575060648111155b801561201e575060a9548114155b61206a5760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b02565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611955565b60a854156120f85760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b612100613363565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561216c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219091906149e9565b6121dc5760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b02565b5f806121e886866132ca565b915091505f6121fb836001015160c01c90565b5f81815260a16020526040902054909150821461225a5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612263816130f6565b6122af5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b02565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122eb916149c3565b11612361575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261235c91839190613eca565b611f0c565b61236c838686613ba6565b611f0c81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614026565b6123b4613270565b60aa80545f9091556123c682826140f2565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611955565b61240d613270565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124845760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b02565b5f8061249084846132ca565b915091505f6124a3836001015160c01c90565b905080156124f35760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b02565b5f6124ff846079015190565b90508061254e5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b02565b600984015160c01c156125a35760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b02565b5f6125af856019015190565b036125fc5760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b02565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612628856039015190565b146126755760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b02565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61275d613270565b80156128615761276b61419c565b60a65460ff16156128205760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127bf9084906149c3565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6128696141f6565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612843565b50565b61289b613270565b5f811180156128ac575060ac548114155b6128f85760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b02565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611955565b335f908152609f602052604090205460ff166129945760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b02565b60a854156129e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b02565b6129ec613363565b60a65460ff1615612a3f5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b02565b8167ffffffffffffffff16609d5410612a9a5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a160205260409020548114612b015760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b02565b612b148267ffffffffffffffff1661137e565b612b605760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612bdb5760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b02565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c6b5760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b02565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cbb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cdf9190614a04565b341015612d2e5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b02565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e4691815260200190565b60405180910390a35f609d546001612e5e91906149c3565b90505b609e548111612eb6578267ffffffffffffffff168114612ea4576099545f82815260a2602052604081206001018054909190612e9e9084906149c3565b90915550505b80612eae81614a3c565b915050612e61565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ee857505f5460ff8083169116105b612f5a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b02565b5f805461ffff191660ff831617610100178155829003612fbc5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b02565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611955565b335f90815260a56020526040812054908190036130965760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b02565b335f90815260a560205260408120556130af82826140f2565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130ea91815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113a65750505f90815260a46020526040902060030154610100900460ff161590565b613148613270565b5f8111801561315957506098548114155b6131a55760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b02565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611955565b6131eb613270565b6001600160a01b0381166132675760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b02565b61289081613d59565b6033546001600160a01b03163314611c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b02565b5f805f6132d7858561422f565b90505f8160ff165f036132f8576132ee868661429f565b9094509050613355565b8160ff1660010361330d576132ee8686614308565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b02565b808420925050509250929050565b60655460ff1615611c0a5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b02565b805f036133c1575050565b8082035f5b8281101561346d576101008184038111156133e057508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b158015613443575f80fd5b505af1158015613455573d5f803e3d5ffd5b505050506101008301925050610100810190506133c6565b50505050565b6134806020830183614a73565b60ff16158061349e57506134976020830183614a73565b60ff166001145b6134ea5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b02565b608082013561353b5760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b02565b60a082013561358c5760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b02565b5f806135a361359e6020860186614a93565b6132ca565b915091505f6135b6836001015160c01c90565b90505f60a1816135c78460016149c3565b81526020019081526020015f2054146136225760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b02565b609e5481146136735760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b02565b5f81815260a1602052604090205482146136cf5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b02565b5f81815260ab602052604090205460808601351461372f5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b02565b5f61373e846011015160c01c90565b90505f61376a6137546060890160408a01614af4565b61376460808a0160608b01614a1b565b8461435b565b905061377c6080880160608901614a1b565b6001939093019261ffff1691909101905f80491561379b575f496137bd565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137ce60208a018a614a73565b60ff166001036137dd57506101015b604080518281019091529650613802876137fa60208c018c614a73565b60ff1661439f565b60c085901b60018801526138308761382060808c0160608d01614a1b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138948761387560208b018b614a93565b604051613883929190614b0d565b604051809103902060b99190910152565b60d9870186905260016138aa60208b018b614a73565b60ff16106138dc576138dc876138c660608c0160408d01614af4565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff161561393b5760a7545f90815260a46020526040902060020154609954429161392e916149c3565b61393891906149d6565b90505b6040518060800160405280428152602001826098544261395b91906149c3565b61396591906149c3565b815260200161397a60608d0160408e01614af4565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa1580156139f8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a1c9190614a04565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a8490613a7e908c018c614a93565b5f6143a6565b5f613a9260408d018d614a93565b6040518663ffffffff1660e01b8152600401613ab2959493929190614b63565b602060405180830381865afa158015613acd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613af191906149e9565b613b635760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b02565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bf35760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b02565b5f613c02846001015160c01c90565b90505f613c10856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c3f876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d01885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d25959493929190614bd6565b5f6040518083038186803b158015613d3b575f80fd5b505afa158015613d4d573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e3e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a6143fa565b5f54610100900460ff16613ec25760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a614482565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f729190614a04565b5f86815260a46020526040902060010154909150613f919082906149c3565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fd09084906149c3565b9091555050604051613fe3908490614c07565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a95490919060649061404a9084614c33565b6140549190614c4a565b905061406081836149d6565b60aa5f82825461407091906149c3565b90915550506001600160a01b0384165f90815260a560205260408120805483929061409c9084906149c3565b90915550506040516140af908490614c07565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115e4575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114614141576040519150601f19603f3d011682016040523d82523d5f602084013e614146565b606091505b50509050806141975760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b02565b505050565b6141a4613363565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141d93390565b6040516001600160a01b03909116815260200160405180910390a1565b6141fe614507565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141d9565b5f8161427d5760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b02565b82825f81811061428f5761428f614c82565b919091013560f81c949350505050565b5f8160f98110156142f25760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b02565b6040519150808483378082016040529250929050565b5f8161010181146142f25760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b02565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016143908161ffff871686614559565b82900390912095945050505050565b8082535050565b60605f808080806143b9888a018a614d9c565b95509550955095509550508187106143d75794506143f39350505050565b8387106143eb5782955050505050506143f3565b509293505050505b9392505050565b5f54610100900460ff166144765760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b6065805460ff19169055565b5f54610100900460ff166144fe5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b02565b611c0a33613d59565b60655460ff16611c0a5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b02565b5f825f036145685750826143f3565b609b546001600160a01b03165f5b84811015614615576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146009190614a04565b87525060209095019460019384019301614576565b5093949350505050565b5f6020828403121561462f575f80fd5b5035919050565b80356001600160a01b038116811461464c575f80fd5b919050565b5f60208284031215614661575f80fd5b6143f382614636565b5f8083601f84011261467a575f80fd5b50813567ffffffffffffffff811115614691575f80fd5b6020830191508360208285010111156146a8575f80fd5b9250929050565b5f805f604084860312156146c1575f80fd5b833567ffffffffffffffff8111156146d7575f80fd5b6146e38682870161466a565b909790965060209590950135949350505050565b5f8060208385031215614708575f80fd5b823567ffffffffffffffff81111561471e575f80fd5b61472a8582860161466a565b90969095509350505050565b5f60e08284031215614746575f80fd5b50919050565b5f60608284031215614746575f80fd5b5f806040838503121561476d575f80fd5b823567ffffffffffffffff80821115614784575f80fd5b61479086838701614736565b935060208501359150808211156147a5575f80fd5b506147b28582860161474c565b9150509250929050565b5f805f805f80608087890312156147d1575f80fd5b863567ffffffffffffffff808211156147e8575f80fd5b6147f48a838b01614736565b97506020890135915080821115614809575f80fd5b6148158a838b0161474c565b9650604089013591508082111561482a575f80fd5b6148368a838b0161466a565b9096509450606089013591508082111561484e575f80fd5b5061485b89828a0161466a565b979a9699509497509295939492505050565b5f805f805f8060c08789031215614882575f80fd5b61488b87614636565b955061489960208801614636565b94506148a760408801614636565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148db575f80fd5b843567ffffffffffffffff808211156148f2575f80fd5b6148fe8883890161466a565b90965094506020870135915080821115614916575f80fd5b506149238782880161466a565b95989497509550505050565b8015158114612890575f80fd5b5f6020828403121561494c575f80fd5b81356143f38161492f565b803567ffffffffffffffff8116811461464c575f80fd5b5f806040838503121561497f575f80fd5b61498883614957565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113a6576113a6614996565b818103818111156113a6576113a6614996565b5f602082840312156149f9575f80fd5b81516143f38161492f565b5f60208284031215614a14575f80fd5b5051919050565b5f60208284031215614a2b575f80fd5b813561ffff811681146143f3575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6c57614a6c614996565b5060010190565b5f60208284031215614a83575f80fd5b813560ff811681146143f3575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ac6575f80fd5b83018035915067ffffffffffffffff821115614ae0575f80fd5b6020019150368190038213156146a8575f80fd5b5f60208284031215614b04575f80fd5b6143f382614957565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bad5784516001600160a01b031683529383019391830191600101614b88565b50508760408601528481036060860152614bc8818789614b1c565b9a9950505050505050505050565b858152846020820152608060408201525f614bf5608083018587614b1c565b90508260608301529695505050505050565b5f82515f5b81811015614c265760208186018101518583015201614c0c565b505f920191825250919050565b80820281158282048414176113a6576113a6614996565b5f82614c7d577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614ceb575f80fd5b8135602067ffffffffffffffff80831115614d0857614d08614caf565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d4b57614d4b614caf565b6040529384526020818701810194908101925087851115614d6a575f80fd5b6020870191505b84821015614d9157614d8282614636565b83529183019190830190614d71565b979650505050505050565b5f805f805f8060c08789031215614db1575f80fd5b86359550602087013567ffffffffffffffff80821115614dcf575f80fd5b614ddb8a838b01614cdc565b9650604089013595506060890135915080821115614df7575f80fd5b614e038a838b01614cdc565b94506080890135935060a0890135915080821115614e1f575f80fd5b50614e2c89828a01614cdc565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004fb038038062004fb083398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e526200015e5f395f81816106370152613c210152614e525ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -1315,21 +1315,21 @@ func (_Rollup *RollupTransactorSession) CommitBatch(batchDataInput IRollupBatchD // CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. // -// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) returns() func (_Rollup *RollupTransactor) CommitBatchWithProof(opts *bind.TransactOpts, batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { return _Rollup.contract.Transact(opts, "commitBatchWithProof", batchDataInput, batchSignatureInput, _batchHeader, _batchProof) } // CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. // -// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) returns() func (_Rollup *RollupSession) CommitBatchWithProof(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { return _Rollup.Contract.CommitBatchWithProof(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput, _batchHeader, _batchProof) } // CommitBatchWithProof is a paid mutator transaction binding the contract method 0x4e8f1d67. // -// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) payable returns() +// Solidity: function commitBatchWithProof((uint8,bytes,uint64,uint16,bytes32,bytes32,bytes32) batchDataInput, (uint256,bytes,bytes) batchSignatureInput, bytes _batchHeader, bytes _batchProof) returns() func (_Rollup *RollupTransactorSession) CommitBatchWithProof(batchDataInput IRollupBatchDataInput, batchSignatureInput IRollupBatchSignatureInput, _batchHeader []byte, _batchProof []byte) (*types.Transaction, error) { return _Rollup.Contract.CommitBatchWithProof(&_Rollup.TransactOpts, batchDataInput, batchSignatureInput, _batchHeader, _batchProof) } diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index 3876a60b6..a4e7756a3 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a89578063e3fff1dd14610a9e578063f2fde38b14610abd578063fb1e8b0414610adc575f80fd5b8063d8dc99d214610a29578063ddd8a3dc14610a3e578063de8b303514610a6a575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109d6578063cf9a6745146109eb578063d279c19114610a0a575f80fd5b8063bedb86fb14610985578063c5553892146109a4578063cd4edc69146109c3575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d314610913578063b348442514610928578063b35dac4e14610947578063b3e0a50914610966575f80fd5b8063a479265d146108b4578063a4f209b0146108c9578063abc8d68d146108e8575f80fd5b8063910129d411610182578063910129d41461083657806397fc007c14610867578063a415d8dc14610886575f80fd5b806388b1ea09146107295780638da5cb5b146107425780638f1d37761461076c575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106ac5780636c578c1d146106d7578063715018a6146106f6578063728cdbca1461070a575f80fd5b80635ef7a94a146105e15780635f77cf1d14610641578063612672901461068d575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105ab5780635c975abb146105ca575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615366565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153a5565b610af1565b005b3480156103cf575f80fd5b506103c26103de366004615403565b610c15565b3480156103ee575f80fd5b5061036b6103fd366004615366565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c261043436600461544b565b611001565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615366565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615366565b611600565b3480156104a8575f80fd5b506103956104b7366004615366565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615366565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154b0565b61162e565b6103c26105a6366004615510565b6118df565b3480156105b6575f80fd5b506103c26105c5366004615366565b611c49565b3480156105d5575f80fd5b5060655460ff1661036b565b3480156105ec575f80fd5b506106216105fb366004615366565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b34801561064c575f80fd5b506106747f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b348015610698575f80fd5b506103c26106a7366004615366565b611d0e565b3480156106b7575f80fd5b506103956106c6366004615366565b60ab6020525f908152604090205481565b3480156106e2575f80fd5b506103c26106f13660046153a5565b611f71565b348015610701575f80fd5b506103c2612080565b348015610715575f80fd5b506103c26107243660046155c1565b612093565b348015610734575f80fd5b5060a65461036b9060ff1681565b34801561074d575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610777575f80fd5b506107e5610786366004615366565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b348015610841575f80fd5b5061036b610850366004615366565b5f90815260a4602052604090206003015460ff1690565b348015610872575f80fd5b506103c26108813660046153a5565b61245c565b348015610891575f80fd5b5061036b6108a03660046153a5565b609f6020525f908152604090205460ff1681565b3480156108bf575f80fd5b5061039560995481565b3480156108d4575f80fd5b506103c26108e3366004615366565b612580565b3480156108f3575f80fd5b506103956109023660046153a5565b60a56020525f908152604090205481565b34801561091e575f80fd5b5061039560a85481565b348015610933575f80fd5b506103c261094236600461561c565b61264a565b348015610952575f80fd5b506103c26109613660046153a5565b612a29565b348015610971575f80fd5b506103c261098036600461544b565b612a8f565b348015610990575f80fd5b506103c261099f366004615690565b612e7b565b3480156109af575f80fd5b506103c26109be366004615366565b61300e565b6103c26109d13660046156c2565b6130cb565b3480156109e1575f80fd5b5061039560985481565b3480156109f6575f80fd5b506103c2610a05366004615366565b6137e0565b348015610a15575f80fd5b506103c2610a243660046153a5565b6139bd565b348015610a34575f80fd5b5061039560ac5481565b348015610a49575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a75575f80fd5b5061036b610a84366004615366565b613aa3565b348015610a94575f80fd5b50610395609a5481565b348015610aa9575f80fd5b506103c2610ab8366004615366565b613afa565b348015610ac8575f80fd5b506103c2610ad73660046153a5565b613bb7565b348015610ae7575f80fd5b5061039560a95481565b610af9613c6b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c1d613c6b565b5f8111610c86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b84565b5f80610c928585613cec565b915091505f610ca5836001015160c01c90565b5f81815260a160205260409020549091508214610d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f60a181610d2c8785615717565b81526020019081526020015f205414610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b84565b609d548111610e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b610e6260018261572a565b609e555b8315610ff957604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eae81613aa3565b15610f34575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f06908490615717565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fb1575060a85481145b15610fbb575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e66575b505050505050565b60a8541561106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611073613d9f565b5f8061107f8484613cec565b915091505f611092836001015160c01c90565b5f81815260a16020526040902054909150821461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61111481611600565b61117a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b61118381613aa3565b156111ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003015460ff1615611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b84565b5f81815260a260205260409020600101544210156112df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b84565b605983015160a05f6112f260018561572a565b81526020019081526020015f205414611367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f81815260a06020526040902054156113dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b84565b80609d546001011461144a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b609d819055600160a35f61145f866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114cc6114bf846011015160c01c90565b600985015160c01c613e0c565b60a25f6114da60018461572a565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab9190611513908461572a565b81526020019081526020015f205f905560a45f600183611533919061572a565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115dc866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061162857505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d8919061573d565b61173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b60a854156117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6117b0613d9f565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa158015611821573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118459190615758565b61184f9190615717565b10156118d1575f611866608084016060850161576f565b61ffff16116118d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b6118db8282613ed6565b5050565b60a85415611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b611951613d9f565b60ac54609e545f90815260a26020526040812054909142916119739190615717565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a099190615758565b611a139190615717565b10905081158015611a215750805b15611aa2575f611a3760808a0160608b0161576f565b61ffff1611611aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b84565b8180611aab5750805b611b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b84565b611b1b8888613ed6565b5f80611b278888613cec565b915091505f611b3a836001015160c01c90565b905080609e5414611ba7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b84565b5f81815260a160205260409020548214611c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b5f81815260a26020526040902042600190910155611c3c838888614700565b5050505050505050505050565b611c51613c6b565b5f81118015611c6257506099548114155b611cc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b84565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d2e57505f5460ff8083169116105b611dba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611df55f5460ff1690565b60ff16600214611e61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b84565b81611eee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b84565b609e545f90815260ab6020526040902054611f1757609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d02565b611f79613c6b565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612007576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b84565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c0a565b612088613c6b565b6120915f6148da565b565b5f54610100900460ff16158080156120b157505f54600160ff909116105b806120ca5750303b1580156120ca57505f5460ff166001145b612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121b2575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121e9575073ffffffffffffffffffffffffffffffffffffffff8516155b15612220576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff871661229d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b84565b6122a5614950565b6122ad6149ee565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015612453575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612464613c6b565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124a45750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b61250a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b84565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612588613c6b565b5f81118015612598575060648111155b80156125a6575060a9548114155b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b84565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d02565b60a854156126b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6126bc613d9f565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015612742573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612766919061573d565b6127cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b84565b5f806127d88686613cec565b915091505f6127eb836001015160c01c90565b5f81815260a160205260409020549091508214612864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61286d81613aa3565b6128d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b84565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161294a91615717565b116129de575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129d991839190614a8c565b612453565b6129e9838686614700565b61245381336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c0f565b612a31613c6b565b60aa80545f909155612a438282614cf5565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d02565b612a97613c6b565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b84565b5f80612b348484613cec565b915091505f612b47836001015160c01c90565b90508015612bb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b84565b5f612bbd846079015190565b905080612c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b84565b600984015160c01c15612c95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b84565b5f612ca1856019015190565b03612d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b84565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d34856039015190565b14612d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b84565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e83613c6b565b8015612fdc57612e91614dc6565b60a65460ff1615612f8e5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612ef2908490615717565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612fe4614e4b565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fb1565b50565b613016613c6b565b5f81118015613027575060ac548114155b61308d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b84565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d02565b335f908152609f602052604090205460ff16613143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b84565b60a854156131ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b84565b6131b5613d9f565b60a65460ff1615613222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b84565b8167ffffffffffffffff16609d5410613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a160205260409020548114613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b84565b61332b8267ffffffffffffffff16611600565b613391576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff1615613433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b84565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b84565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613547573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061356b9190615758565b3410156135d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b84565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374091815260200190565b60405180910390a35f609d5460016137589190615717565b90505b609e5481116137b0578267ffffffffffffffff16811461379e576099545f82815260a2602052604081206001018054909190613798908490615717565b90915550505b806137a881615790565b91505061375b565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380057505f5460ff8083169116105b61388c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b84565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b84565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d02565b335f90815260a5602052604081205490819003613a36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b84565b335f90815260a56020526040812055613a4f8282614cf5565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613a9791815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116285750505f90815260a46020526040902060030154610100900460ff161590565b613b02613c6b565b5f81118015613b1357506098548114155b613b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b84565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d02565b613bbf613c6b565b73ffffffffffffffffffffffffffffffffffffffff8116613c62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b84565b61300b816148da565b60335473ffffffffffffffffffffffffffffffffffffffff163314612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b84565b5f805f613cf98585614ea2565b90505f8160ff165f03613d1a57613d108686614f2c565b9094509050613d91565b8160ff16600103613d2f57613d108686614faf565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b84565b808420925050509250929050565b60655460ff1615612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b84565b805f03613e17575050565b8082035f5b82811015613ed057610100818403811115613e3657508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613ea6575f80fd5b505af1158015613eb8573d5f803e3d5ffd5b50505050610100830192505061010081019050613e1c565b50505050565b613ee360208301836157c7565b60ff161580613f015750613efa60208301836157c7565b60ff166001145b613f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b84565b6080820135613fd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b84565b60a082013561403d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b84565b5f8061405461404f60208601866157e7565b613cec565b915091505f614067836001015160c01c90565b90505f60a181614078846001615717565b81526020019081526020015f2054146140ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b84565b609e548114614158576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b84565b5f81815260a1602052604090205482146141ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b84565b5f81815260ab6020526040902054608086013514614248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b84565b5f614257846011015160c01c90565b90505f61428361426d6060890160408a01615848565b61427d60808a0160608b0161576f565b8461501c565b9050614295608088016060890161576f565b6001939093019261ffff1691909101905f8049156142b4575f496142d6565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142e760208a018a6157c7565b60ff166001036142f657506101015b60408051828101909152965061431b8761431360208c018c6157c7565b60ff16615060565b60c085901b60018801526143498761433960808c0160608d0161576f565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143ad8761438e60208b018b6157e7565b60405161439c929190615861565b604051809103902060b99190910152565b60d9870186905260016143c360208b018b6157c7565b60ff16106143f5576143f5876143df60608c0160408d01615848565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144545760a7545f90815260a46020526040902060020154609954429161444791615717565b614451919061572a565b90505b604051806080016040528042815260200182609854426144749190615717565b61447e9190615717565b815260200161449360608d0160408e01615848565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561452b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061454f9190615758565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145c4906145be908c018c6157e7565b5f615067565b5f6145d260408d018d6157e7565b6040518663ffffffff1660e01b81526004016145f29594939291906158b7565b602060405180830381865afa15801561460d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614631919061573d565b6146bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b84565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b84565b5f614776846001015160c01c90565b90505f614784856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147b3876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a848614882885160f81c90565b858888866040518663ffffffff1660e01b81526004016148a6959493929190615937565b5f6040518083038186803b1580156148bc575f80fd5b505afa1580156148ce573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b6120916150bb565b5f54610100900460ff16614a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b61209161517b565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b419190615758565b5f86815260a46020526040902060010154909150614b60908290615717565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bac908490615717565b9091555050604051614bbf908490615968565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c339084615994565b614c3d91906159ab565b9050614c49818361572a565b60aa5f828254614c599190615717565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c92908490615717565b9091555050604051614ca5908490615968565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118db575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d51576040519150601f19603f3d011682016040523d82523d5f602084013e614d56565b606091505b5050905080614dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b84565b505050565b614dce613d9f565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e213390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5361521a565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e21565b5f81614f0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b84565b82825f818110614f1c57614f1c6159e3565b919091013560f81c949350505050565b5f8160f9811015614f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b84565b6040519150808483378082016040529250929050565b5f816101018114614f99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b84565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f9181016150518161ffff871686615286565b82900390912095945050505050565b8082535050565b60605f8080808061507a888a018a615afd565b95509550955095509550508187106150985794506150b49350505050565b8387106150ac5782955050505050506150b4565b509293505050505b9392505050565b5f54610100900460ff16615151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff16615211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b84565b612091336148da565b60655460ff16612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b84565b5f825f036152955750826150b4565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b8481101561535c576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa158015615323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153479190615758565b875250602090950194600193840193016152b0565b5093949350505050565b5f60208284031215615376575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153a0575f80fd5b919050565b5f602082840312156153b5575f80fd5b6150b48261537d565b5f8083601f8401126153ce575f80fd5b50813567ffffffffffffffff8111156153e5575f80fd5b6020830191508360208285010111156153fc575f80fd5b9250929050565b5f805f60408486031215615415575f80fd5b833567ffffffffffffffff81111561542b575f80fd5b615437868287016153be565b909790965060209590950135949350505050565b5f806020838503121561545c575f80fd5b823567ffffffffffffffff811115615472575f80fd5b61547e858286016153be565b90969095509350505050565b5f60e0828403121561549a575f80fd5b50919050565b5f6060828403121561549a575f80fd5b5f80604083850312156154c1575f80fd5b823567ffffffffffffffff808211156154d8575f80fd5b6154e48683870161548a565b935060208501359150808211156154f9575f80fd5b50615506858286016154a0565b9150509250929050565b5f805f805f8060808789031215615525575f80fd5b863567ffffffffffffffff8082111561553c575f80fd5b6155488a838b0161548a565b9750602089013591508082111561555d575f80fd5b6155698a838b016154a0565b9650604089013591508082111561557e575f80fd5b61558a8a838b016153be565b909650945060608901359150808211156155a2575f80fd5b506155af89828a016153be565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155d6575f80fd5b6155df8761537d565b95506155ed6020880161537d565b94506155fb6040880161537d565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561562f575f80fd5b843567ffffffffffffffff80821115615646575f80fd5b615652888389016153be565b9096509450602087013591508082111561566a575f80fd5b50615677878288016153be565b95989497509550505050565b801515811461300b575f80fd5b5f602082840312156156a0575f80fd5b81356150b481615683565b803567ffffffffffffffff811681146153a0575f80fd5b5f80604083850312156156d3575f80fd5b6156dc836156ab565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611628576116286156ea565b81810381811115611628576116286156ea565b5f6020828403121561574d575f80fd5b81516150b481615683565b5f60208284031215615768575f80fd5b5051919050565b5f6020828403121561577f575f80fd5b813561ffff811681146150b4575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157c0576157c06156ea565b5060010190565b5f602082840312156157d7575f80fd5b813560ff811681146150b4575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261581a575f80fd5b83018035915067ffffffffffffffff821115615834575f80fd5b6020019150368190038213156153fc575f80fd5b5f60208284031215615858575f80fd5b6150b4826156ab565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561590e57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158dc565b50508760408601528481036060860152615929818789615870565b9a9950505050505050505050565b858152846020820152608060408201525f615956608083018587615870565b90508260608301529695505050505050565b5f82515f5b81811015615987576020818601810151858301520161596d565b505f920191825250919050565b8082028115828204841417611628576116286156ea565b5f826159de577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a4c575f80fd5b8135602067ffffffffffffffff80831115615a6957615a69615a10565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615aac57615aac615a10565b6040529384526020818701810194908101925087851115615acb575f80fd5b6020870191505b84821015615af257615ae38261537d565b83529183019190830190615ad2565b979650505050505050565b5f805f805f8060c08789031215615b12575f80fd5b86359550602087013567ffffffffffffffff80821115615b30575f80fd5b615b3c8a838b01615a3d565b9650604089013595506060890135915080821115615b58575f80fd5b615b648a838b01615a3d565b94506080890135935060a0890135915080821115615b80575f80fd5b50615b8d89828a01615a3d565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a95578063e3fff1dd14610aaa578063f2fde38b14610ac9578063fb1e8b0414610ae8575f80fd5b8063d8dc99d214610a35578063ddd8a3dc14610a4a578063de8b303514610a76575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109e2578063cf9a6745146109f7578063d279c19114610a16575f80fd5b8063bedb86fb14610991578063c5553892146109b0578063cd4edc69146109cf575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d31461091f578063b348442514610934578063b35dac4e14610953578063b3e0a50914610972575f80fd5b8063a479265d146108c0578063a4f209b0146108d5578063abc8d68d146108f4575f80fd5b8063910129d411610182578063910129d41461084257806397fc007c14610873578063a415d8dc14610892575f80fd5b806388b1ea09146107355780638da5cb5b1461074e5780638f1d377614610778575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106b85780636c578c1d146106e3578063715018a614610702578063728cdbca14610716575f80fd5b80635ef7a94a146105ed5780635f77cf1d1461064d5780636126729014610699575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105b75780635c975abb146105d6575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615372565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153b1565b610afd565b005b3480156103cf575f80fd5b506103c26103de36600461540f565b610c21565b3480156103ee575f80fd5b5061036b6103fd366004615372565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615457565b61100d565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615372565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615372565b61160c565b3480156104a8575f80fd5b506103956104b7366004615372565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615372565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154bc565b61163a565b3480156105a3575f80fd5b506103c26105b236600461551c565b6118eb565b3480156105c2575f80fd5b506103c26105d1366004615372565b611c55565b3480156105e1575f80fd5b5060655460ff1661036b565b3480156105f8575f80fd5b5061062d610607366004615372565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610658575f80fd5b506106807f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b3480156106a4575f80fd5b506103c26106b3366004615372565b611d1a565b3480156106c3575f80fd5b506103956106d2366004615372565b60ab6020525f908152604090205481565b3480156106ee575f80fd5b506103c26106fd3660046153b1565b611f7d565b34801561070d575f80fd5b506103c261208c565b348015610721575f80fd5b506103c26107303660046155cd565b61209f565b348015610740575f80fd5b5060a65461036b9060ff1681565b348015610759575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610783575f80fd5b506107f1610792366004615372565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b34801561084d575f80fd5b5061036b61085c366004615372565b5f90815260a4602052604090206003015460ff1690565b34801561087e575f80fd5b506103c261088d3660046153b1565b612468565b34801561089d575f80fd5b5061036b6108ac3660046153b1565b609f6020525f908152604090205460ff1681565b3480156108cb575f80fd5b5061039560995481565b3480156108e0575f80fd5b506103c26108ef366004615372565b61258c565b3480156108ff575f80fd5b5061039561090e3660046153b1565b60a56020525f908152604090205481565b34801561092a575f80fd5b5061039560a85481565b34801561093f575f80fd5b506103c261094e366004615628565b612656565b34801561095e575f80fd5b506103c261096d3660046153b1565b612a35565b34801561097d575f80fd5b506103c261098c366004615457565b612a9b565b34801561099c575f80fd5b506103c26109ab36600461569c565b612e87565b3480156109bb575f80fd5b506103c26109ca366004615372565b61301a565b6103c26109dd3660046156ce565b6130d7565b3480156109ed575f80fd5b5061039560985481565b348015610a02575f80fd5b506103c2610a11366004615372565b6137ec565b348015610a21575f80fd5b506103c2610a303660046153b1565b6139c9565b348015610a40575f80fd5b5061039560ac5481565b348015610a55575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a81575f80fd5b5061036b610a90366004615372565b613aaf565b348015610aa0575f80fd5b50610395609a5481565b348015610ab5575f80fd5b506103c2610ac4366004615372565b613b06565b348015610ad4575f80fd5b506103c2610ae33660046153b1565b613bc3565b348015610af3575f80fd5b5061039560a95481565b610b05613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c29613c77565b5f8111610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b90565b5f80610c9e8585613cf8565b915091505f610cb1836001015160c01c90565b5f81815260a160205260409020549091508214610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f60a181610d388785615723565b81526020019081526020015f205414610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b90565b609d548111610e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b610e6e600182615736565b609e555b831561100557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eba81613aaf565b15610f40575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f12908490615723565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fbd575060a85481145b15610fc7575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e72575b505050505050565b60a85415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61107f613dab565b5f8061108b8484613cf8565b915091505f61109e836001015160c01c90565b5f81815260a160205260409020549091508214611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6111208161160c565b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b61118f81613aaf565b156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003015460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b90565b5f81815260a260205260409020600101544210156112eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b90565b605983015160a05f6112fe600185615736565b81526020019081526020015f205414611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f81815260a06020526040902054156113e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b90565b80609d5460010114611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b609d819055600160a35f61146b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114d86114cb846011015160c01c90565b600985015160c01c613e18565b60a25f6114e6600184615736565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151f9084615736565b81526020019081526020015f205f905560a45f60018361153f9190615736565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115e8866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061163457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e49190615749565b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b60a854156117b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6117bc613dab565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa15801561182d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118519190615764565b61185b9190615723565b10156118dd575f611872608084016060850161577b565b61ffff16116118dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b6118e78282613ee2565b5050565b60a85415611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61195d613dab565b60ac54609e545f90815260a260205260408120549091429161197f9190615723565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a159190615764565b611a1f9190615723565b10905081158015611a2d5750805b15611aae575f611a4360808a0160608b0161577b565b61ffff1611611aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b8180611ab75750805b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b90565b611b278888613ee2565b5f80611b338888613cf8565b915091505f611b46836001015160c01c90565b905080609e5414611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b90565b5f81815260a160205260409020548214611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f81815260a26020526040902042600190910155611c4883888861470c565b5050505050505050505050565b611c5d613c77565b5f81118015611c6e57506099548114155b611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b90565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d3a57505f5460ff8083169116105b611dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e015f5460ff1690565b60ff16600214611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b90565b81611efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b90565b609e545f90815260ab6020526040902054611f2357609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b611f85613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b90565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c16565b612094613c77565b61209d5f6148e6565b565b5f54610100900460ff16158080156120bd57505f54600160ff909116105b806120d65750303b1580156120d657505f5460ff166001145b612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121be575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121f5575073ffffffffffffffffffffffffffffffffffffffff8516155b1561222c576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b90565b6122b161495c565b6122b96149fa565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561245f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612470613c77565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124b05750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b90565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612594613c77565b5f811180156125a4575060648111155b80156125b2575060a9548114155b612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b90565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d0e565b60a854156126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6126c8613dab565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561274e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127729190615749565b6127d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b5f806127e48686613cf8565b915091505f6127f7836001015160c01c90565b5f81815260a160205260409020549091508214612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b61287981613aaf565b6128df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161295691615723565b116129ea575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129e591839190614a98565b61245f565b6129f583868661470c565b61245f81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c1b565b612a3d613c77565b60aa80545f909155612a4f8282614d01565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d0e565b612aa3613c77565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b90565b5f80612b408484613cf8565b915091505f612b53836001015160c01c90565b90508015612bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b90565b5f612bc9846079015190565b905080612c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b90565b600984015160c01c15612ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b90565b5f612cad856019015190565b03612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b90565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d40856039015190565b14612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b90565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e8f613c77565b8015612fe857612e9d614dd2565b60a65460ff1615612f9a5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612efe908490615723565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612ff0614e57565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fbd565b50565b613022613c77565b5f81118015613033575060ac548114155b613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b90565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d0e565b335f908152609f602052604090205460ff1661314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b90565b60a854156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6131c1613dab565b60a65460ff161561322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b90565b8167ffffffffffffffff16609d54106132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a160205260409020548114613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6133378267ffffffffffffffff1661160c565b61339d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561343f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b90565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135779190615764565b3410156135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374c91815260200190565b60405180910390a35f609d5460016137649190615723565b90505b609e5481116137bc578267ffffffffffffffff1681146137aa576099545f82815260a26020526040812060010180549091906137a4908490615723565b90915550505b806137b48161579c565b915050613767565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380c57505f5460ff8083169116105b613898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b90565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b335f90815260a5602052604081205490819003613a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b90565b335f90815260a56020526040812055613a5b8282614d01565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613aa391815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116345750505f90815260a46020526040902060030154610100900460ff161590565b613b0e613c77565b5f81118015613b1f57506098548114155b613b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b90565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d0e565b613bcb613c77565b73ffffffffffffffffffffffffffffffffffffffff8116613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b90565b613017816148e6565b60335473ffffffffffffffffffffffffffffffffffffffff16331461209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b90565b5f805f613d058585614eae565b90505f8160ff165f03613d2657613d1c8686614f38565b9094509050613d9d565b8160ff16600103613d3b57613d1c8686614fbb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b90565b808420925050509250929050565b60655460ff161561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b90565b805f03613e23575050565b8082035f5b82811015613edc57610100818403811115613e4257508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613eb2575f80fd5b505af1158015613ec4573d5f803e3d5ffd5b50505050610100830192505061010081019050613e28565b50505050565b613eef60208301836157d3565b60ff161580613f0d5750613f0660208301836157d3565b60ff166001145b613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b90565b6080820135613fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b90565b60a0820135614049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b90565b5f8061406061405b60208601866157f3565b613cf8565b915091505f614073836001015160c01c90565b90505f60a181614084846001615723565b81526020019081526020015f2054146140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b90565b609e548114614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b5f81815260a1602052604090205482146141da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b90565b5f81815260ab6020526040902054608086013514614254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f614263846011015160c01c90565b90505f61428f6142796060890160408a01615854565b61428960808a0160608b0161577b565b84615028565b90506142a1608088016060890161577b565b6001939093019261ffff1691909101905f8049156142c0575f496142e2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142f360208a018a6157d3565b60ff1660010361430257506101015b6040805182810190915296506143278761431f60208c018c6157d3565b60ff1661506c565b60c085901b60018801526143558761434560808c0160608d0161577b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143b98761439a60208b018b6157f3565b6040516143a892919061586d565b604051809103902060b99190910152565b60d9870186905260016143cf60208b018b6157d3565b60ff161061440157614401876143eb60608c0160408d01615854565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144605760a7545f90815260a46020526040902060020154609954429161445391615723565b61445d9190615736565b90505b604051806080016040528042815260200182609854426144809190615723565b61448a9190615723565b815260200161449f60608d0160408e01615854565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061455b9190615764565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145d0906145ca908c018c6157f3565b5f615073565b5f6145de60408d018d6157f3565b6040518663ffffffff1660e01b81526004016145fe9594939291906158c3565b602060405180830381865afa158015614619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061463d9190615749565b6146c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b90565b5f614782846001015160c01c90565b90505f614790856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147bf876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861488e885160f81c90565b858888866040518663ffffffff1660e01b81526004016148b2959493929190615943565b5f6040518083038186803b1580156148c8575f80fd5b505afa1580156148da573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d6150c7565b5f54610100900460ff16614a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d615187565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b4d9190615764565b5f86815260a46020526040902060010154909150614b6c908290615723565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bb8908490615723565b9091555050604051614bcb908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c3f90846159a0565b614c4991906159b7565b9050614c558183615736565b60aa5f828254614c659190615723565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c9e908490615723565b9091555050604051614cb1908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118e7575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d5d576040519150601f19603f3d011682016040523d82523d5f602084013e614d62565b606091505b5050905080614dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b90565b505050565b614dda613dab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e2d3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5f615226565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e2d565b5f81614f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b90565b82825f818110614f2857614f286159ef565b919091013560f81c949350505050565b5f8160f9811015614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b90565b6040519150808483378082016040529250929050565b5f816101018114614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b90565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161505d8161ffff871686615292565b82900390912095945050505050565b8082535050565b60605f80808080615086888a018a615b09565b95509550955095509550508187106150a45794506150c09350505050565b8387106150b85782955050505050506150c0565b509293505050505b9392505050565b5f54610100900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff1661521d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d336148e6565b60655460ff1661209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b90565b5f825f036152a15750826150c0565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b84811015615368576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561532f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153539190615764565b875250602090950194600193840193016152bc565b5093949350505050565b5f60208284031215615382575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153ac575f80fd5b919050565b5f602082840312156153c1575f80fd5b6150c082615389565b5f8083601f8401126153da575f80fd5b50813567ffffffffffffffff8111156153f1575f80fd5b602083019150836020828501011115615408575f80fd5b9250929050565b5f805f60408486031215615421575f80fd5b833567ffffffffffffffff811115615437575f80fd5b615443868287016153ca565b909790965060209590950135949350505050565b5f8060208385031215615468575f80fd5b823567ffffffffffffffff81111561547e575f80fd5b61548a858286016153ca565b90969095509350505050565b5f60e082840312156154a6575f80fd5b50919050565b5f606082840312156154a6575f80fd5b5f80604083850312156154cd575f80fd5b823567ffffffffffffffff808211156154e4575f80fd5b6154f086838701615496565b93506020850135915080821115615505575f80fd5b50615512858286016154ac565b9150509250929050565b5f805f805f8060808789031215615531575f80fd5b863567ffffffffffffffff80821115615548575f80fd5b6155548a838b01615496565b97506020890135915080821115615569575f80fd5b6155758a838b016154ac565b9650604089013591508082111561558a575f80fd5b6155968a838b016153ca565b909650945060608901359150808211156155ae575f80fd5b506155bb89828a016153ca565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155e2575f80fd5b6155eb87615389565b95506155f960208801615389565b945061560760408801615389565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561563b575f80fd5b843567ffffffffffffffff80821115615652575f80fd5b61565e888389016153ca565b90965094506020870135915080821115615676575f80fd5b50615683878288016153ca565b95989497509550505050565b8015158114613017575f80fd5b5f602082840312156156ac575f80fd5b81356150c08161568f565b803567ffffffffffffffff811681146153ac575f80fd5b5f80604083850312156156df575f80fd5b6156e8836156b7565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611634576116346156f6565b81810381811115611634576116346156f6565b5f60208284031215615759575f80fd5b81516150c08161568f565b5f60208284031215615774575f80fd5b5051919050565b5f6020828403121561578b575f80fd5b813561ffff811681146150c0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157cc576157cc6156f6565b5060010190565b5f602082840312156157e3575f80fd5b813560ff811681146150c0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615826575f80fd5b83018035915067ffffffffffffffff821115615840575f80fd5b602001915036819003821315615408575f80fd5b5f60208284031215615864575f80fd5b6150c0826156b7565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561591a57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158e8565b5050876040860152848103606086015261593581878961587c565b9a9950505050505050505050565b858152846020820152608060408201525f61596260808301858761587c565b90508260608301529695505050505050565b5f82515f5b818110156159935760208186018101518583015201615979565b505f920191825250919050565b8082028115828204841417611634576116346156f6565b5f826159ea577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a58575f80fd5b8135602067ffffffffffffffff80831115615a7557615a75615a1c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ab857615ab8615a1c565b6040529384526020818701810194908101925087851115615ad7575f80fd5b6020870191505b84821015615afe57615aef82615389565b83529183019190830190615ade565b979650505050505050565b5f805f805f8060c08789031215615b1e575f80fd5b86359550602087013567ffffffffffffffff80821115615b3c575f80fd5b615b488a838b01615a49565b9650604089013595506060890135915080821115615b64575f80fd5b615b708a838b01615a49565b94506080890135935060a0890135915080821115615b8c575f80fd5b50615b9989828a01615a49565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 6f03d46fa..6621060ea 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -190,6 +190,20 @@ interface IRollup { BatchSignatureInput calldata batchSignatureInput ) external payable; + /// @notice Commit a batch with ZKP proof for permissionless submission. + /// @dev This function allows anyone to submit batches when the sequencer is offline or censoring. + /// + /// @param batchDataInput The BatchDataInput struct + /// @param batchSignatureInput The BatchSignatureInput struct + /// @param batchHeader The batch header for ZKP verification + /// @param batchProof The ZKP proof data + function commitBatchWithProof( + BatchDataInput calldata batchDataInput, + BatchSignatureInput calldata batchSignatureInput, + bytes calldata batchHeader, + bytes calldata batchProof + ) external; + /// @notice Revert a pending batch. /// @dev one can only revert unfinalized batches. /// @param batchHeader The header of current batch, see the encoding in comments of `commitBatch`. diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index 2cfea7ca0..1377f9a42 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -100,6 +100,8 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { /// @notice committedStateRoots mapping(uint256 batchIndex => bytes32 stateRoot) public committedStateRoots; + /// @notice The delay period for permissionless batch submission. + /// @dev After this period, anyone can submit batches if sequencers are offline or censoring. uint256 public rollupDelayPeriod; /********************** @@ -185,11 +187,14 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { } } + /// @notice Initializer for upgrade to version 3. + /// @param _rollupDelayPeriod The delay period for permissionless batch submission. function initialize3(uint256 _rollupDelayPeriod) external reinitializer(3) { require(_rollupDelayPeriod != 0, "invalid rollup delay period"); rollupDelayPeriod = _rollupDelayPeriod; emit RollupDelayPeriodUpdate(0, _rollupDelayPeriod); } + /************************ * Restricted Functions * ************************/ @@ -338,12 +343,15 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { emit CommitBatch(_batchIndex, committedBatches[_batchIndex]); } + /// @inheritdoc IRollup + /// @dev Allows permissionless batch submission when sequencers are offline or censoring. + /// Entry conditions: rollup delay OR L1 message queue delay must be met. function commitBatchWithProof( BatchDataInput calldata batchDataInput, BatchSignatureInput calldata batchSignatureInput, bytes calldata _batchHeader, bytes calldata _batchProof - ) external payable nonReqRevert whenNotPaused { + ) external override nonReqRevert whenNotPaused { // check delay timing - allow if EITHER batch submission OR L1 message processing is stalled // This enables permissionless batch submission when sequencers are offline or censoring bool rollupDelay = batchDataStore[lastCommittedBatchIndex].originTimestamp + rollupDelayPeriod < From 7092af094ea9828a22414e0199dc049de63274d7 Mon Sep 17 00:00:00 2001 From: kukoomomo Date: Fri, 16 Jan 2026 01:26:33 +0800 Subject: [PATCH 13/13] fix --- bindings/bin/rollup_deployed.hex | 2 +- bindings/bindings/rollup.go | 274 +++++++++++----------- bindings/bindings/rollup_more.go | 2 +- contracts/contracts/l1/rollup/IRollup.sol | 5 +- contracts/contracts/l1/rollup/Rollup.sol | 4 +- 5 files changed, 142 insertions(+), 145 deletions(-) diff --git a/bindings/bin/rollup_deployed.hex b/bindings/bin/rollup_deployed.hex index 3504b2b05..5c9b85600 100644 --- a/bindings/bin/rollup_deployed.hex +++ b/bindings/bin/rollup_deployed.hex @@ -1 +1 @@ -0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a +0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a diff --git a/bindings/bindings/rollup.go b/bindings/bindings/rollup.go index c7d740117..81d257d11 100644 --- a/bindings/bindings/rollup.go +++ b/bindings/bindings/rollup.go @@ -49,8 +49,8 @@ type IRollupBatchSignatureInput struct { // RollupMetaData contains all meta data concerning the Rollup contract. var RollupMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTiming\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"RollupDelayPeriodUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", - Bin: "0x60a060405234801562000010575f80fd5b5060405162004fb038038062004fb083398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e526200015e5f395f81816106370152613c210152614e525ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_chainID\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ErrZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"winner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"string\",\"name\":\"res\",\"type\":\"string\"}],\"name\":\"ChallengeRes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ChallengeRewardClaim\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"}],\"name\":\"ChallengeState\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"CommitBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"withdrawRoot\",\"type\":\"bytes32\"}],\"name\":\"FinalizeBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProveRemainingClaimed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"name\":\"RevertBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"UpdateChallenger\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateFinalizationPeriodSeconds\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPercent\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPercent\",\"type\":\"uint256\"}],\"name\":\"UpdateProofRewardPercent\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldWindow\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newWindow\",\"type\":\"uint256\"}],\"name\":\"UpdateProofWindow\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldPeriod\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newPeriod\",\"type\":\"uint256\"}],\"name\":\"UpdateRollupDelayPeriod\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oldVerifier\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newVerifier\",\"type\":\"address\"}],\"name\":\"UpdateVerifier\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"LAYER_2_CHAIN_ID\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__maxNumTxInChunk\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"addChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"batchChallengeReward\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchChallenged\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchChallengedSuccess\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchDataStore\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"originTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"finalizeTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchExist\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"batchInsideChallengeWindow\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batchHash\",\"type\":\"bytes32\"}],\"name\":\"challengeState\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"challenges\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"batchIndex\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"challenger\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"challengeDeposit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"challengeSuccess\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"finished\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimProveRemaining\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"}],\"name\":\"commitBatch\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"parentBatchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"lastBlockNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"numL1Messages\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"prevStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"postStateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structIRollup.BatchDataInput\",\"name\":\"batchDataInput\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"signedSequencersBitmap\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sequencerSets\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"structIRollup.BatchSignatureInput\",\"name\":\"batchSignatureInput\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"commitBatchWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedBatches\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"batchHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"committedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"finalizationPeriodSeconds\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"finalizeBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"batchIndex\",\"type\":\"uint256\"}],\"name\":\"finalizedStateRoots\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"}],\"name\":\"importGenesisBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"inChallenge\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_l1StakingContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageQueue\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_verifier\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofWindow\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_proofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_prevStateRoot\",\"type\":\"bytes32\"}],\"name\":\"initialize2\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_rollupDelayPeriod\",\"type\":\"uint256\"}],\"name\":\"initialize3\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_batchIndex\",\"type\":\"uint256\"}],\"name\":\"isBatchFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"challengerAddress\",\"type\":\"address\"}],\"name\":\"isChallenger\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isChallenger\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StakingContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastCommittedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFinalizedBatchIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageQueue\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofRewardPercent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proofWindow\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proveRemaining\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_batchProof\",\"type\":\"bytes\"}],\"name\":\"proveState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_account\",\"type\":\"address\"}],\"name\":\"removeChallenger\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_batchHeader\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"_count\",\"type\":\"uint256\"}],\"name\":\"revertBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"revertReqIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollupDelayPeriod\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_status\",\"type\":\"bool\"}],\"name\":\"setPause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateFinalizePeriodSeconds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newWindow\",\"type\":\"uint256\"}],\"name\":\"updateProofWindow\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newProofRewardPercent\",\"type\":\"uint256\"}],\"name\":\"updateRewardPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_newPeriod\",\"type\":\"uint256\"}],\"name\":\"updateRollupDelayPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newVerifier\",\"type\":\"address\"}],\"name\":\"updateVerifier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"verifier\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalRoot\",\"type\":\"bytes32\"}],\"name\":\"withdrawalRoots\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"exist\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]", + Bin: "0x60a060405234801562000010575f80fd5b5060405162004fb038038062004fb083398101604081905262000033916200010f565b6001600160401b0381166080526200004a62000051565b506200013e565b5f54610100900460ff1615620000bd5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146200010d575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f6020828403121562000120575f80fd5b81516001600160401b038116811462000137575f80fd5b9392505050565b608051614e526200015e5f395f81816106370152613c210152614e525ff3fe608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a3a578063e3fff1dd14610a4f578063f2fde38b14610a6e578063fb1e8b0414610a8d575f80fd5b8063d8dc99d2146109e7578063ddd8a3dc146109fc578063de8b303514610a1b575f80fd5b8063ce5db8d6116100c2578063ce5db8d614610994578063cf9a6745146109a9578063d279c191146109c8575f80fd5b8063bedb86fb14610943578063c555389214610962578063cd4edc6914610981575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d3146108d1578063b3484425146108e6578063b35dac4e14610905578063b3e0a50914610924575f80fd5b8063a479265d14610872578063a4f209b014610887578063abc8d68d146108a6575f80fd5b8063910129d411610182578063910129d4146107f457806397fc007c14610825578063a415d8dc14610844575f80fd5b806388b1ea091461070e5780638da5cb5b146107275780638f1d377614610744575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106915780636c578c1d146106bc578063715018a6146106db578063728cdbca146106ef575f80fd5b80635ef7a94a146105c65780635f77cf1d146106265780636126729014610672575f80fd5b80634e8f1d671161024d5780634e8f1d671461057157806357e0af6c146105905780635c975abb146105af575f80fd5b80633b70c18a1461052a5780633e001b6614610549578063428868b51461055e575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b61035736600461462b565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd36600461465d565b610aa2565b005b3480156103cf575f80fd5b506103c26103de3660046146bb565b610b74565b3480156103ee575f80fd5b5061036b6103fd36600461462b565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004614703565b610eb0565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b61046836600461462b565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b61049836600461462b565b61138a565b3480156104a8575f80fd5b506103956104b736600461462b565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e236600461462b565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c54610512906001600160a01b031681565b6040516001600160a01b039091168152602001610377565b348015610535575f80fd5b50609b54610512906001600160a01b031681565b348015610554575f80fd5b5061039560aa5481565b6103c261056c366004614768565b6113b8565b34801561057c575f80fd5b506103c261058b3660046147c8565b6115f4565b34801561059b575f80fd5b506103c26105aa36600461462b565b6118c2565b3480156105ba575f80fd5b5060655460ff1661036b565b3480156105d1575f80fd5b506106066105e036600461462b565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610631575f80fd5b506106597f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b34801561067d575f80fd5b506103c261068c36600461462b565b61196d565b34801561069c575f80fd5b506103956106ab36600461462b565b60ab6020525f908152604090205481565b3480156106c7575f80fd5b506103c26106d636600461465d565b611b48565b3480156106e6575f80fd5b506103c2611c05565b3480156106fa575f80fd5b506103c2610709366004614879565b611c18565b348015610719575f80fd5b5060a65461036b9060ff1681565b348015610732575f80fd5b506033546001600160a01b0316610512565b34801561074f575f80fd5b506107b061075e36600461462b565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff831693680100000000000000009093046001600160a01b0316929060ff8082169161010090041686565b6040805167ffffffffffffffff90971687526001600160a01b03909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b3480156107ff575f80fd5b5061036b61080e36600461462b565b5f90815260a4602052604090206003015460ff1690565b348015610830575f80fd5b506103c261083f36600461465d565b611f21565b34801561084f575f80fd5b5061036b61085e36600461465d565b609f6020525f908152604090205460ff1681565b34801561087d575f80fd5b5061039560995481565b348015610892575f80fd5b506103c26108a136600461462b565b612004565b3480156108b1575f80fd5b506103956108c036600461465d565b60a56020525f908152604090205481565b3480156108dc575f80fd5b5061039560a85481565b3480156108f1575f80fd5b506103c26109003660046148d4565b6120b4565b348015610910575f80fd5b506103c261091f36600461465d565b6123b8565b34801561092f575f80fd5b506103c261093e366004614703565b612411565b34801561094e575f80fd5b506103c261095d366004614948565b612761565b34801561096d575f80fd5b506103c261097c36600461462b565b61289f565b6103c261098f36600461497a565b612942565b34801561099f575f80fd5b5061039560985481565b3480156109b4575f80fd5b506103c26109c336600461462b565b612ed4565b3480156109d3575f80fd5b506103c26109e236600461465d565b613043565b3480156109f2575f80fd5b5061039560ac5481565b348015610a07575f80fd5b50609754610512906001600160a01b031681565b348015610a26575f80fd5b5061036b610a3536600461462b565b613102565b348015610a45575f80fd5b50610395609a5481565b348015610a5a575f80fd5b506103c2610a6936600461462b565b61314c565b348015610a79575f80fd5b506103c2610a8836600461465d565b6131ef565b348015610a98575f80fd5b5061039560a95481565b610aaa61327c565b6001600160a01b0381165f908152609f602052604090205460ff1615610b175760405162461bcd60e51b815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b6001600160a01b0381165f818152609f6020908152604091829020805460ff1916600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610b7c61327c565b5f8111610bcb5760405162461bcd60e51b815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b0e565b5f80610bd785856132d6565b915091505f610bea836001015160c01c90565b5f81815260a160205260409020549091508214610c495760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f60a181610c5787856149cf565b81526020019081526020015f205414610cd75760405162461bcd60e51b8152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b609d548111610d4e5760405162461bcd60e51b815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b610d596001826149e2565b609e555b8315610ea857604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610da581613102565b15610e00575f81815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a59092528220805491929091610df09084906149cf565b909155505060a6805460ff191690555b5f81815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a85415801590610e60575060a85481145b15610e6a575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610d5d575b505050505050565b60a85415610f005760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b610f0861336f565b5f80610f1484846132d6565b915091505f610f27836001015160c01c90565b5f81815260a160205260409020549091508214610f865760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b610f8f8161138a565b610fdb5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b610fe481613102565b156110315760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a4602052604090206003015460ff16156110925760405162461bcd60e51b815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b0e565b5f81815260a260205260409020600101544210156110f25760405162461bcd60e51b815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b0e565b605983015160a05f6111056001856149e2565b81526020019081526020015f2054146111605760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f81815260a06020526040902054156111bb5760405162461bcd60e51b815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b0e565b80609d546001011461120f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b609d819055600160a35f611224866099015190565b815260208101919091526040015f20805460ff191691151591909117905560798301515f82815260a06020526040902055611273611266846011015160c01c90565b600985015160c01c6133c2565b60a25f6112816001846149e2565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab91906112ba90846149e2565b81526020019081526020015f205f905560a45f6001836112da91906149e2565b815260208082019290925260409081015f90812080547fffffffff000000000000000000000000000000000000000000000000000000001681556001810182905560028101829055600301805461ffff1916905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d611366866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a26020526040812054158015906113b257505f82815260a1602052604090205415155b92915050565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015611424573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061144891906149f5565b6114945760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b60a854156114e45760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6114ec61336f565b60ac54609b54604080517fb59b1a7800000000000000000000000000000000000000000000000000000000815290514293926001600160a01b03169163b59b1a789160048083019260209291908290030181865afa158015611550573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115749190614a10565b61157e91906149cf565b10156115e6575f6115956080840160608501614a27565b61ffff16116115e65760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b6115f0828261347f565b5050565b60a854156116445760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61164c61336f565b60ac54609e545f90815260a260205260408120549091429161166e91906149cf565b1090505f4260ac54609b5f9054906101000a90046001600160a01b03166001600160a01b031663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190614a10565b6116f491906149cf565b109050811580156117025750805b15611769575f61171860808a0160608b01614a27565b61ffff16116117695760405162461bcd60e51b815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b0e565b81806117725750805b6117be5760405162461bcd60e51b815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b0e565b6117c8888861347f565b5f806117d488886132d6565b915091505f6117e7836001015160c01c90565b905080609e541461183a5760405162461bcd60e51b815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146118965760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b5f81815260a260205260409020426001909101556118b5838888613bb2565b5050505050505050505050565b6118ca61327c565b5f811180156118db57506099548114155b6119275760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b0e565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff1615801561198d57505f5460ff8083169116105b6119ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100179055611a1d5f5460ff1690565b60ff16600214611a6f5760405162461bcd60e51b815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b0e565b81611ae25760405162461bcd60e51b815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b0e565b609e545f90815260ab6020526040902054611b0b57609e545f90815260ab602052604090208290555b5f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b611b5061327c565b6001600160a01b0381165f908152609f602052604090205460ff16611bb75760405162461bcd60e51b815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b0e565b6001600160a01b0381165f818152609f60209081526040808320805460ff19169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610b69565b611c0d61327c565b611c165f613d65565b565b5f54610100900460ff1615808015611c3657505f54600160ff909116105b80611c4f5750303b158015611c4f57505f5460ff166001145b611cc15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805460ff191660011790558015611ce2575f805461ff0019166101001790555b6001600160a01b0386161580611cff57506001600160a01b038516155b15611d36576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038716611d8c5760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b0e565b611d94613dce565b611d9c613e52565b609780546001600160a01b03808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a18015611f18575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611f2961327c565b6001600160a01b03811615801590611f4f5750609c546001600160a01b03828116911614155b611f9b5760405162461bcd60e51b815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b0e565b609c80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b61200c61327c565b5f8111801561201c575060648111155b801561202a575060a9548114155b6120765760405162461bcd60e51b815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b0e565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611961565b60a854156121045760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b61210c61336f565b6097546001600160a01b03166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612178573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219c91906149f5565b6121e85760405162461bcd60e51b815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b0e565b5f806121f486866132d6565b915091505f612207836001015160c01c90565b5f81815260a1602052604090205490915082146122665760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b61226f81613102565b6122bb5760405162461bcd60e51b815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b0e565b5f81815260a46020526040902060038101805461ff00191661010017905560a6805460ff1916905560995460029091015442916122f7916149cf565b1161236d575f81815260a4602090815260408083206003908101805460ff1916600117905560a2835292819020909201548251808401909352600783527f54696d656f7574000000000000000000000000000000000000000000000000009183019190915261236891839190613ed6565b611f18565b612378838686613bb2565b611f1881336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614032565b6123c061327c565b60aa80545f9091556123d282826140fe565b604080516001600160a01b0384168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611961565b61241961327c565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea54156124905760405162461bcd60e51b815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b0e565b5f8061249c84846132d6565b915091505f6124af836001015160c01c90565b905080156124ff5760405162461bcd60e51b815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b0e565b5f61250b846079015190565b90508061255a5760405162461bcd60e51b815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b0e565b600984015160c01c156125af5760405162461bcd60e51b815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b0e565b5f6125bb856019015190565b036126085760405162461bcd60e51b815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b0e565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612634856039015190565b146126815760405162461bcd60e51b815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b0e565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b61276961327c565b801561286d576127776141a8565b60a65460ff161561282c5760a7545f90815260a460209081526040808320600181015490546801000000000000000090046001600160a01b0316845260a590925282208054919290916127cb9084906149cf565b909155505060a7545f90815260a46020526040812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810191909155600301805461ffff1916905560a6805460ff191690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b612875614202565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361284f565b50565b6128a761327c565b5f811180156128b8575060ac548114155b6129045760405162461bcd60e51b815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b0e565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611961565b335f908152609f602052604090205460ff166129a05760405162461bcd60e51b815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b0e565b60a854156129f05760405162461bcd60e51b815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b0e565b6129f861336f565b60a65460ff1615612a4b5760405162461bcd60e51b815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b0e565b8167ffffffffffffffff16609d5410612aa65760405162461bcd60e51b815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a160205260409020548114612b0d5760405162461bcd60e51b815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b0e565b612b208267ffffffffffffffff1661138a565b612b6c5760405162461bcd60e51b815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a460205260409020546801000000000000000090046001600160a01b031615612be75760405162461bcd60e51b815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b0e565b67ffffffffffffffff82165f90815260a260205260409020600101544210612c775760405162461bcd60e51b815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b0e565b60975f9054906101000a90046001600160a01b03166001600160a01b0316630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ceb9190614a10565b341015612d3a5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b0e565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a4909552969096209451855492516001600160a01b031668010000000000000000027fffffffff000000000000000000000000000000000000000000000000000000009093169816979097171783559451600183015591516002820155925160039093018054925115156101000261ff00199415159490941661ffff19909316929092179290921790556001600160a01b03168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b997634604051612e5291815260200190565b60405180910390a35f609d546001612e6a91906149cf565b90505b609e548111612ec2578267ffffffffffffffff168114612eb0576099545f82815260a2602052604081206001018054909190612eaa9084906149cf565b90915550505b80612eba81614a48565b915050612e6d565b505060a6805460ff1916600117905550565b5f54600390610100900460ff16158015612ef457505f5460ff8083169116105b612f665760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b0e565b5f805461ffff191660ff831617610100178155829003612fc85760405162461bcd60e51b815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b0e565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f805461ff001916905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611961565b335f90815260a56020526040812054908190036130a25760405162461bcd60e51b815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b0e565b335f90815260a560205260408120556130bb82826140fe565b816001600160a01b03167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a826040516130f691815260200190565b60405180910390a25050565b5f81815260a460205260408120546801000000000000000090046001600160a01b0316158015906113b25750505f90815260a46020526040902060030154610100900460ff161590565b61315461327c565b5f8111801561316557506098548114155b6131b15760405162461bcd60e51b815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b0e565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611961565b6131f761327c565b6001600160a01b0381166132735760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b0e565b61289c81613d65565b6033546001600160a01b03163314611c165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b0e565b5f805f6132e3858561423b565b90505f8160ff165f03613304576132fa86866142ab565b9094509050613361565b8160ff16600103613319576132fa8686614314565b60405162461bcd60e51b815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b0e565b808420925050509250929050565b60655460ff1615611c165760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b0e565b805f036133cd575050565b8082035f5b82811015613479576101008184038111156133ec57508083035b609b546040517f3c7f528300000000000000000000000000000000000000000000000000000000815260048101859052602481018390526001600160a01b0390911690633c7f5283906044015f604051808303815f87803b15801561344f575f80fd5b505af1158015613461573d5f803e3d5ffd5b505050506101008301925050610100810190506133d2565b50505050565b61348c6020830183614a7f565b60ff1615806134aa57506134a36020830183614a7f565b60ff166001145b6134f65760405162461bcd60e51b815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b0e565b60808201356135475760405162461bcd60e51b815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b0e565b60a08201356135985760405162461bcd60e51b815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b0e565b5f806135af6135aa6020860186614a9f565b6132d6565b915091505f6135c2836001015160c01c90565b90505f60a1816135d38460016149cf565b81526020019081526020015f20541461362e5760405162461bcd60e51b815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b0e565b609e54811461367f5760405162461bcd60e51b815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b0e565b5f81815260a1602052604090205482146136db5760405162461bcd60e51b815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b0e565b5f81815260ab602052604090205460808601351461373b5760405162461bcd60e51b815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b0e565b5f61374a846011015160c01c90565b90505f6137766137606060890160408a01614b00565b61377060808a0160608b01614a27565b84614367565b90506137886080880160608901614a27565b6001939093019261ffff1691909101905f8049156137a7575f496137c9565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96137da60208a018a614a7f565b60ff166001036137e957506101015b60408051828101909152965061380e8761380660208c018c614a7f565b60ff166143ab565b60c085901b600188015261383c8761382c60808c0160608d01614a27565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526138a08761388160208b018b614a9f565b60405161388f929190614b19565b604051809103902060b99190910152565b60d9870186905260016138b660208b018b614a7f565b60ff16106138e8576138e8876138d260608c0160408d01614b00565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156139475760a7545f90815260a46020526040902060020154609954429161393a916149cf565b61394491906149e2565b90505b6040518060800160405280428152602001826098544261396791906149cf565b61397191906149cf565b815260200161398660608d0160408e01614b00565b67ffffffffffffffff1681526097546020909101906001600160a01b031663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015613a04573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a289190614a10565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e8790556097546001600160a01b031692506374fe27b79150893590613a9090613a8a908c018c614a9f565b5f6143b2565b5f613a9e60408d018d614a9f565b6040518663ffffffff1660e01b8152600401613abe959493929190614b6f565b602060405180830381865afa158015613ad9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613afd91906149f5565b613b6f5760405162461bcd60e51b815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b0e565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80613bff5760405162461bcd60e51b815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b0e565b5f613c0e846001015160c01c90565b90505f613c1c856039015190565b90505f7f0000000000000000000000000000000000000000000000000000000000000000613c4b876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c549091506001600160a01b0316632c09a848613d0d885160f81c90565b858888866040518663ffffffff1660e01b8152600401613d31959493929190614be2565b5f6040518083038186803b158015613d47575f80fd5b505afa158015613d59573d5f803e3d5ffd5b50505050505050505050565b603380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16613e4a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c16614406565b5f54610100900460ff16613ece5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1661448e565b60a88390555f83815260a460205260408082205460975491517f45bc4d1000000000000000000000000000000000000000000000000000000000815260048101869052680100000000000000009091046001600160a01b03908116939216906345bc4d10906024016020604051808303815f875af1158015613f5a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f7e9190614a10565b5f86815260a46020526040902060010154909150613f9d9082906149cf565b5f86815260a460209081526040808320546801000000000000000090046001600160a01b0316835260a590915281208054909190613fdc9084906149cf565b9091555050604051613fef908490614c13565b604051908190038120906001600160a01b0384169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a9549091906064906140569084614c3f565b6140609190614c56565b905061406c81836149e2565b60aa5f82825461407c91906149cf565b90915550506001600160a01b0384165f90815260a56020526040812080548392906140a89084906149cf565b90915550506040516140bb908490614c13565b604051908190038120906001600160a01b0386169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156115f0575f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461414d576040519150601f19603f3d011682016040523d82523d5f602084013e614152565b606091505b50509050806141a35760405162461bcd60e51b815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b0e565b505050565b6141b061336f565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586141e53390565b6040516001600160a01b03909116815260200160405180910390a1565b61420a614513565b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336141e5565b5f816142895760405162461bcd60e51b815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b0e565b82825f81811061429b5761429b614c8e565b919091013560f81c949350505050565b5f8160f98110156142fe5760405162461bcd60e51b815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b0e565b6040519150808483378082016040529250929050565b5f8161010181146142fe5760405162461bcd60e51b815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b0e565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161439c8161ffff871686614565565b82900390912095945050505050565b8082535050565b60605f808080806143c5888a018a614da8565b95509550955095509550508187106143e35794506143ff9350505050565b8387106143f75782955050505050506143ff565b509293505050505b9392505050565b5f54610100900460ff166144825760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b6065805460ff19169055565b5f54610100900460ff1661450a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b0e565b611c1633613d65565b60655460ff16611c165760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b0e565b5f825f036145745750826143ff565b609b546001600160a01b03165f5b84811015614621576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f906001600160a01b0384169063ae453cd590602401602060405180830381865afa1580156145e8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061460c9190614a10565b87525060209095019460019384019301614582565b5093949350505050565b5f6020828403121561463b575f80fd5b5035919050565b80356001600160a01b0381168114614658575f80fd5b919050565b5f6020828403121561466d575f80fd5b6143ff82614642565b5f8083601f840112614686575f80fd5b50813567ffffffffffffffff81111561469d575f80fd5b6020830191508360208285010111156146b4575f80fd5b9250929050565b5f805f604084860312156146cd575f80fd5b833567ffffffffffffffff8111156146e3575f80fd5b6146ef86828701614676565b909790965060209590950135949350505050565b5f8060208385031215614714575f80fd5b823567ffffffffffffffff81111561472a575f80fd5b61473685828601614676565b90969095509350505050565b5f60e08284031215614752575f80fd5b50919050565b5f60608284031215614752575f80fd5b5f8060408385031215614779575f80fd5b823567ffffffffffffffff80821115614790575f80fd5b61479c86838701614742565b935060208501359150808211156147b1575f80fd5b506147be85828601614758565b9150509250929050565b5f805f805f80608087890312156147dd575f80fd5b863567ffffffffffffffff808211156147f4575f80fd5b6148008a838b01614742565b97506020890135915080821115614815575f80fd5b6148218a838b01614758565b96506040890135915080821115614836575f80fd5b6148428a838b01614676565b9096509450606089013591508082111561485a575f80fd5b5061486789828a01614676565b979a9699509497509295939492505050565b5f805f805f8060c0878903121561488e575f80fd5b61489787614642565b95506148a560208801614642565b94506148b360408801614642565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f80604085870312156148e7575f80fd5b843567ffffffffffffffff808211156148fe575f80fd5b61490a88838901614676565b90965094506020870135915080821115614922575f80fd5b5061492f87828801614676565b95989497509550505050565b801515811461289c575f80fd5b5f60208284031215614958575f80fd5b81356143ff8161493b565b803567ffffffffffffffff81168114614658575f80fd5b5f806040838503121561498b575f80fd5b61499483614963565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156113b2576113b26149a2565b818103818111156113b2576113b26149a2565b5f60208284031215614a05575f80fd5b81516143ff8161493b565b5f60208284031215614a20575f80fd5b5051919050565b5f60208284031215614a37575f80fd5b813561ffff811681146143ff575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a7857614a786149a2565b5060010190565b5f60208284031215614a8f575f80fd5b813560ff811681146143ff575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ad2575f80fd5b83018035915067ffffffffffffffff821115614aec575f80fd5b6020019150368190038213156146b4575f80fd5b5f60208284031215614b10575f80fd5b6143ff82614963565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b81811015614bb95784516001600160a01b031683529383019391830191600101614b94565b50508760408601528481036060860152614bd4818789614b28565b9a9950505050505050505050565b858152846020820152608060408201525f614c01608083018587614b28565b90508260608301529695505050505050565b5f82515f5b81811015614c325760208186018101518583015201614c18565b505f920191825250919050565b80820281158282048414176113b2576113b26149a2565b5f82614c89577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614cf7575f80fd5b8135602067ffffffffffffffff80831115614d1457614d14614cbb565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715614d5757614d57614cbb565b6040529384526020818701810194908101925087851115614d76575f80fd5b6020870191505b84821015614d9d57614d8e82614642565b83529183019190830190614d7d565b979650505050505050565b5f805f805f8060c08789031215614dbd575f80fd5b86359550602087013567ffffffffffffffff80821115614ddb575f80fd5b614de78a838b01614ce8565b9650604089013595506060890135915080821115614e03575f80fd5b614e0f8a838b01614ce8565b94506080890135935060a0890135915080821115614e2b575f80fd5b50614e3889828a01614ce8565b915050929550929550929556fea164736f6c6343000818000a", } // RollupABI is the input ABI used to generate the binding from. @@ -3169,141 +3169,6 @@ func (_Rollup *RollupFilterer) ParseRevertBatch(log types.Log) (*RollupRevertBat return event, nil } -// RollupRollupDelayPeriodUpdateIterator is returned from FilterRollupDelayPeriodUpdate and is used to iterate over the raw logs and unpacked data for RollupDelayPeriodUpdate events raised by the Rollup contract. -type RollupRollupDelayPeriodUpdateIterator struct { - Event *RollupRollupDelayPeriodUpdate // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *RollupRollupDelayPeriodUpdateIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(RollupRollupDelayPeriodUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(RollupRollupDelayPeriodUpdate) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *RollupRollupDelayPeriodUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *RollupRollupDelayPeriodUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// RollupRollupDelayPeriodUpdate represents a RollupDelayPeriodUpdate event raised by the Rollup contract. -type RollupRollupDelayPeriodUpdate struct { - OldPeriod *big.Int - NewPeriod *big.Int - Raw types.Log // Blockchain specific contextual infos -} - -// FilterRollupDelayPeriodUpdate is a free log retrieval operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. -// -// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) FilterRollupDelayPeriodUpdate(opts *bind.FilterOpts) (*RollupRollupDelayPeriodUpdateIterator, error) { - - logs, sub, err := _Rollup.contract.FilterLogs(opts, "RollupDelayPeriodUpdate") - if err != nil { - return nil, err - } - return &RollupRollupDelayPeriodUpdateIterator{contract: _Rollup.contract, event: "RollupDelayPeriodUpdate", logs: logs, sub: sub}, nil -} - -// WatchRollupDelayPeriodUpdate is a free log subscription operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. -// -// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) WatchRollupDelayPeriodUpdate(opts *bind.WatchOpts, sink chan<- *RollupRollupDelayPeriodUpdate) (event.Subscription, error) { - - logs, sub, err := _Rollup.contract.WatchLogs(opts, "RollupDelayPeriodUpdate") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(RollupRollupDelayPeriodUpdate) - if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeriodUpdate", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseRollupDelayPeriodUpdate is a log parse operation binding the contract event 0x2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b. -// -// Solidity: event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod) -func (_Rollup *RollupFilterer) ParseRollupDelayPeriodUpdate(log types.Log) (*RollupRollupDelayPeriodUpdate, error) { - event := new(RollupRollupDelayPeriodUpdate) - if err := _Rollup.contract.UnpackLog(event, "RollupDelayPeriodUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // RollupUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the Rollup contract. type RollupUnpausedIterator struct { Event *RollupUnpaused // Event containing the contract specifics and raw log @@ -3988,6 +3853,141 @@ func (_Rollup *RollupFilterer) ParseUpdateProofWindow(log types.Log) (*RollupUpd return event, nil } +// RollupUpdateRollupDelayPeriodIterator is returned from FilterUpdateRollupDelayPeriod and is used to iterate over the raw logs and unpacked data for UpdateRollupDelayPeriod events raised by the Rollup contract. +type RollupUpdateRollupDelayPeriodIterator struct { + Event *RollupUpdateRollupDelayPeriod // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *RollupUpdateRollupDelayPeriodIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(RollupUpdateRollupDelayPeriod) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(RollupUpdateRollupDelayPeriod) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *RollupUpdateRollupDelayPeriodIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *RollupUpdateRollupDelayPeriodIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// RollupUpdateRollupDelayPeriod represents a UpdateRollupDelayPeriod event raised by the Rollup contract. +type RollupUpdateRollupDelayPeriod struct { + OldPeriod *big.Int + NewPeriod *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUpdateRollupDelayPeriod is a free log retrieval operation binding the contract event 0x624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1. +// +// Solidity: event UpdateRollupDelayPeriod(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) FilterUpdateRollupDelayPeriod(opts *bind.FilterOpts) (*RollupUpdateRollupDelayPeriodIterator, error) { + + logs, sub, err := _Rollup.contract.FilterLogs(opts, "UpdateRollupDelayPeriod") + if err != nil { + return nil, err + } + return &RollupUpdateRollupDelayPeriodIterator{contract: _Rollup.contract, event: "UpdateRollupDelayPeriod", logs: logs, sub: sub}, nil +} + +// WatchUpdateRollupDelayPeriod is a free log subscription operation binding the contract event 0x624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1. +// +// Solidity: event UpdateRollupDelayPeriod(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) WatchUpdateRollupDelayPeriod(opts *bind.WatchOpts, sink chan<- *RollupUpdateRollupDelayPeriod) (event.Subscription, error) { + + logs, sub, err := _Rollup.contract.WatchLogs(opts, "UpdateRollupDelayPeriod") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(RollupUpdateRollupDelayPeriod) + if err := _Rollup.contract.UnpackLog(event, "UpdateRollupDelayPeriod", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseUpdateRollupDelayPeriod is a log parse operation binding the contract event 0x624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1. +// +// Solidity: event UpdateRollupDelayPeriod(uint256 oldPeriod, uint256 newPeriod) +func (_Rollup *RollupFilterer) ParseUpdateRollupDelayPeriod(log types.Log) (*RollupUpdateRollupDelayPeriod, error) { + event := new(RollupUpdateRollupDelayPeriod) + if err := _Rollup.contract.UnpackLog(event, "UpdateRollupDelayPeriod", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // RollupUpdateVerifierIterator is returned from FilterUpdateVerifier and is used to iterate over the raw logs and unpacked data for UpdateVerifier events raised by the Rollup contract. type RollupUpdateVerifierIterator struct { Event *RollupUpdateVerifier // Event containing the contract specifics and raw log diff --git a/bindings/bindings/rollup_more.go b/bindings/bindings/rollup_more.go index a4e7756a3..fc6e626f1 100644 --- a/bindings/bindings/rollup_more.go +++ b/bindings/bindings/rollup_more.go @@ -13,7 +13,7 @@ const RollupStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"co var RollupStorageLayout = new(solc.StorageLayout) -var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a95578063e3fff1dd14610aaa578063f2fde38b14610ac9578063fb1e8b0414610ae8575f80fd5b8063d8dc99d214610a35578063ddd8a3dc14610a4a578063de8b303514610a76575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109e2578063cf9a6745146109f7578063d279c19114610a16575f80fd5b8063bedb86fb14610991578063c5553892146109b0578063cd4edc69146109cf575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d31461091f578063b348442514610934578063b35dac4e14610953578063b3e0a50914610972575f80fd5b8063a479265d146108c0578063a4f209b0146108d5578063abc8d68d146108f4575f80fd5b8063910129d411610182578063910129d41461084257806397fc007c14610873578063a415d8dc14610892575f80fd5b806388b1ea09146107355780638da5cb5b1461074e5780638f1d377614610778575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106b85780636c578c1d146106e3578063715018a614610702578063728cdbca14610716575f80fd5b80635ef7a94a146105ed5780635f77cf1d1461064d5780636126729014610699575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105b75780635c975abb146105d6575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615372565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153b1565b610afd565b005b3480156103cf575f80fd5b506103c26103de36600461540f565b610c21565b3480156103ee575f80fd5b5061036b6103fd366004615372565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615457565b61100d565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615372565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615372565b61160c565b3480156104a8575f80fd5b506103956104b7366004615372565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615372565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154bc565b61163a565b3480156105a3575f80fd5b506103c26105b236600461551c565b6118eb565b3480156105c2575f80fd5b506103c26105d1366004615372565b611c55565b3480156105e1575f80fd5b5060655460ff1661036b565b3480156105f8575f80fd5b5061062d610607366004615372565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610658575f80fd5b506106807f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b3480156106a4575f80fd5b506103c26106b3366004615372565b611d1a565b3480156106c3575f80fd5b506103956106d2366004615372565b60ab6020525f908152604090205481565b3480156106ee575f80fd5b506103c26106fd3660046153b1565b611f7d565b34801561070d575f80fd5b506103c261208c565b348015610721575f80fd5b506103c26107303660046155cd565b61209f565b348015610740575f80fd5b5060a65461036b9060ff1681565b348015610759575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610783575f80fd5b506107f1610792366004615372565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b34801561084d575f80fd5b5061036b61085c366004615372565b5f90815260a4602052604090206003015460ff1690565b34801561087e575f80fd5b506103c261088d3660046153b1565b612468565b34801561089d575f80fd5b5061036b6108ac3660046153b1565b609f6020525f908152604090205460ff1681565b3480156108cb575f80fd5b5061039560995481565b3480156108e0575f80fd5b506103c26108ef366004615372565b61258c565b3480156108ff575f80fd5b5061039561090e3660046153b1565b60a56020525f908152604090205481565b34801561092a575f80fd5b5061039560a85481565b34801561093f575f80fd5b506103c261094e366004615628565b612656565b34801561095e575f80fd5b506103c261096d3660046153b1565b612a35565b34801561097d575f80fd5b506103c261098c366004615457565b612a9b565b34801561099c575f80fd5b506103c26109ab36600461569c565b612e87565b3480156109bb575f80fd5b506103c26109ca366004615372565b61301a565b6103c26109dd3660046156ce565b6130d7565b3480156109ed575f80fd5b5061039560985481565b348015610a02575f80fd5b506103c2610a11366004615372565b6137ec565b348015610a21575f80fd5b506103c2610a303660046153b1565b6139c9565b348015610a40575f80fd5b5061039560ac5481565b348015610a55575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a81575f80fd5b5061036b610a90366004615372565b613aaf565b348015610aa0575f80fd5b50610395609a5481565b348015610ab5575f80fd5b506103c2610ac4366004615372565b613b06565b348015610ad4575f80fd5b506103c2610ae33660046153b1565b613bc3565b348015610af3575f80fd5b5061039560a95481565b610b05613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c29613c77565b5f8111610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b90565b5f80610c9e8585613cf8565b915091505f610cb1836001015160c01c90565b5f81815260a160205260409020549091508214610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f60a181610d388785615723565b81526020019081526020015f205414610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b90565b609d548111610e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b610e6e600182615736565b609e555b831561100557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eba81613aaf565b15610f40575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f12908490615723565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fbd575060a85481145b15610fc7575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e72575b505050505050565b60a85415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61107f613dab565b5f8061108b8484613cf8565b915091505f61109e836001015160c01c90565b5f81815260a160205260409020549091508214611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6111208161160c565b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b61118f81613aaf565b156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003015460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b90565b5f81815260a260205260409020600101544210156112eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b90565b605983015160a05f6112fe600185615736565b81526020019081526020015f205414611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f81815260a06020526040902054156113e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b90565b80609d5460010114611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b609d819055600160a35f61146b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114d86114cb846011015160c01c90565b600985015160c01c613e18565b60a25f6114e6600184615736565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151f9084615736565b81526020019081526020015f205f905560a45f60018361153f9190615736565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115e8866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061163457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e49190615749565b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b60a854156117b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6117bc613dab565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa15801561182d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118519190615764565b61185b9190615723565b10156118dd575f611872608084016060850161577b565b61ffff16116118dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b6118e78282613ee2565b5050565b60a85415611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61195d613dab565b60ac54609e545f90815260a260205260408120549091429161197f9190615723565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a159190615764565b611a1f9190615723565b10905081158015611a2d5750805b15611aae575f611a4360808a0160608b0161577b565b61ffff1611611aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b8180611ab75750805b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b90565b611b278888613ee2565b5f80611b338888613cf8565b915091505f611b46836001015160c01c90565b905080609e5414611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b90565b5f81815260a160205260409020548214611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f81815260a26020526040902042600190910155611c4883888861470c565b5050505050505050505050565b611c5d613c77565b5f81118015611c6e57506099548114155b611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b90565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d3a57505f5460ff8083169116105b611dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e015f5460ff1690565b60ff16600214611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b90565b81611efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b90565b609e545f90815260ab6020526040902054611f2357609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b611f85613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b90565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c16565b612094613c77565b61209d5f6148e6565b565b5f54610100900460ff16158080156120bd57505f54600160ff909116105b806120d65750303b1580156120d657505f5460ff166001145b612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121be575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121f5575073ffffffffffffffffffffffffffffffffffffffff8516155b1561222c576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b90565b6122b161495c565b6122b96149fa565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561245f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612470613c77565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124b05750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b90565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612594613c77565b5f811180156125a4575060648111155b80156125b2575060a9548114155b612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b90565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d0e565b60a854156126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6126c8613dab565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561274e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127729190615749565b6127d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b5f806127e48686613cf8565b915091505f6127f7836001015160c01c90565b5f81815260a160205260409020549091508214612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b61287981613aaf565b6128df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161295691615723565b116129ea575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129e591839190614a98565b61245f565b6129f583868661470c565b61245f81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c1b565b612a3d613c77565b60aa80545f909155612a4f8282614d01565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d0e565b612aa3613c77565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b90565b5f80612b408484613cf8565b915091505f612b53836001015160c01c90565b90508015612bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b90565b5f612bc9846079015190565b905080612c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b90565b600984015160c01c15612ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b90565b5f612cad856019015190565b03612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b90565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d40856039015190565b14612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b90565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e8f613c77565b8015612fe857612e9d614dd2565b60a65460ff1615612f9a5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612efe908490615723565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612ff0614e57565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fbd565b50565b613022613c77565b5f81118015613033575060ac548114155b613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b90565b60ac80549082905560408051828152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b9101611d0e565b335f908152609f602052604090205460ff1661314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b90565b60a854156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6131c1613dab565b60a65460ff161561322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b90565b8167ffffffffffffffff16609d54106132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a160205260409020548114613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6133378267ffffffffffffffff1661160c565b61339d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561343f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b90565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135779190615764565b3410156135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374c91815260200190565b60405180910390a35f609d5460016137649190615723565b90505b609e5481116137bc578267ffffffffffffffff1681146137aa576099545f82815260a26020526040812060010180549091906137a4908490615723565b90915550505b806137b48161579c565b915050613767565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380c57505f5460ff8083169116105b613898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b90565b60ac829055604080515f8152602081018490527f2392c64c3c2ac54ae8093f1b546601e09b9c3ee6086d2f2595db2d3c54f3f56b910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b335f90815260a5602052604081205490819003613a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b90565b335f90815260a56020526040812055613a5b8282614d01565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613aa391815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116345750505f90815260a46020526040902060030154610100900460ff161590565b613b0e613c77565b5f81118015613b1f57506098548114155b613b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b90565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d0e565b613bcb613c77565b73ffffffffffffffffffffffffffffffffffffffff8116613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b90565b613017816148e6565b60335473ffffffffffffffffffffffffffffffffffffffff16331461209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b90565b5f805f613d058585614eae565b90505f8160ff165f03613d2657613d1c8686614f38565b9094509050613d9d565b8160ff16600103613d3b57613d1c8686614fbb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b90565b808420925050509250929050565b60655460ff161561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b90565b805f03613e23575050565b8082035f5b82811015613edc57610100818403811115613e4257508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613eb2575f80fd5b505af1158015613ec4573d5f803e3d5ffd5b50505050610100830192505061010081019050613e28565b50505050565b613eef60208301836157d3565b60ff161580613f0d5750613f0660208301836157d3565b60ff166001145b613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b90565b6080820135613fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b90565b60a0820135614049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b90565b5f8061406061405b60208601866157f3565b613cf8565b915091505f614073836001015160c01c90565b90505f60a181614084846001615723565b81526020019081526020015f2054146140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b90565b609e548114614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b5f81815260a1602052604090205482146141da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b90565b5f81815260ab6020526040902054608086013514614254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f614263846011015160c01c90565b90505f61428f6142796060890160408a01615854565b61428960808a0160608b0161577b565b84615028565b90506142a1608088016060890161577b565b6001939093019261ffff1691909101905f8049156142c0575f496142e2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142f360208a018a6157d3565b60ff1660010361430257506101015b6040805182810190915296506143278761431f60208c018c6157d3565b60ff1661506c565b60c085901b60018801526143558761434560808c0160608d0161577b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143b98761439a60208b018b6157f3565b6040516143a892919061586d565b604051809103902060b99190910152565b60d9870186905260016143cf60208b018b6157d3565b60ff161061440157614401876143eb60608c0160408d01615854565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144605760a7545f90815260a46020526040902060020154609954429161445391615723565b61445d9190615736565b90505b604051806080016040528042815260200182609854426144809190615723565b61448a9190615723565b815260200161449f60608d0160408e01615854565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061455b9190615764565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145d0906145ca908c018c6157f3565b5f615073565b5f6145de60408d018d6157f3565b6040518663ffffffff1660e01b81526004016145fe9594939291906158c3565b602060405180830381865afa158015614619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061463d9190615749565b6146c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b90565b5f614782846001015160c01c90565b90505f614790856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147bf876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861488e885160f81c90565b858888866040518663ffffffff1660e01b81526004016148b2959493929190615943565b5f6040518083038186803b1580156148c8575f80fd5b505afa1580156148da573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d6150c7565b5f54610100900460ff16614a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d615187565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b4d9190615764565b5f86815260a46020526040902060010154909150614b6c908290615723565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bb8908490615723565b9091555050604051614bcb908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c3f90846159a0565b614c4991906159b7565b9050614c558183615736565b60aa5f828254614c659190615723565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c9e908490615723565b9091555050604051614cb1908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118e7575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d5d576040519150601f19603f3d011682016040523d82523d5f602084013e614d62565b606091505b5050905080614dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b90565b505050565b614dda613dab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e2d3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5f615226565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e2d565b5f81614f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b90565b82825f818110614f2857614f286159ef565b919091013560f81c949350505050565b5f8160f9811015614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b90565b6040519150808483378082016040529250929050565b5f816101018114614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b90565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161505d8161ffff871686615292565b82900390912095945050505050565b8082535050565b60605f80808080615086888a018a615b09565b95509550955095509550508187106150a45794506150c09350505050565b8387106150b85782955050505050506150c0565b509293505050505b9392505050565b5f54610100900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff1661521d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d336148e6565b60655460ff1661209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b90565b5f825f036152a15750826150c0565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b84811015615368576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561532f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153539190615764565b875250602090950194600193840193016152bc565b5093949350505050565b5f60208284031215615382575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153ac575f80fd5b919050565b5f602082840312156153c1575f80fd5b6150c082615389565b5f8083601f8401126153da575f80fd5b50813567ffffffffffffffff8111156153f1575f80fd5b602083019150836020828501011115615408575f80fd5b9250929050565b5f805f60408486031215615421575f80fd5b833567ffffffffffffffff811115615437575f80fd5b615443868287016153ca565b909790965060209590950135949350505050565b5f8060208385031215615468575f80fd5b823567ffffffffffffffff81111561547e575f80fd5b61548a858286016153ca565b90969095509350505050565b5f60e082840312156154a6575f80fd5b50919050565b5f606082840312156154a6575f80fd5b5f80604083850312156154cd575f80fd5b823567ffffffffffffffff808211156154e4575f80fd5b6154f086838701615496565b93506020850135915080821115615505575f80fd5b50615512858286016154ac565b9150509250929050565b5f805f805f8060808789031215615531575f80fd5b863567ffffffffffffffff80821115615548575f80fd5b6155548a838b01615496565b97506020890135915080821115615569575f80fd5b6155758a838b016154ac565b9650604089013591508082111561558a575f80fd5b6155968a838b016153ca565b909650945060608901359150808211156155ae575f80fd5b506155bb89828a016153ca565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155e2575f80fd5b6155eb87615389565b95506155f960208801615389565b945061560760408801615389565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561563b575f80fd5b843567ffffffffffffffff80821115615652575f80fd5b61565e888389016153ca565b90965094506020870135915080821115615676575f80fd5b50615683878288016153ca565b95989497509550505050565b8015158114613017575f80fd5b5f602082840312156156ac575f80fd5b81356150c08161568f565b803567ffffffffffffffff811681146153ac575f80fd5b5f80604083850312156156df575f80fd5b6156e8836156b7565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611634576116346156f6565b81810381811115611634576116346156f6565b5f60208284031215615759575f80fd5b81516150c08161568f565b5f60208284031215615774575f80fd5b5051919050565b5f6020828403121561578b575f80fd5b813561ffff811681146150c0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157cc576157cc6156f6565b5060010190565b5f602082840312156157e3575f80fd5b813560ff811681146150c0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615826575f80fd5b83018035915067ffffffffffffffff821115615840575f80fd5b602001915036819003821315615408575f80fd5b5f60208284031215615864575f80fd5b6150c0826156b7565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561591a57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158e8565b5050876040860152848103606086015261593581878961587c565b9a9950505050505050505050565b858152846020820152608060408201525f61596260808301858761587c565b90508260608301529695505050505050565b5f82515f5b818110156159935760208186018101518583015201615979565b505f920191825250919050565b8082028115828204841417611634576116346156f6565b5f826159ea577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a58575f80fd5b8135602067ffffffffffffffff80831115615a7557615a75615a1c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ab857615ab8615a1c565b6040529384526020818701810194908101925087851115615ad7575f80fd5b6020870191505b84821015615afe57615aef82615389565b83529183019190830190615ade565b979650505050505050565b5f805f805f8060c08789031215615b1e575f80fd5b86359550602087013567ffffffffffffffff80821115615b3c575f80fd5b615b488a838b01615a49565b9650604089013595506060890135915080821115615b64575f80fd5b615b708a838b01615a49565b94506080890135935060a0890135915080821115615b8c575f80fd5b50615b9989828a01615a49565b915050929550929550929556fea164736f6c6343000818000a" +var RollupDeployedBin = "0x608060405260043610610332575f3560e01c806388b1ea09116101a7578063bedb86fb116100e7578063d8dc99d211610092578063dff7827e1161006d578063dff7827e14610a95578063e3fff1dd14610aaa578063f2fde38b14610ac9578063fb1e8b0414610ae8575f80fd5b8063d8dc99d214610a35578063ddd8a3dc14610a4a578063de8b303514610a76575f80fd5b8063ce5db8d6116100c2578063ce5db8d6146109e2578063cf9a6745146109f7578063d279c19114610a16575f80fd5b8063bedb86fb14610991578063c5553892146109b0578063cd4edc69146109cf575f80fd5b8063a479265d11610152578063b31a77d31161012d578063b31a77d31461091f578063b348442514610934578063b35dac4e14610953578063b3e0a50914610972575f80fd5b8063a479265d146108c0578063a4f209b0146108d5578063abc8d68d146108f4575f80fd5b8063910129d411610182578063910129d41461084257806397fc007c14610873578063a415d8dc14610892575f80fd5b806388b1ea09146107355780638da5cb5b1461074e5780638f1d377614610778575f80fd5b80633b70c18a116102725780635ef7a94a1161021d57806368589dfa116101f857806368589dfa146106b85780636c578c1d146106e3578063715018a614610702578063728cdbca14610716575f80fd5b80635ef7a94a146105ed5780635f77cf1d1461064d5780636126729014610699575f80fd5b80634e8f1d671161024d5780634e8f1d671461059857806357e0af6c146105b75780635c975abb146105d6575f80fd5b80633b70c18a146105445780633e001b6614610570578063428868b514610585575f80fd5b806313361101116102dd57806321e2f9e0116102b857806321e2f9e01461047e5780632362f03e1461049d5780632571098d146104c85780632b7ac3f3146104f3575f80fd5b8063133611011461041a57806318463fb01461043957806318af3b2b1461044e575f80fd5b806310d445831161030d57806310d44583146103c4578063116a1f42146103e3578063121dcd5014610405575f80fd5b806304d772151461033d578063059def61146103805780630ceb6780146103a3575f80fd5b3661033957005b5f80fd5b348015610348575f80fd5b5061036b610357366004615372565b60a36020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561038b575f80fd5b50610395609d5481565b604051908152602001610377565b3480156103ae575f80fd5b506103c26103bd3660046153b1565b610afd565b005b3480156103cf575f80fd5b506103c26103de36600461540f565b610c21565b3480156103ee575f80fd5b5061036b6103fd366004615372565b609d54101590565b348015610410575f80fd5b50610395609e5481565b348015610425575f80fd5b506103c2610434366004615457565b61100d565b348015610444575f80fd5b5061039560a75481565b348015610459575f80fd5b5061036b610468366004615372565b5f90815260a26020526040902060010154421090565b348015610489575f80fd5b5061036b610498366004615372565b61160c565b3480156104a8575f80fd5b506103956104b7366004615372565b60a16020525f908152604090205481565b3480156104d3575f80fd5b506103956104e2366004615372565b60a06020525f908152604090205481565b3480156104fe575f80fd5b50609c5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610377565b34801561054f575f80fd5b50609b5461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057b575f80fd5b5061039560aa5481565b6103c26105933660046154bc565b61163a565b3480156105a3575f80fd5b506103c26105b236600461551c565b6118eb565b3480156105c2575f80fd5b506103c26105d1366004615372565b611c55565b3480156105e1575f80fd5b5060655460ff1661036b565b3480156105f8575f80fd5b5061062d610607366004615372565b60a26020525f908152604090208054600182015460028301546003909301549192909184565b604080519485526020850193909352918301526060820152608001610377565b348015610658575f80fd5b506106807f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610377565b3480156106a4575f80fd5b506103c26106b3366004615372565b611d1a565b3480156106c3575f80fd5b506103956106d2366004615372565b60ab6020525f908152604090205481565b3480156106ee575f80fd5b506103c26106fd3660046153b1565b611f7d565b34801561070d575f80fd5b506103c261208c565b348015610721575f80fd5b506103c26107303660046155cd565b61209f565b348015610740575f80fd5b5060a65461036b9060ff1681565b348015610759575f80fd5b5060335473ffffffffffffffffffffffffffffffffffffffff1661051f565b348015610783575f80fd5b506107f1610792366004615372565b60a46020525f9081526040902080546001820154600283015460039093015467ffffffffffffffff8316936801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff16929060ff8082169161010090041686565b6040805167ffffffffffffffff909716875273ffffffffffffffffffffffffffffffffffffffff909516602087015293850192909252606084015215156080830152151560a082015260c001610377565b34801561084d575f80fd5b5061036b61085c366004615372565b5f90815260a4602052604090206003015460ff1690565b34801561087e575f80fd5b506103c261088d3660046153b1565b612468565b34801561089d575f80fd5b5061036b6108ac3660046153b1565b609f6020525f908152604090205460ff1681565b3480156108cb575f80fd5b5061039560995481565b3480156108e0575f80fd5b506103c26108ef366004615372565b61258c565b3480156108ff575f80fd5b5061039561090e3660046153b1565b60a56020525f908152604090205481565b34801561092a575f80fd5b5061039560a85481565b34801561093f575f80fd5b506103c261094e366004615628565b612656565b34801561095e575f80fd5b506103c261096d3660046153b1565b612a35565b34801561097d575f80fd5b506103c261098c366004615457565b612a9b565b34801561099c575f80fd5b506103c26109ab36600461569c565b612e87565b3480156109bb575f80fd5b506103c26109ca366004615372565b61301a565b6103c26109dd3660046156ce565b6130d7565b3480156109ed575f80fd5b5061039560985481565b348015610a02575f80fd5b506103c2610a11366004615372565b6137ec565b348015610a21575f80fd5b506103c2610a303660046153b1565b6139c9565b348015610a40575f80fd5b5061039560ac5481565b348015610a55575f80fd5b5060975461051f9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610a81575f80fd5b5061036b610a90366004615372565b613aaf565b348015610aa0575f80fd5b50610395609a5481565b348015610ab5575f80fd5b506103c2610ac4366004615372565b613b06565b348015610ad4575f80fd5b506103c2610ae33660046153b1565b613bc3565b348015610af3575f80fd5b5061039560a95481565b610b05613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff1615610b99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f6163636f756e7420697320616c72656164792061206368616c6c656e6765720060448201526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc00991015b60405180910390a250565b610c29613c77565b5f8111610c92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f636f756e74206d757374206265206e6f6e7a65726f00000000000000000000006044820152606401610b90565b5f80610c9e8585613cf8565b915091505f610cb1836001015160c01c90565b5f81815260a160205260409020549091508214610d2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f60a181610d388785615723565b81526020019081526020015f205414610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f726576657274696e67206d7573742073746172742066726f6d2074686520656e60448201527f64696e67000000000000000000000000000000000000000000000000000000006064820152608401610b90565b609d548111610e63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f63616e206f6e6c792072657665727420756e46696e616c697a6564206261746360448201527f68000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b610e6e600182615736565b609e555b831561100557604051829082907ecae2739091badfd91c373f0a16cede691e0cd25bb80cff77dd5caeb4710146905f90a35f81815260a16020526040812055610eba81613aaf565b15610f40575f81815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091610f12908490615723565b909155505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b5f81815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a85415801590610fbd575060a85481145b15610fc7575f60a8555b6001015f81815260a160205260409020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940193915081610e72575b505050505050565b60a85415611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61107f613dab565b5f8061108b8484613cf8565b915091505f61109e836001015160c01c90565b5f81815260a160205260409020549091508214611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6111208161160c565b611186576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b61118f81613aaf565b156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003015460ff1615611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f62617463682073686f756c6420626520726576657274000000000000000000006044820152606401610b90565b5f81815260a260205260409020600101544210156112eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f626174636820696e206368616c6c656e67652077696e646f77000000000000006044820152606401610b90565b605983015160a05f6112fe600185615736565b81526020019081526020015f205414611373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f81815260a06020526040902054156113e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f626174636820616c7265616479207665726966696564000000000000000000006044820152606401610b90565b80609d5460010114611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b609d819055600160a35f61146b866099015190565b815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905560798301515f82815260a060205260409020556114d86114cb846011015160c01c90565b600985015160c01c613e18565b60a25f6114e6600184615736565b815260208101919091526040015f908120818155600180820183905560028201839055600390910182905560ab919061151f9084615736565b81526020019081526020015f205f905560a45f60018361153f9190615736565b815260208082019290925260409081015f90812080547fffffffff00000000000000000000000000000000000000000000000000000000168155600181018290556002810182905560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905583815260a1909252902054817f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d6115e8866079015190565b60998701516040805192835260208301919091520160405180910390a35050505050565b5f81815260a260205260408120541580159061163457505f82815260a1602052604090205415155b92915050565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa1580156116c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e49190615749565b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b60a854156117b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6117bc613dab565b60ac54609b54604080517fb59b1a78000000000000000000000000000000000000000000000000000000008152905142939273ffffffffffffffffffffffffffffffffffffffff169163b59b1a789160048083019260209291908290030181865afa15801561182d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118519190615764565b61185b9190615723565b10156118dd575f611872608084016060850161577b565b61ffff16116118dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b6118e78282613ee2565b5050565b60a85415611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b61195d613dab565b60ac54609e545f90815260a260205260408120549091429161197f9190615723565b1090505f4260ac54609b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b59b1a786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a159190615764565b611a1f9190615723565b10905081158015611a2d5750805b15611aae575f611a4360808a0160608b0161577b565b61ffff1611611aae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6c316d73672064656c61790000000000000000000000000000000000000000006044820152606401610b90565b8180611ab75750805b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f696e76616c69642074696d696e670000000000000000000000000000000000006044820152606401610b90565b611b278888613ee2565b5f80611b338888613cf8565b915091505f611b46836001015160c01c90565b905080609e5414611bb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e636f727265637420626174636820686561646572000000000000000000006044820152606401610b90565b5f81815260a160205260409020548214611c29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b5f81815260a26020526040902042600190910155611c4883888861470c565b5050505050505050505050565b611c5d613c77565b5f81118015611c6e57506099548114155b611cd4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f696e76616c6964206e65772070726f6f662077696e646f7700000000000000006044820152606401610b90565b609980549082905560408051828152602081018490527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a6191015b60405180910390a15050565b5f54600290610100900460ff16158015611d3a57505f5460ff8083169116105b611dc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055611e015f5460ff1690565b60ff16600214611e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6d757374206861766520696e697469616c697a656421000000000000000000006044820152606401610b90565b81611efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f63616e206e6f742073657420737461746520726f6f742077697468206279746560448201527f73333228302921000000000000000000000000000000000000000000000000006064820152608401610b90565b609e545f90815260ab6020526040902054611f2357609e545f90815260ab602052604090208290555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b611f85613c77565b73ffffffffffffffffffffffffffffffffffffffff81165f908152609f602052604090205460ff16612013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6163636f756e74206973206e6f742061206368616c6c656e67657200000000006044820152606401610b90565b73ffffffffffffffffffffffffffffffffffffffff81165f818152609f6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055519182527f7feb653c7b1f0d23daeed494225b3f28851cdc8973fcc653866d9b6e205fc0099101610c16565b612094613c77565b61209d5f6148e6565b565b5f54610100900460ff16158080156120bd57505f54600160ff909116105b806120d65750303b1580156120d657505f5460ff166001145b612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156121be575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff861615806121f5575073ffffffffffffffffffffffffffffffffffffffff8516155b1561222c576040517fecc6fdf000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166122a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206c31207374616b696e6720636f6e747261637400000000006044820152606401610b90565b6122b161495c565b6122b96149fa565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255609b8054898416908316179055609c805492881692909116821790556098859055609984905560a98390556040515f907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96908290a3604080515f8152602081018690527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a437910160405180910390a1604080515f8152602081018590527f1e3a2094feb4b696dd3d7caea38ad2f41dbdcac3fa3943c7a693aff8a64b0a61910160405180910390a1604080515f8152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b0223910160405180910390a1801561245f575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b612470613c77565b73ffffffffffffffffffffffffffffffffffffffff8116158015906124b05750609c5473ffffffffffffffffffffffffffffffffffffffff828116911614155b612516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e76616c6964206e65772076657269666965720000000000000000000000006044820152606401610b90565b609c805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f728af3d16a5760405e27a082c98ab272e9f0a1d02f0085d41532a26093aedd96905f90a35050565b612594613c77565b5f811180156125a4575060648111155b80156125b2575060a9548114155b612618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c69642070726f6f66207265776172642070657263656e74616765006044820152606401610b90565b60a980549082905560408051828152602081018490527ffb81bce17f015797e11949d3c332e2bf9453faf68f728447426803138f2b02239101611d0e565b60a854156126c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6126c8613dab565b60975473ffffffffffffffffffffffffffffffffffffffff166368015791336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa15801561274e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127729190615749565b6127d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6f6e6c7920616374697665207374616b657220616c6c6f7765640000000000006044820152606401610b90565b5f806127e48686613cf8565b915091505f6127f7836001015160c01c90565b5f81815260a160205260409020549091508214612870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b61287981613aaf565b6128df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f626174636820696e206368616c6c656e676500000000000000000000000000006044820152606401610b90565b5f81815260a4602052604090206003810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010017905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055609954600290910154429161295691615723565b116129ea575f81815260a460209081526040808320600390810180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560a2835292819020909201548251808401909352600783527f54696d656f757400000000000000000000000000000000000000000000000000918301919091526129e591839190614a98565b61245f565b6129f583868661470c565b61245f81336040518060400160405280600d81526020017f50726f6f66207375636365737300000000000000000000000000000000000000815250614c1b565b612a3d613c77565b60aa80545f909155612a4f8282614d01565b6040805173ffffffffffffffffffffffffffffffffffffffff84168152602081018390527fb1b2058a6969e2d25e47bcaebe8ae21c29a23b2752429315b75e2f4f285f3d879101611d0e565b612aa3613c77565b5f805260a06020527fb84a74ec6ef4d0e83b6006dfaa014ab4026f9f3b97d186e604d29998a4e808ea5415612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f67656e6573697320626174636820696d706f72746564000000000000000000006044820152606401610b90565b5f80612b408484613cf8565b915091505f612b53836001015160c01c90565b90508015612bbd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f696e76616c696420626174636820696e646578000000000000000000000000006044820152606401610b90565b5f612bc9846079015190565b905080612c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7a65726f20737461746520726f6f7400000000000000000000000000000000006044820152606401610b90565b600984015160c01c15612ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6c31206d65737361676520706f707065642073686f756c6420626520300000006044820152606401610b90565b5f612cad856019015190565b03612d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7a65726f206461746120686173680000000000000000000000000000000000006044820152606401610b90565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c444014612d40856039015190565b14612da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c69642076657273696f6e65642068617368000000000000000000006044820152606401610b90565b5f82815260a1602090815260408083208690558051608081018252428082528184019081528183018581526060830186815288875260a2865284872093518455915160018401555160028301555160039091015560ab825280832084905560a0909152808220839055609e849055609d84905551849184917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a3604080518281525f6020820152849184917f26ba82f907317eedc97d0cbef23de76a43dd6edb563bdb6e9407645b950a7a2d910160405180910390a3505050505050565b612e8f613c77565b8015612fe857612e9d614dd2565b60a65460ff1615612f9a5760a7545f90815260a4602090815260408083206001810154905468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16845260a59092528220805491929091612efe908490615723565b909155505060a7545f90815260a46020526040812080547fffffffff0000000000000000000000000000000000000000000000000000000016815560018101829055600281019190915560030180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016905560a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690555b7f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b612ff0614e57565b7f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612fbd565b50565b613022613c77565b5f81118015613033575060ac548114155b613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f696e76616c6964206e657720726f6c6c75702064656c617920706572696f64006044820152606401610b90565b60ac80549082905560408051828152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad19101611d0e565b335f908152609f602052604090205460ff1661314f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f63616c6c6572206368616c6c656e67657220616c6c6f776564000000000000006044820152606401610b90565b60a854156131b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e656564207265766572740000000000000000000000000000000000000000006044820152606401610b90565b6131c1613dab565b60a65460ff161561322e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f616c726561647920696e206368616c6c656e67650000000000000000000000006044820152606401610b90565b8167ffffffffffffffff16609d54106132a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c72656164792066696e616c697a65640000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a160205260409020548114613324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f696e636f727265637420626174636820686173680000000000000000000000006044820152606401610b90565b6133378267ffffffffffffffff1661160c565b61339d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6261746368206e6f7420657869737400000000000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a4602052604090205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff161561343f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f626174636820616c7265616479206368616c6c656e67656400000000000000006044820152606401610b90565b67ffffffffffffffff82165f90815260a2602052604090206001015442106134e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f63616e6e6f74206368616c6c656e6765206261746368206f757473696465207460448201527f6865206368616c6c656e67652077696e646f77000000000000000000000000006064820152608401610b90565b60975f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630d13fd7b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613553573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135779190615764565b3410156135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f696e73756666696369656e742076616c756500000000000000000000000000006044820152606401610b90565b67ffffffffffffffff82811660a78190556040805160c0810182528281523360208083018281523484860190815242606086019081525f6080870181815260a0880182815299825260a49095529690962094518554925173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff00000000000000000000000000000000000000000000000000000000909316981697909717178355945160018301559151600282015592516003909301805492511515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009093169290921792909217905573ffffffffffffffffffffffffffffffffffffffff168267ffffffffffffffff167f3a6ea19df25b49e7624e313ce7c1ab23984238e93727260db56a81735b1b99763460405161374c91815260200190565b60405180910390a35f609d5460016137649190615723565b90505b609e5481116137bc578267ffffffffffffffff1681146137aa576099545f82815260a26020526040812060010180549091906137a4908490615723565b90915550505b806137b48161579c565b915050613767565b505060a680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b5f54600390610100900460ff1615801561380c57505f5460ff8083169116105b613898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610b90565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100178155829003613931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c696420726f6c6c75702064656c617920706572696f6400000000006044820152606401610b90565b60ac829055604080515f8152602081018490527f624e47dc9fb8f8cfeaf4ead4710277cc1757136cfa885e465514cf6d510f0ad1910160405180910390a15f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611d0e565b335f90815260a5602052604081205490819003613a42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f696e76616c69642062617463684368616c6c656e6765526577617264000000006044820152606401610b90565b335f90815260a56020526040812055613a5b8282614d01565b8173ffffffffffffffffffffffffffffffffffffffff167f9c25fa83f414ed363c8d39c98fb3e17567b3431cede71eb062c49d2a63ce247a82604051613aa391815260200190565b60405180910390a25050565b5f81815260a4602052604081205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16158015906116345750505f90815260a46020526040902060030154610100900460ff161590565b613b0e613c77565b5f81118015613b1f57506098548114155b613b85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e76616c6964206e65772066696e616c697a6520706572696f6400000000006044820152606401610b90565b609880549082905560408051828152602081018490527fa577f4223f91f74e2dad65bbb8c30807587ae95d0d34288057bb3ec0d398a4379101611d0e565b613bcb613c77565b73ffffffffffffffffffffffffffffffffffffffff8116613c6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610b90565b613017816148e6565b60335473ffffffffffffffffffffffffffffffffffffffff16331461209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b90565b5f805f613d058585614eae565b90505f8160ff165f03613d2657613d1c8686614f38565b9094509050613d9d565b8160ff16600103613d3b57613d1c8686614fbb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f556e737570706f727465642062617463682076657273696f6e000000000000006044820152606401610b90565b808420925050509250929050565b60655460ff161561209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610b90565b805f03613e23575050565b8082035f5b82811015613edc57610100818403811115613e4257508083035b609b546040517f3c7f5283000000000000000000000000000000000000000000000000000000008152600481018590526024810183905273ffffffffffffffffffffffffffffffffffffffff90911690633c7f5283906044015f604051808303815f87803b158015613eb2575f80fd5b505af1158015613ec4573d5f803e3d5ffd5b50505050610100830192505061010081019050613e28565b50505050565b613eef60208301836157d3565b60ff161580613f0d5750613f0660208301836157d3565b60ff166001145b613f73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642076657273696f6e00000000000000000000000000000000006044820152606401610b90565b6080820135613fde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f70726576696f757320737461746520726f6f74206973207a65726f00000000006044820152606401610b90565b60a0820135614049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f6e657720737461746520726f6f74206973207a65726f000000000000000000006044820152606401610b90565b5f8061406061405b60208601866157f3565b613cf8565b915091505f614073836001015160c01c90565b90505f60a181614084846001615723565b81526020019081526020015f2054146140f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f626174636820616c726561647920636f6d6d69747465640000000000000000006044820152606401610b90565b609e548114614164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f696e636f727265637420626174636820696e64657800000000000000000000006044820152606401610b90565b5f81815260a1602052604090205482146141da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f696e636f727265637420706172656e74206261746368206861736800000000006044820152606401610b90565b5f81815260ab6020526040902054608086013514614254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f696e636f72726563742070726576696f757320737461746520726f6f740000006044820152606401610b90565b5f614263846011015160c01c90565b90505f61428f6142796060890160408a01615854565b61428960808a0160608b0161577b565b84615028565b90506142a1608088016060890161577b565b6001939093019261ffff1691909101905f8049156142c0575f496142e2565b7f010657f37554c781402a22917dee2f75def7ab966d7b770905398eba3c4440145b905060f96142f360208a018a6157d3565b60ff1660010361430257506101015b6040805182810190915296506143278761431f60208c018c6157d3565b60ff1661506c565b60c085901b60018801526143558761434560808c0160608d0161577b565b61ffff1660c01b60099190910152565b60c084811b6011890152601988018490526039880183905260808a0135605989015260a08a0135607989015289013560998801526143b98761439a60208b018b6157f3565b6040516143a892919061586d565b604051809103902060b99190910152565b60d9870186905260016143cf60208b018b6157d3565b60ff161061440157614401876143eb60608c0160408d01615854565b67ffffffffffffffff1660c01b60f99190910152565b8087205f86815260a1602090815260408083209390935560ab905290812060a08b0135905560a65460ff16156144605760a7545f90815260a46020526040902060020154609954429161445391615723565b61445d9190615736565b90505b604051806080016040528042815260200182609854426144809190615723565b61448a9190615723565b815260200161449f60608d0160408e01615854565b67ffffffffffffffff16815260975460209091019073ffffffffffffffffffffffffffffffffffffffff1663d096c3c6336040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401602060405180830381865afa158015614537573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061455b9190615764565b90525f87815260a2602090815260409182902083518155838201516001820155918301516002830155606090920151600390910155609e87905560975473ffffffffffffffffffffffffffffffffffffffff1692506374fe27b791508935906145d0906145ca908c018c6157f3565b5f615073565b5f6145de60408d018d6157f3565b6040518663ffffffff1660e01b81526004016145fe9594939291906158c3565b602060405180830381865afa158015614619573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061463d9190615749565b6146c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f746865207369676e617475726520766572696669636174696f6e206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610b90565b5f84815260a16020526040808220549051909186917f2c32d4ae151744d0bf0b9464a3e897a1d17ed2f1af71f7c9a75f12ce0d28238f9190a35050505050505050565b80614773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f496e76616c69642062617463682070726f6f66000000000000000000000000006044820152606401610b90565b5f614782846001015160c01c90565b90505f614790856039015190565b90505f7f00000000000000000000000000000000000000000000000000000000000000006147bf876059015190565b6079880151609989015160b98a015160198b015160405160c09690961b7fffffffffffffffff000000000000000000000000000000000000000000000000166020870152602886019490945260488501929092526068840152608883015260a882015260c8810183905260e801604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190528051602090910120609c5490915073ffffffffffffffffffffffffffffffffffffffff16632c09a84861488e885160f81c90565b858888866040518663ffffffff1660e01b81526004016148b2959493929190615943565b5f6040518083038186803b1580156148c8575f80fd5b505afa1580156148da573d5f803e3d5ffd5b50505050505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166149f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d6150c7565b5f54610100900460ff16614a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d615187565b60a88390555f83815260a460205260408082205460975491517f45bc4d10000000000000000000000000000000000000000000000000000000008152600481018690526801000000000000000090910473ffffffffffffffffffffffffffffffffffffffff908116939216906345bc4d10906024016020604051808303815f875af1158015614b29573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b4d9190615764565b5f86815260a46020526040902060010154909150614b6c908290615723565b5f86815260a4602090815260408083205468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff16835260a590915281208054909190614bb8908490615723565b9091555050604051614bcb908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff84169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b5f83815260a4602052604081206001015460a954909190606490614c3f90846159a0565b614c4991906159b7565b9050614c558183615736565b60aa5f828254614c659190615723565b909155505073ffffffffffffffffffffffffffffffffffffffff84165f90815260a5602052604081208054839290614c9e908490615723565b9091555050604051614cb1908490615974565b6040519081900381209073ffffffffffffffffffffffffffffffffffffffff86169087907fe70d3820e244d5f71d1a6395db24f3460e8dca966edc1fd3625b6292880a877a905f90a45050505050565b80156118e7575f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f8114614d5d576040519150601f19603f3d011682016040523d82523d5f602084013e614d62565b606091505b5050905080614dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f526f6c6c75703a20455448207472616e73666572206661696c656400000000006044820152606401610b90565b505050565b614dda613dab565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614e2d3390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b614e5f615226565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33614e2d565b5f81614f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f456d7074792062617463682068656164657200000000000000000000000000006044820152606401610b90565b82825f818110614f2857614f286159ef565b919091013560f81c949350505050565b5f8160f9811015614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f626174636820686561646572206c656e67746820746f6f20736d616c6c0000006044820152606401610b90565b6040519150808483378082016040529250929050565b5f816101018114614fa5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f626174636820686561646572206c656e67746820697320696e636f72726563746044820152606401610b90565b6040805160c085901b815260f084901b6008820152600a60208502820181019092525f91810161505d8161ffff871686615292565b82900390912095945050505050565b8082535050565b60605f80808080615086888a018a615b09565b95509550955095509550508187106150a45794506150c09350505050565b8387106150b85782955050505050506150c0565b509293505050505b9392505050565b5f54610100900460ff1661515d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b606580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b5f54610100900460ff1661521d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610b90565b61209d336148e6565b60655460ff1661209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610b90565b5f825f036152a15750826150c0565b609b5473ffffffffffffffffffffffffffffffffffffffff165f5b84811015615368576040517fae453cd5000000000000000000000000000000000000000000000000000000008152600481018590525f9073ffffffffffffffffffffffffffffffffffffffff84169063ae453cd590602401602060405180830381865afa15801561532f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906153539190615764565b875250602090950194600193840193016152bc565b5093949350505050565b5f60208284031215615382575f80fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146153ac575f80fd5b919050565b5f602082840312156153c1575f80fd5b6150c082615389565b5f8083601f8401126153da575f80fd5b50813567ffffffffffffffff8111156153f1575f80fd5b602083019150836020828501011115615408575f80fd5b9250929050565b5f805f60408486031215615421575f80fd5b833567ffffffffffffffff811115615437575f80fd5b615443868287016153ca565b909790965060209590950135949350505050565b5f8060208385031215615468575f80fd5b823567ffffffffffffffff81111561547e575f80fd5b61548a858286016153ca565b90969095509350505050565b5f60e082840312156154a6575f80fd5b50919050565b5f606082840312156154a6575f80fd5b5f80604083850312156154cd575f80fd5b823567ffffffffffffffff808211156154e4575f80fd5b6154f086838701615496565b93506020850135915080821115615505575f80fd5b50615512858286016154ac565b9150509250929050565b5f805f805f8060808789031215615531575f80fd5b863567ffffffffffffffff80821115615548575f80fd5b6155548a838b01615496565b97506020890135915080821115615569575f80fd5b6155758a838b016154ac565b9650604089013591508082111561558a575f80fd5b6155968a838b016153ca565b909650945060608901359150808211156155ae575f80fd5b506155bb89828a016153ca565b979a9699509497509295939492505050565b5f805f805f8060c087890312156155e2575f80fd5b6155eb87615389565b95506155f960208801615389565b945061560760408801615389565b9350606087013592506080870135915060a087013590509295509295509295565b5f805f806040858703121561563b575f80fd5b843567ffffffffffffffff80821115615652575f80fd5b61565e888389016153ca565b90965094506020870135915080821115615676575f80fd5b50615683878288016153ca565b95989497509550505050565b8015158114613017575f80fd5b5f602082840312156156ac575f80fd5b81356150c08161568f565b803567ffffffffffffffff811681146153ac575f80fd5b5f80604083850312156156df575f80fd5b6156e8836156b7565b946020939093013593505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115611634576116346156f6565b81810381811115611634576116346156f6565b5f60208284031215615759575f80fd5b81516150c08161568f565b5f60208284031215615774575f80fd5b5051919050565b5f6020828403121561578b575f80fd5b813561ffff811681146150c0575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157cc576157cc6156f6565b5060010190565b5f602082840312156157e3575f80fd5b813560ff811681146150c0575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615826575f80fd5b83018035915067ffffffffffffffff821115615840575f80fd5b602001915036819003821315615408575f80fd5b5f60208284031215615864575f80fd5b6150c0826156b7565b818382375f9101908152919050565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f6080820187835260206080602085015281885180845260a08601915060208a0193505f5b8181101561591a57845173ffffffffffffffffffffffffffffffffffffffff16835293830193918301916001016158e8565b5050876040860152848103606086015261593581878961587c565b9a9950505050505050505050565b858152846020820152608060408201525f61596260808301858761587c565b90508260608301529695505050505050565b5f82515f5b818110156159935760208186018101518583015201615979565b505f920191825250919050565b8082028115828204841417611634576116346156f6565b5f826159ea577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112615a58575f80fd5b8135602067ffffffffffffffff80831115615a7557615a75615a1c565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715615ab857615ab8615a1c565b6040529384526020818701810194908101925087851115615ad7575f80fd5b6020870191505b84821015615afe57615aef82615389565b83529183019190830190615ade565b979650505050505050565b5f805f805f8060c08789031215615b1e575f80fd5b86359550602087013567ffffffffffffffff80821115615b3c575f80fd5b615b488a838b01615a49565b9650604089013595506060890135915080821115615b64575f80fd5b615b708a838b01615a49565b94506080890135935060a0890135915080821115615b8c575f80fd5b50615b9989828a01615a49565b915050929550929550929556fea164736f6c6343000818000a" func init() { if err := json.Unmarshal([]byte(RollupStorageLayoutJSON), RollupStorageLayout); err != nil { diff --git a/contracts/contracts/l1/rollup/IRollup.sol b/contracts/contracts/l1/rollup/IRollup.sol index 6621060ea..02150042e 100644 --- a/contracts/contracts/l1/rollup/IRollup.sol +++ b/contracts/contracts/l1/rollup/IRollup.sol @@ -72,9 +72,6 @@ interface IRollup { /// @notice error zero address error ErrZeroAddress(); - /// @notice error invalid timing for permissionless batch submission - error InvalidTiming(); - /********** * Events * **********/ @@ -124,7 +121,7 @@ interface IRollup { /// @notice Emitted when the rollup delay period is updated. /// @param oldPeriod The old rollupDelayPeriod. /// @param newPeriod The new rollupDelayPeriod. - event RollupDelayPeriodUpdate(uint256 oldPeriod, uint256 newPeriod); + event UpdateRollupDelayPeriod(uint256 oldPeriod, uint256 newPeriod); /// @notice Emit when prove remaining claimed. /// @param receiver receiver address. diff --git a/contracts/contracts/l1/rollup/Rollup.sol b/contracts/contracts/l1/rollup/Rollup.sol index 1377f9a42..2148bb60e 100644 --- a/contracts/contracts/l1/rollup/Rollup.sol +++ b/contracts/contracts/l1/rollup/Rollup.sol @@ -192,7 +192,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { function initialize3(uint256 _rollupDelayPeriod) external reinitializer(3) { require(_rollupDelayPeriod != 0, "invalid rollup delay period"); rollupDelayPeriod = _rollupDelayPeriod; - emit RollupDelayPeriodUpdate(0, _rollupDelayPeriod); + emit UpdateRollupDelayPeriod(0, _rollupDelayPeriod); } /************************ @@ -478,7 +478,7 @@ contract Rollup is IRollup, OwnableUpgradeable, PausableUpgradeable { require(_newPeriod > 0 && _newPeriod != rollupDelayPeriod, "invalid new rollup delay period"); uint256 _oldRollupDelayPeriod = rollupDelayPeriod; rollupDelayPeriod = _newPeriod; - emit RollupDelayPeriodUpdate(_oldRollupDelayPeriod, rollupDelayPeriod); + emit UpdateRollupDelayPeriod(_oldRollupDelayPeriod, rollupDelayPeriod); } /// @notice Add an account to the challenger list.