@mantleio/contracts
Version:
[Mantle] L1 and L2 smart contracts for Mantle
1,227 lines • 118 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "BVM_EigenDataLayrChain",
"sourceName": "contracts/da/BVM_EigenDataLayrChain.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldDataLayrManagerAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newDataLayrManagerAddress",
"type": "address"
}
],
"name": "DataLayrManagerAddressUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldFraudProofPeriod",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newFraudProofPeriod",
"type": "uint256"
}
],
"name": "FraudProofPeriodUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint8",
"name": "version",
"type": "uint8"
}
],
"name": "Initialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldL2ConfirmedBlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newL2ConfirmedBlockNumber",
"type": "uint256"
}
],
"name": "L2ConfirmedBlockNumberUpdated",
"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": "uint256",
"name": "reRollupIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "rollupBatchIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "stratL2BlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endL2BlockNumber",
"type": "uint256"
}
],
"name": "ReRollupBatchData",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldReSubmitterAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newReSubmitterAddress",
"type": "address"
}
],
"name": "ReSubmitterAddressUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "rollupBatchIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "l2StoredBlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "l2ConfirmedBlockNumber",
"type": "uint256"
}
],
"name": "ResetRollupBatchData",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "oldRollupBatchIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newRollupBatchIndex",
"type": "uint256"
}
],
"name": "RollupBatchIndexUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "rollupBatchIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint32",
"name": "dataStoreId",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "stratL2BlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endL2BlockNumber",
"type": "uint256"
}
],
"name": "RollupStoreConfirmed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "dataStoreId",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "stratL2BlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endL2BlockNumber",
"type": "uint256"
}
],
"name": "RollupStoreInitialized",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "rollupBatchIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint32",
"name": "dataStoreId",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "stratL2BlockNumber",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endL2BlockNumber",
"type": "uint256"
}
],
"name": "RollupStoreReverted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "oldSequencerAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newSequencerAddress",
"type": "address"
}
],
"name": "SequencerAddressUpdated",
"type": "event"
},
{
"inputs": [],
"name": "BLOCK_STALE_MEASURE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "FRAUD_STRING",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"components": [
{
"components": [
{
"internalType": "bytes32",
"name": "headerHash",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "durationDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "globalDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "referenceBlockNumber",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "blockNumber",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "fee",
"type": "uint96"
},
{
"internalType": "address",
"name": "confirmer",
"type": "address"
},
{
"internalType": "bytes32",
"name": "signatoryRecordHash",
"type": "bytes32"
}
],
"internalType": "struct IDataLayrServiceManager.DataStoreMetadata",
"name": "metadata",
"type": "tuple"
},
{
"internalType": "uint8",
"name": "duration",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
}
],
"internalType": "struct IDataLayrServiceManager.DataStoreSearchData",
"name": "searchData",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "startL2Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endL2Block",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "originDataStoreId",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "reConfirmedBatchIndex",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isReRollup",
"type": "bool"
}
],
"name": "confirmData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "dataManageAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"name": "dataStoreIdToL2RollUpBlock",
"outputs": [
{
"internalType": "uint256",
"name": "startL2BlockNumber",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endBL2BlockNumber",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isReRollup",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"name": "dataStoreIdToRollupStoreNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fraudProofPeriod",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getL2ConfirmedBlockNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_dataStoreId",
"type": "uint32"
}
],
"name": "getL2RollUpBlockByDataStoreId",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startL2BlockNumber",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endBL2BlockNumber",
"type": "uint256"
},
{
"internalType": "bool",
"name": "isReRollup",
"type": "bool"
}
],
"internalType": "struct BVM_EigenDataLayrChain.BatchRollupBlock",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getL2StoredBlockNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_rollupBatchIndex",
"type": "uint256"
}
],
"name": "getRollupStoreByRollupBatchIndex",
"outputs": [
{
"components": [
{
"internalType": "uint32",
"name": "originDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "dataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "confirmAt",
"type": "uint32"
},
{
"internalType": "enum BVM_EigenDataLayrChain.RollupStoreStatus",
"name": "status",
"type": "uint8"
}
],
"internalType": "struct BVM_EigenDataLayrChain.RollupStore",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_sequencer",
"type": "address"
},
{
"internalType": "address",
"name": "_dataManageAddress",
"type": "address"
},
{
"internalType": "address",
"name": "_reSubmitterAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "_block_stale_measure",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_fraudProofPeriod",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_l2SubmittedBlockNumber",
"type": "uint256"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "l2ConfirmedBlockNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "l2StoredBlockNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "polys",
"type": "bytes[]"
},
{
"internalType": "uint256",
"name": "startIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "parse",
"outputs": [
{
"internalType": "bytes",
"name": "provenString",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "fraudulentStoreNumber",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "startIndex",
"type": "uint256"
},
{
"components": [
{
"components": [
{
"internalType": "bytes32",
"name": "headerHash",
"type": "bytes32"
},
{
"internalType": "uint32",
"name": "durationDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "globalDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "referenceBlockNumber",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "blockNumber",
"type": "uint32"
},
{
"internalType": "uint96",
"name": "fee",
"type": "uint96"
},
{
"internalType": "address",
"name": "confirmer",
"type": "address"
},
{
"internalType": "bytes32",
"name": "signatoryRecordHash",
"type": "bytes32"
}
],
"internalType": "struct IDataLayrServiceManager.DataStoreMetadata",
"name": "metadata",
"type": "tuple"
},
{
"internalType": "uint8",
"name": "duration",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "index",
"type": "uint32"
}
],
"internalType": "struct IDataLayrServiceManager.DataStoreSearchData",
"name": "searchData",
"type": "tuple"
},
{
"components": [
{
"internalType": "bytes",
"name": "header",
"type": "bytes"
},
{
"internalType": "uint32",
"name": "firstChunkNumber",
"type": "uint32"
},
{
"internalType": "bytes[]",
"name": "polys",
"type": "bytes[]"
},
{
"components": [
{
"components": [
{
"internalType": "uint256",
"name": "X",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "Y",
"type": "uint256"
}
],
"internalType": "struct BN254.G1Point",
"name": "interpolationPoly",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "X",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "Y",
"type": "uint256"
}
],
"internalType": "struct BN254.G1Point",
"name": "revealProof",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "X",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "Y",
"type": "uint256[2]"
}
],
"internalType": "struct BN254.G2Point",
"name": "zeroPoly",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "zeroPolyProof",
"type": "bytes"
}
],
"internalType": "struct DataLayrDisclosureLogic.MultiRevealProof[]",
"name": "multiRevealProofs",
"type": "tuple[]"
},
{
"components": [
{
"internalType": "uint256[2]",
"name": "X",
"type": "uint256[2]"
},
{
"internalType": "uint256[2]",
"name": "Y",
"type": "uint256[2]"
}
],
"internalType": "struct BN254.G2Point",
"name": "polyEquivalenceProof",
"type": "tuple"
}
],
"internalType": "struct BVM_EigenDataLayrChain.DisclosureProofs",
"name": "disclosureProofs",
"type": "tuple"
}
],
"name": "proveFraud",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "reRollupBatchIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "reRollupIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "reSubmitterAddress",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "removeFraudProofAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_rollupBatchIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_l2StoredBlockNumber",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_l2ConfirmedBlockNumber",
"type": "uint256"
}
],
"name": "resetRollupBatchData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "rollupBatchIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "rollupBatchIndexRollupStores",
"outputs": [
{
"internalType": "uint32",
"name": "originDataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "dataStoreId",
"type": "uint32"
},
{
"internalType": "uint32",
"name": "confirmAt",
"type": "uint32"
},
{
"internalType": "enum BVM_EigenDataLayrChain.RollupStoreStatus",
"name": "status",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "sequencer",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_address",
"type": "address"
}
],
"name": "setFraudProofAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "header",
"type": "bytes"
},
{
"internalType": "uint8",
"name": "duration",
"type": "uint8"
},
{
"internalType": "uint32",
"name": "blockNumber",
"type": "uint32"
},
{
"internalType": "uint256",
"name": "startL2Block",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "endL2Block",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "totalOperatorsIndex",
"type": "uint32"
},
{
"internalType": "bool",
"name": "isReRollup",
"type": "bool"
}
],
"name": "storeData",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "batchIndex",
"type": "uint256"
}
],
"name": "submitReRollUpInfo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_dataManageAddress",
"type": "address"
}
],
"name": "updateDataLayrManagerAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_fraudProofPeriod",
"type": "uint256"
}
],
"name": "updateFraudProofPeriod",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_l2ConfirmedBlockNumber",
"type": "uint256"
}
],
"name": "updateL2ConfirmedBlockNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_l2StoredBlockNumber",
"type": "uint256"
}
],
"name": "updateL2StoredBlockNumber",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_reSubmitterAddress",
"type": "address"
}
],
"name": "updateReSubmitterAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_rollupBatchIndex",
"type": "uint256"
}
],
"name": "updateRollupBatchIndex",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_sequencer",
"type": "address"
}
],
"name": "updateSequencerAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b506200001c62000022565b620000e4565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6155d280620000f46000396000f3fe608060405234801561001057600080fd5b50600436106102775760003560e01c8063728cdbca11610160578063afab4ac5116100d8578063d7fbc2e21161008c578063f2a8f12411610071578063f2a8f124146105e9578063f2fde38b146105f2578063ff2e07491461060557600080fd5b8063d7fbc2e2146105b6578063f2495029146105c957600080fd5b8063c24f03f4116100bd578063c24f03f414610559578063c8fff01b1461056c578063c96c0d381461057f57600080fd5b8063afab4ac514610526578063b537c4c71461053957600080fd5b8063927f20321161012f5780639495de40116101145780639495de40146104f7578063990fca661461050a5780639a71e29c1461051357600080fd5b8063927f20321461049f57806392f30a45146104a857600080fd5b8063728cdbca14610446578063758b8147146104595780638bea6cae146104795780638da5cb5b1461048157600080fd5b80634618ed87116101f35780635c1bba38116101c25780635e4a3056116101a75780635e4a3056146104225780635e8b3f2d14610435578063715018a61461043e57600080fd5b80635c1bba38146103d45780635d42ffb71461041957600080fd5b80634618ed871461034157806346b2eb9b146103545780634a4232de1461035c57806359cb63911461036f57600080fd5b80632e64b4c01161024a578063301b39ab1161022f578063301b39ab1461031357806332c58f7a146103255780633c7629841461033857600080fd5b80632e64b4c0146102e05780632e72866b146102f357600080fd5b806302d777de1461027c578063060ee9a41461029157806315fda737146102a45780631f944c8f146102b7575b600080fd5b61028f61028a366004614824565b610625565b005b61028f61029f366004614824565b6107ee565b61028f6102b2366004614a0e565b610976565b6102ca6102c5366004614a78565b61111d565b6040516102d79190614b2a565b60405180910390f35b61028f6102ee366004614b7b565b6112c2565b610306610301366004614b7b565b611354565b6040516102d79190614bfe565b609a545b6040519081526020016102d7565b61028f610333366004614824565b6113ed565b610317609d5481565b61028f61034f366004614c95565b611552565b6102ca611cb8565b61028f61036a366004614b7b565b611cd4565b6103c461037d366004614b7b565b609e6020526000908152604090205463ffffffff80821691640100000000810482169168010000000000000000820416906c01000000000000000000000000900460ff1684565b6040516102d79493929190614d30565b6097546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d7565b610317609b5481565b61028f610430366004614d63565b611d9f565b61031760995481565b61028f61216d565b61028f610454366004614df1565b612181565b60a2546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b609b54610317565b60335473ffffffffffffffffffffffffffffffffffffffff166103f4565b61031760a35481565b6104da6104b6366004614e50565b609f6020526000908152604090208054600182015460029092015490919060ff1683565b6040805193845260208401929092521515908201526060016102d7565b61028f610505366004614b7b565b6125fc565b610317609a5481565b61028f610521366004614b7b565b6126c7565b61028f610534366004614824565b6128ab565b610317610547366004614e50565b60a06020526000908152604090205481565b61028f610567366004614e6d565b612a66565b61028f61057a366004614824565b612b9b565b61059261058d366004614e50565b612cab565b604080518251815260208084015190820152918101511515908201526060016102d7565b61028f6105c4366004614b7b565b612d15565b6098546103f49073ffffffffffffffffffffffffffffffffffffffff1681565b610317609c5481565b61028f610600366004614824565b612f1c565b610317610613366004614b7b565b60a46020526000908152604090205481565b60975473ffffffffffffffffffffffffffffffffffffffff1633146106b75760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166107675760405162461bcd60e51b8152602060048201526044602482018190527f757064617465446174614c6179724d616e61676572416464726573733a205f64908201527f6174614d616e6167654164647265737320697320746865207a65726f2061646460648201527f7265737300000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b6098805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f7dc2cdf7b45e41e53cedea7a30250d948690332e87d86f5eff45acd42ab259a291015b60405180910390a15050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461087b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff811661092a5760405162461bcd60e51b815260206004820152604d60248201527f72656d6f7665467261756450726f6f66416464726573733a2072656d6f76654660448201527f7261756450726f6f66416464726573733a20616464726573732069732074686560648201527f207a65726f206164647265737300000000000000000000000000000000000000608482015260a4016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b33600090815260a1602052604090205460ff166109fb5760405162461bcd60e51b815260206004820152603a60248201527f70726f766546726175643a204f6e6c792066726175642070726f6f662077686960448201527f7465206c6973742063616e206368616c6c656e6765206461746100000000000060648201526084016106ae565b6000848152609e602090815260408083208151608081018352815463ffffffff8082168352640100000000820481169583019590955268010000000000000000810490941692810192909252909160608301906c01000000000000000000000000900460ff166002811115610a7257610a72614b94565b6002811115610a8357610a83614b94565b9052509050600181606001516002811115610aa057610aa0614b94565b148015610ab6575042816040015163ffffffff16115b610b285760405162461bcd60e51b815260206004820152602d60248201527f526f6c6c757053746f7265206d75737420626520636f6d6d697474656420616e60448201527f6420756e636f6e6669726d65640000000000000000000000000000000000000060648201526084016106ae565b8251610b3390612fb9565b6098546020850151604080870151606088015191517fed82c0ee00000000000000000000000000000000000000000000000000000000815260ff9093166004840152602483015263ffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091169063ed82c0ee9060640160206040518083038186803b158015610bbf57600080fd5b505afa158015610bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bf79190614e99565b14610c6a5760405162461bcd60e51b815260206004820152602a60248201527f70726f766546726175643a206d6574616461746120707265696d61676520697360448201527f20696e636f72726563740000000000000000000000000000000000000000000060648201526084016106ae565b806020015163ffffffff1683600001516040015163ffffffff1614610d1d5760405162461bcd60e51b815260206004820152604260248201527f7365616368446174612773206461746173746f7265206964206973206e6f742060448201527f636f6e73697374656e74207769746820676976656e20726f6c6c75702073746f60648201527f7265000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b610d278280614eb2565b604051610d35929190614f17565b60405190819003902083515114610db45760405162461bcd60e51b815260206004820152603260248201527f646973636c6f737572652070726f6f667320686561646572686173682070726560448201527f696d61676520697320696e636f7272656374000000000000000000000000000060648201526084016106ae565b610df4610dc18380614eb2565b610dd16040860160208701614e50565b610dde6040870187614f27565b610deb6060890189614f27565b896080016130e6565b610e405760405162461bcd60e51b815260206004820152601d60248201527f646973636c6f737572652070726f6f66732061726520696e76616c696400000060448201526064016106ae565b6000610e54610e4f8480614eb2565b6136de565b905063ffffffff8116610e6a6040850185614f27565b9050610e7c6040860160208701614e50565b63ffffffff16610e8c9190614fbe565b1115610f005760405162461bcd60e51b815260206004820152602e60248201527f43616e206f6e6c792070726f766520646174612066726f6d207468652073797360448201527f74656d61746963206368756e6b7300000000000000000000000000000000000060648201526084016106ae565b6000610f32610f126040860186614f27565b8860405180606001604052806032815260200161556b603291395161111d565b905060405180606001604052806032815260200161556b6032913951815114610fe95760405162461bcd60e51b815260206004820152604260248201527f50617273696e67206572726f722c2070726f76656e20737472696e672069732060448201527f646966666572656e74206c656e677468207468616e206672617564207374726960648201527f6e67000000000000000000000000000000000000000000000000000000000000608482015260a4016106ae565b60405180606001604052806032815260200161556b603291398051906020012081805190602001201461105e5760405162461bcd60e51b815260206004820152601d60248201527f70726f76656e20737472696e6720213d20667261756420737472696e6700000060448201526064016106ae565b6000878152609e6020908152604080832080547fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff166c02000000000000000000000000179055875181015163ffffffff908116808552609f8452828520548a518401519092168552938290206001015482518c8152938401949094529082015260608101919091527fca227c67a02028763083580d42e8bdef4bb49c393068d05983421cd7a4a2a5be906080015b60405180910390a150505050505050565b606061112a602084615005565b61119c5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742073746172742072656164696e672066726f6d2061207061646460448201527f656420627974650000000000000000000000000000000000000000000000000060648201526084016106ae565b6000835b83835110156112b85760006111eb826111ba602082615019565b6111c5906001614fbe565b6111d090602061502d565b6111da919061506a565b85516111e6908861506a565b6136ed565b90508388888581811061120057611200615081565b90506020028101906112129190614eb2565b849061121e8583614fbe565b9261122b939291906150b0565b60405160200161123d939291906150da565b604051602081830303815290604052935087878481811061126057611260615081565b90506020028101906112729190614eb2565b905061127e8284614fbe565b141561129a578261128e81615102565b935050600191506112b2565b6112a5816001614fbe565b6112af9083614fbe565b91505b506111a0565b5050949350505050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461134f5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609b55565b61135c614721565b6000828152609e60209081526040918290208251608081018452815463ffffffff80821683526401000000008204811694830194909452680100000000000000008104909316938101939093529060608301906c01000000000000000000000000900460ff1660028111156113d3576113d3614b94565b60028111156113e4576113e4614b94565b90525092915050565b60975473ffffffffffffffffffffffffffffffffffffffff16331461147a5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff81166115035760405162461bcd60e51b815260206004820152603160248201527f736574467261756450726f6f66416464726573733a206164647265737320697360448201527f20746865207a65726f206164647265737300000000000000000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff16600090815260a16020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b60975473ffffffffffffffffffffffffffffffffffffffff1633146115df5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b8484116116545760405162461bcd60e51b815260206004820152603360248201527f636f6e6669726d446174613a20656e644c32426c6f636b206d757374206d6f7260448201527f65207468616e2073746172744c32426c6f636b0000000000000000000000000060648201526084016106ae565b855160409081015163ffffffff166000908152609f6020908152908290208251606081018452815480825260018301549382019390935260029091015460ff16151592810192909252861480156116ae5750848160200151145b80156116c1575081151581604001511515145b61177f5760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b865160409081015163ffffffff16600090815260a060205220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146118795760405162461bcd60e51b815260206004820152606260248201527f636f6e6669726d446174613a20446174612073746f726520656974686572207760448201527f6173206e6f7420696e697469616c697a65642062792074686520726f6c6c757060648201527f20636f6e74726163742c206f7220697320616c726561647920636f6e6669726d60848201527f656400000000000000000000000000000000000000000000000000000000000060a482015260c4016106ae565b6098546040517f58942e7300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906358942e73906118d3908c908c908c90600401615184565b600060405180830381600087803b1580156118ed57600080fd5b505af1158015611901573d6000803e3d6000fd5b5050505081611aeb5760408051608081018252885182015163ffffffff90811682528951830151166020820152609c5490918201906119409042614fbe565b63ffffffff16815260200160019052609d546000908152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611a5657611a56614b94565b02179055505050609b859055609d8054885160409081015163ffffffff16600090815260a06020529081208290557fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f6729290611ab083615102565b909155508851604090810151815163ffffffff93841681529216602083015281018890526060810187905260800160405180910390a1611cad565b60405180608001604052808563ffffffff16815260200188600001516040015163ffffffff168152602001609c5442611b249190614fbe565b63ffffffff168152602001600190526000848152609e602090815260409182902083518154928501519385015163ffffffff90811668010000000000000000027fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff958216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009095169190921617929092179283168217815560608401519092909183917fffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffff9091167fffffffffffffffffffffffffffffffffffffff0000000000ffffffffffffffff909116176c01000000000000000000000000836002811115611c3757611c37614b94565b021790555050875160409081015163ffffffff908116600090815260a06020908152908390208790558a518301518351888152921690820152908101889052606081018790527fc7c0900be05d2a0ad0f77852eb975d9e862d1db0a2238617dd0f77854782f67291506080015b60405180910390a15b505050505050505050565b60405180606001604052806032815260200161556b6032913981565b60975473ffffffffffffffffffffffffffffffffffffffff163314611d615760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609d80549082905560408051828152602081018490527f84d29a10fee283002b5c77232e8d38a21f0a3f16190de1693f837ac60bfbe2bb91016107e2565b60975473ffffffffffffffffffffffffffffffffffffffff163314611e2c5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b838311611ea15760405162461bcd60e51b815260206004820152603160248201527f73746f7265446174613a20656e644c32426c6f636b206d757374206d6f72652060448201527f7468616e2073746172744c32426c6f636b00000000000000000000000000000060648201526084016106ae565b609954611eb463ffffffff87164361506a565b10611f275760405162461bcd60e51b815260206004820152602960248201527f73746f7265446174613a207374616b65732074616b656e2066726f6d20746f6f60448201527f206c6f6e672061676f000000000000000000000000000000000000000000000060648201526084016106ae565b609854604080517f72d18e8d000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916372d18e8d916004808301926020929190829003018186803b158015611f9257600080fd5b505afa158015611fa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fca9190615261565b9050609860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dcf49ea733308a8a888f8f6040518863ffffffff1660e01b8152600401612033979695949392919061527e565b602060405180830381600087803b15801561204d57600080fd5b505af1158015612061573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120859190615261565b5060408051606081018252868152602080820187815285151583850190815263ffffffff86166000908152609f8452858120945185559151600185015551600290930180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169315159390931790925560a09052207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90558161212957609a8490555b6040805163ffffffff83168152602081018790529081018590527fa99ca06ac3461399088feac88ec48dc5a47d61c3b6839eab20146f2c4ee5358490606001611ca4565b612175613705565b61217f600061376c565b565b600054610100900460ff16158080156121a15750600054600160ff909116105b806121bb5750303b1580156121bb575060005460ff166001145b61222d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106ae565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561228b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff87166123145760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f73657175656e6365722061646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff861661239d5760405162461bcd60e51b815260206004820152603860248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f646174614d616e61676541646472657373000000000000000060648201526084016106ae565b73ffffffffffffffffffffffffffffffffffffffff85166124265760405162461bcd60e51b815260206004820152603960248201527f696e697469616c697a653a2063616e277420736574207a65726f20616464726560448201527f737320746f205f72655375626d6974746572416464726573730000000000000060648201526084016106ae565b610e1083101561249e5760405162461bcd60e51b815260206004820152603b60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206c657373207468616e206f6e6520686f7572000000000060648201526084016106ae565b6162708311156125165760405162461bcd60e51b815260206004820152603d60248201527f696e697469616c697a653a205f667261756450726f6f66506572696f64206d7560448201527f7374206265206e6f206d6f7265207468616e20736576656e20686f757200000060648201526084016106ae565b61251e6137e3565b6097805473ffffffffffffffffffffffffffffffffffffffff808a167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556098805489841690831617905560a28054928816929091169190911790556099849055609c839055609a829055609b82905580156125f357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200161110c565b50505050505050565b60975473ffffffffffffffffffffffffffffffffffffffff1633146126895760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79207468652073657175656e6365722063616e20646f2074686973206160448201527f6374696f6e00000000000000000000000000000000000000000000000000000060648201526084016106ae565b609a80549082905560408051828152602081018490527fd81cc97cc11cd748d88c14364de569a7d07c4aeaea3b5a0525ca4d504ec548a991016107e2565b60a25473ffffffffffffffffffffffffffffffffffffffff16331461277a5760405162461bcd60e51b815260206004820152604360248201527f7375626d69745265526f6c6c5570496e666f3a204f6e6c79