0 txs
0 calls
constructor
constructor()
functions
aggregationVkey
viewfunction aggregationVkey() view returns (bytes32)
approvedProposers
viewfunction approvedProposers(address) view returns (bool)
challenger
viewfunction challenger() view returns (address)
CHALLENGER
viewfunction CHALLENGER() view returns (address)
computeL2Timestamp
viewfunction computeL2Timestamp(uint256 _l2BlockNumber) view returns (uint256)
FINALIZATION_PERIOD_SECONDS
viewfunction FINALIZATION_PERIOD_SECONDS() view returns (uint256)
finalizationPeriodSeconds
viewfunction finalizationPeriodSeconds() view returns (uint256)
getL2Output
viewfunction getL2Output(uint256 _l2OutputIndex) view returns (tuple)
getL2OutputAfter
viewfunction getL2OutputAfter(uint256 _l2BlockNumber) view returns (tuple)
getL2OutputIndexAfter
viewfunction getL2OutputIndexAfter(uint256 _l2BlockNumber) view returns (uint256)
historicBlockHashes
viewfunction historicBlockHashes(uint256) view returns (bytes32)
initializerVersion
viewfunction initializerVersion() view returns (uint8)
L2_BLOCK_TIME
viewfunction L2_BLOCK_TIME() view returns (uint256)
l2BlockTime
viewfunction l2BlockTime() view returns (uint256)
latestBlockNumber
viewfunction latestBlockNumber() view returns (uint256)
latestOutputIndex
viewfunction latestOutputIndex() view returns (uint256)
nextBlockNumber
viewfunction nextBlockNumber() view returns (uint256)
nextOutputIndex
viewfunction nextOutputIndex() view returns (uint256)
optimisticMode
viewfunction optimisticMode() view returns (bool)
owner
viewfunction owner() view returns (address)
proposer
viewfunction proposer() view returns (address)
PROPOSER
viewfunction PROPOSER() view returns (address)
rangeVkeyCommitment
viewfunction rangeVkeyCommitment() view returns (bytes32)
rollupConfigHash
viewfunction rollupConfigHash() view returns (bytes32)
startingBlockNumber
viewfunction startingBlockNumber() view returns (uint256)
startingTimestamp
viewfunction startingTimestamp() view returns (uint256)
SUBMISSION_INTERVAL
viewfunction SUBMISSION_INTERVAL() view returns (uint256)
submissionInterval
viewfunction submissionInterval() view returns (uint256)
verifier
viewfunction verifier() view returns (address)
version
viewfunction version() view returns (string)
addProposer
nonpayablefunction addProposer(address _proposer)
checkpointBlockHash
nonpayablefunction checkpointBlockHash(uint256 _blockNumber)
deleteL2Outputs
nonpayablefunction deleteL2Outputs(uint256 _l2OutputIndex)
disableOptimisticMode
nonpayablefunction disableOptimisticMode(uint256 _finalizationPeriodSeconds)
enableOptimisticMode
nonpayablefunction enableOptimisticMode(uint256 _finalizationPeriodSeconds)
initialize
nonpayablefunction initialize(tuple _initParams)
proposeL2Output
payablefunction proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1BlockHash, uint256 _l1BlockNumber) payable
proposeL2Output
payablefunction proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, uint256 _l1BlockNumber, bytes _proof) payable
removeProposer
nonpayablefunction removeProposer(address _proposer)
transferOwnership
nonpayablefunction transferOwnership(address _owner)
updateAggregationVkey
nonpayablefunction updateAggregationVkey(bytes32 _aggregationVkey)
updateFinalizationPeriodSeconds
nonpayablefunction updateFinalizationPeriodSeconds(uint256 _finalizationPeriodSeconds)
updateRangeVkeyCommitment
nonpayablefunction updateRangeVkeyCommitment(bytes32 _rangeVkeyCommitment)
updateRollupConfigHash
nonpayablefunction updateRollupConfigHash(bytes32 _rollupConfigHash)
updateSubmissionInterval
nonpayablefunction updateSubmissionInterval(uint256 _submissionInterval)
updateVerifier
nonpayablefunction updateVerifier(address _verifier)
events
AggregationVkeyUpdated
event AggregationVkeyUpdated(bytes32 indexed oldAggregationVkey, bytes32 indexed newAggregationVkey)
FinalizationPeriodSecondsUpdated
event FinalizationPeriodSecondsUpdated(uint256 oldFinalizationPeriodSeconds, uint256 newFinalizationPeriodSeconds)
Initialized
event Initialized(uint8 version)
OptimisticModeToggled
event OptimisticModeToggled(bool indexed enabled, uint256 finalizationPeriodSeconds)
OutputProposed
event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l2OutputIndex, uint256 indexed l2BlockNumber, uint256 l1Timestamp)
OutputsDeleted
event OutputsDeleted(uint256 indexed prevNextOutputIndex, uint256 indexed newNextOutputIndex)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProposerUpdated
event ProposerUpdated(address indexed proposer, bool added)
RangeVkeyCommitmentUpdated
event RangeVkeyCommitmentUpdated(bytes32 indexed oldRangeVkeyCommitment, bytes32 indexed newRangeVkeyCommitment)
RollupConfigHashUpdated
event RollupConfigHashUpdated(bytes32 indexed oldRollupConfigHash, bytes32 indexed newRollupConfigHash)
SubmissionIntervalUpdated
event SubmissionIntervalUpdated(uint256 oldSubmissionInterval, uint256 newSubmissionInterval)
VerifierUpdated
event VerifierUpdated(address indexed oldVerifier, address indexed newVerifier)
errors
L1BlockHashNotAvailable
error L1BlockHashNotAvailable()
L1BlockHashNotCheckpointed
error L1BlockHashNotCheckpointed()
creation bytecode
0x60e06040523480156200001157600080fd5b5060026000600182608081815250508160a081815250508060c08181525050505050620000436200004960201b60201c565b620001f4565b600060019054906101000a900460ff16156200009c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000939062000197565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1610156200010e5760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001059190620001d7565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200017f60278362000110565b91506200018c8262000121565b604082019050919050565b60006020820190508181036000830152620001b28162000170565b9050919050565b600060ff82169050919050565b620001d181620001b9565b82525050565b6000602082019050620001ee6000830184620001c6565b92915050565b60805160a05160c0516146a0620002246000396000611369015260006113400152600061131701526146a06000f3fe60806040526004361061027c5760003560e01c806389c44cbb1161014f578063bffa7f0f116100c1578063d46512761161007a578063d46512761461095d578063db1470f51461099a578063dcec3348146109c3578063e1a41bcf146109ee578063f2fde38b14610a19578063f4daa29114610a425761027c565b8063bffa7f0f14610839578063c32e4e3e14610864578063c4cb03ec1461088f578063ce5db8d6146108b8578063cf8e5cf0146108e3578063d1de856c146109205761027c565b80639ad84880116101135780639ad8488014610726578063a196b52514610742578063a25ae5571461077f578063a8e4fb90146107bc578063b03cd418146107e7578063bc91ce33146108105761027c565b806389c44cbb146106625780638da5cb5b1461068b57806393991af3146106b657806397fc007c146106e15780639aaab6481461070a5761027c565b8063529933df116101f35780636b4d98dd116101ac5780636b4d98dd1461054e5780636d9a1c8b1461057957806370872aa5146105a45780637f006420146105cf5780637f01ea681461060c57806388786272146106375761027c565b8063529933df1461044c578063534db0e21461047757806354fd4d50146104a257806360caf7a0146104cd57806369f16eec146104f85780636abcf563146105235761027c565b80632b7ac3f3116102455780632b7ac3f3146103525780632c6979611461037d57806333036bfa146103a6578063336c9e81146103cf5780634599c788146103f85780634ab309ac146104235761027c565b80622134cc1461028157806309d632d3146102ac5780631bdd450c146102d55780631e856800146102fe5780632b31841e14610327575b600080fd5b34801561028d57600080fd5b50610296610a6d565b6040516102a39190612ddb565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190612e68565b610a77565b005b3480156102e157600080fd5b506102fc60048036038101906102f79190612ecb565b610bb1565b005b34801561030a57600080fd5b5061032560048036038101906103209190612f24565b610c7b565b005b34801561033357600080fd5b5061033c610cd9565b6040516103499190612f60565b60405180910390f35b34801561035e57600080fd5b50610367610cdf565b6040516103749190612f8a565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f9190612f24565b610d05565b005b3480156103b257600080fd5b506103cd60048036038101906103c89190612f24565b610e8b565b005b3480156103db57600080fd5b506103f660048036038101906103f19190612f24565b611006565b005b34801561040457600080fd5b5061040d6110db565b60405161041a9190612ddb565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612f24565b61115c565b005b34801561045857600080fd5b506104616112e0565b60405161046e9190612ddb565b60405180910390f35b34801561048357600080fd5b5061048c6112ea565b6040516104999190612f8a565b60405180910390f35b3480156104ae57600080fd5b506104b7611310565b6040516104c4919061303e565b60405180910390f35b3480156104d957600080fd5b506104e26113b3565b6040516104ef919061307b565b60405180910390f35b34801561050457600080fd5b5061050d6113c6565b60405161051a9190612ddb565b60405180910390f35b34801561052f57600080fd5b506105386113df565b6040516105459190612ddb565b60405180910390f35b34801561055a57600080fd5b506105636113ec565b6040516105709190612f8a565b60405180910390f35b34801561058557600080fd5b5061058e611416565b60405161059b9190612f60565b60405180910390f35b3480156105b057600080fd5b506105b961141c565b6040516105c69190612ddb565b60405180910390f35b3480156105db57600080fd5b506105f660048036038101906105f19190612f24565b611422565b6040516106039190612ddb565b60405180910390f35b34801561061857600080fd5b50610621611569565b60405161062e91906130b2565b60405180910390f35b34801561064357600080fd5b5061064c61156e565b6040516106599190612ddb565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612f24565b611574565b005b34801561069757600080fd5b506106a061172f565b6040516106ad9190612f8a565b60405180910390f35b3480156106c257600080fd5b506106cb611755565b6040516106d89190612ddb565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190612e68565b61175b565b005b610724600480360381019061071f91906130cd565b6118ab565b005b610740600480360381019061073b9190613269565b611c3b565b005b34801561074e57600080fd5b5061076960048036038101906107649190612f24565b6120e6565b6040516107769190612f60565b60405180910390f35b34801561078b57600080fd5b506107a660048036038101906107a19190612f24565b6120fe565b6040516107b39190613368565b60405180910390f35b3480156107c857600080fd5b506107d16121d8565b6040516107de9190612f8a565b60405180910390f35b3480156107f357600080fd5b5061080e60048036038101906108099190612e68565b6121fe565b005b34801561081c57600080fd5b5061083760048036038101906108329190612ecb565b612338565b005b34801561084557600080fd5b5061084e612402565b60405161085b9190612f8a565b60405180910390f35b34801561087057600080fd5b5061087961242c565b6040516108869190612f60565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b19190612ecb565b612432565b005b3480156108c457600080fd5b506108cd6124fc565b6040516108da9190612ddb565b60405180910390f35b3480156108ef57600080fd5b5061090a60048036038101906109059190612f24565b612502565b6040516109179190613368565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190612f24565b6125e4565b6040516109549190612ddb565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190612e68565b612615565b604051610991919061307b565b60405180910390f35b3480156109a657600080fd5b506109c160048036038101906109bc91906134c0565b612635565b005b3480156109cf57600080fd5b506109d8612a9e565b6040516109e59190612ddb565b60405180910390f35b3480156109fa57600080fd5b50610a03612aba565b604051610a109190612ddb565b60405180910390f35b348015610a2557600080fd5b50610a406004803603810190610a3b9190612e68565b612ac0565b005b348015610a4e57600080fd5b50610a57612c10565b604051610a649190612ddb565b60405180910390f35b6000600554905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90613560565b60405180910390fd5b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f5df38d395edc15b669d646569bd015513395070b5b4deb8a16300abb060d1b5a6000604051610ba6919061307b565b60405180910390a250565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3890613560565b60405180910390fd5b80600c547f5d9ebe9f09b0810b3546b30781ba9a51092b37dd6abada4b830ce54a41ac6a4b60405160405180910390a380600c8190555050565b6000814090506000801b8103610cbd576040517f84c0686400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600f6000848152602001908152602001600020819055505050565b600a5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601060009054906101000a900460ff1615610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c906135f2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90613684565b60405180910390fd5b62093a80811015610e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2290613716565b60405180910390fd5b806008819055506001601060006101000a81548160ff021916908315150217905550600115157f1f5c872f1ea93c57e43112ea449ee19ef5754488b87627b4c52456b0e5a4109a82604051610e809190612ddb565b60405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1290613684565b60405180910390fd5b601060009054906101000a900460ff1615610f7b5762093a80811015610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90613716565b60405180910390fd5b610fc1565b610e10811015610fc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb7906137a8565b60405180910390fd5b5b7f0f2c4300ff069aca82562a75dec8160a0c2c0753745a6a5a6ea7b681bfb3641660085482604051610ff49291906137c8565b60405180910390a18060088190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d90613560565b60405180910390fd5b7fc1bf9abfb57ea01ed9ecb4f45e9cefa7ba44b2e6778c3ce7281409999f1af1b2600454826040516110c99291906137c8565b60405180910390a18060048190555050565b6000806003805490501461115357600360016003805490506110fd9190613820565b8154811061110e5761110d613854565b5b906000526020600020906002020160010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16611157565b6001545b905090565b601060009054906101000a900460ff166111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a2906138f5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290613684565b60405180910390fd5b610e10811015611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906137a8565b60405180910390fd5b806008819055506000601060006101000a81548160ff021916908315150217905550600015157f1f5c872f1ea93c57e43112ea449ee19ef5754488b87627b4c52456b0e5a4109a826040516112d59190612ddb565b60405180910390a250565b6000600454905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606061133b7f0000000000000000000000000000000000000000000000000000000000000000612c1a565b6113647f0000000000000000000000000000000000000000000000000000000000000000612c1a565b61138d7f0000000000000000000000000000000000000000000000000000000000000000612c1a565b60405160200161139f9392919061399d565b604051602081830303815290604052905090565b601060009054906101000a900460ff1681565b600060016003805490506113da9190613820565b905090565b6000600380549050905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60015481565b600061142c6110db565b82111561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613a7c565b60405180910390fd5b6000600380549050116114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90613b34565b60405180910390fd5b60008060038054905090505b8082101561155f576000600282846114da9190613b54565b6114e49190613bd9565b905084600382815481106114fb576114fa613854565b5b906000526020600020906002020160010160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1610156115555760018161154e9190613b54565b9250611559565b8091505b506114c2565b8192505050919050565b600381565b60025481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611604576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fb90613c7c565b60405180910390fd5b600380549050811061164b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164290613d34565b60405180910390fd5b6008546003828154811061166257611661613854565b5b906000526020600020906002020160010160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16426116ad9190613820565b106116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490613dec565b60405180910390fd5b60006116f76113df565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e290613560565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f0243549a92b2412f7a3caf7a2e56d65b8821b91345363faa5f57195384065fcc60405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900460ff166118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906138f5565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061199b5750600e60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6119da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d190613e7e565b60405180910390fd5b6119e2612a9e565b8314611a23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1a90613f36565b60405180910390fd5b42611a2d846125e4565b10611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490613fc8565b60405180910390fd5b6000801b8403611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa99061405a565b60405180910390fd5b6000801b8214611b005781814014611aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af690614112565b60405180910390fd5b5b82611b096113df565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e242604051611b399190612ddb565b60405180910390a460036040518060600160405280868152602001426fffffffffffffffffffffffffffffffff168152602001856fffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550505050505050565b601060009054906101000a900460ff1615611c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c82906135f2565b60405180910390fd5b600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d2c5750600e60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6290613e7e565b60405180910390fd5b611d73612a9e565b831015611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906141ca565b60405180910390fd5b42611dbf846125e4565b10611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690613fc8565b60405180910390fd5b6000801b8403611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b9061405a565b60405180910390fd5b6000600f60008481526020019081526020016000205490506000801b8103611e98576040517f22aa3a9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808381526020016003611eb56113c6565b81548110611ec657611ec5613854565b5b9060005260206000209060020201600001548152602001878152602001868152602001600c548152602001600a548152509050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166341493c6060095483604051602001611f4b9190614274565b604051602081830303815290604052866040518463ffffffff1660e01b8152600401611f79939291906142e4565b60006040518083038186803b158015611f9157600080fd5b505afa158015611fa5573d6000803e3d6000fd5b5050505084611fb26113df565b877fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e242604051611fe29190612ddb565b60405180910390a460036040518060600160405280888152602001426fffffffffffffffffffffffffffffffff168152602001876fffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505050505050505050565b600f6020528060005260406000206000915090505481565b612106612d7a565b6003828154811061211a57612119613854565b5b9060005260206000209060020201604051806060016040529081600082015481526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461228e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228590613560565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f5df38d395edc15b669d646569bd015513395070b5b4deb8a16300abb060d1b5a600160405161232d919061307b565b60405180910390a250565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf90613560565b60405180910390fd5b80600a547fbf8cab6317796bfa97fea82b6d27c9542a08fa0821813cf2a57e7cff7fdc815660405160405180910390a380600a8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990613560565b60405180910390fd5b806009547f390b73b2b067afcef04d30b573e4590c6e565519e370927dd777ca0ce8a55db060405160405180910390a38060098190555050565b60085481565b61250a612d7a565b600361251583611422565b8154811061252657612525613854565b5b9060005260206000209060020201604051806060016040529081600082015481526020016001820160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681526020016001820160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16815250509050919050565b6000600554600154836125f79190613820565b6126019190614329565b60025461260e9190613b54565b9050919050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6003600060019054906101000a900460ff1615801561266657508060ff1660008054906101000a900460ff1660ff16105b6126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c906143f5565b60405180910390fd5b806000806101000a81548160ff021916908360ff1602179055506001600060016101000a81548160ff021916908315150217905550600082610160015111612722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271990614487565b60405180910390fd5b6000826080015111612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614519565b60405180910390fd5b4282610140015111156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906145d1565b60405180910390fd5b81610160015160048190555081608001516005819055506000600380549050036128f1576003604051806060016040528084610100015181526020018461014001516fffffffffffffffffffffffffffffffff1681526020018461012001516fffffffffffffffffffffffffffffffff1681525090806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060408201518160010160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050508161012001516001819055508161014001516002819055505b8160000151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081606001516008819055506001600e6000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508160a001516009819055508160c00151600a81905550816101800151600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160e00151600c819055508160400151600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249881604051612a9291906130b2565b60405180910390a15050565b6000600454612aab6110db565b612ab59190613b54565b905090565b60045481565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4790613560565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600854905090565b606060008203612c61576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d75565b600082905060005b60008214612c93578080612c7c906145f1565b915050600a82612c8c9190613bd9565b9150612c69565b60008167ffffffffffffffff811115612caf57612cae61313e565b5b6040519080825280601f01601f191660200182016040528015612ce15781602001600182028036833780820191505090505b5090505b60008514612d6e57600182612cfa9190613820565b9150600a85612d099190614639565b6030612d159190613b54565b60f81b818381518110612d2b57612d2a613854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d679190613bd9565b9450612ce5565b8093505050505b919050565b60405180606001604052806000801916815260200160006fffffffffffffffffffffffffffffffff16815260200160006fffffffffffffffffffffffffffffffff1681525090565b6000819050919050565b612dd581612dc2565b82525050565b6000602082019050612df06000830184612dcc565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e3582612e0a565b9050919050565b612e4581612e2a565b8114612e5057600080fd5b50565b600081359050612e6281612e3c565b92915050565b600060208284031215612e7e57612e7d612e00565b5b6000612e8c84828501612e53565b91505092915050565b6000819050919050565b612ea881612e95565b8114612eb357600080fd5b50565b600081359050612ec581612e9f565b92915050565b600060208284031215612ee157612ee0612e00565b5b6000612eef84828501612eb6565b91505092915050565b612f0181612dc2565b8114612f0c57600080fd5b50565b600081359050612f1e81612ef8565b92915050565b600060208284031215612f3a57612f39612e00565b5b6000612f4884828501612f0f565b91505092915050565b612f5a81612e95565b82525050565b6000602082019050612f756000830184612f51565b92915050565b612f8481612e2a565b82525050565b6000602082019050612f9f6000830184612f7b565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fdf578082015181840152602081019050612fc4565b83811115612fee576000848401525b50505050565b6000601f19601f8301169050919050565b600061301082612fa5565b61301a8185612fb0565b935061302a818560208601612fc1565b61303381612ff4565b840191505092915050565b600060208201905081810360008301526130588184613005565b905092915050565b60008115159050919050565b61307581613060565b82525050565b6000602082019050613090600083018461306c565b92915050565b600060ff82169050919050565b6130ac81613096565b82525050565b60006020820190506130c760008301846130a3565b92915050565b600080600080608085870312156130e7576130e6612e00565b5b60006130f587828801612eb6565b945050602061310687828801612f0f565b935050604061311787828801612eb6565b925050606061312887828801612f0f565b91505092959194509250565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61317682612ff4565b810181811067ffffffffffffffff821117156131955761319461313e565b5b80604052505050565b60006131a8612df6565b90506131b4828261316d565b919050565b600067ffffffffffffffff8211156131d4576131d361313e565b5b6131dd82612ff4565b9050602081019050919050565b82818337600083830152505050565b600061320c613207846131b9565b61319e565b90508281526020810184848401111561322857613227613139565b5b6132338482856131ea565b509392505050565b600082601f8301126132505761324f613134565b5b81356132608482602086016131f9565b91505092915050565b6000806000806080858703121561328357613282612e00565b5b600061329187828801612eb6565b94505060206132a287828801612f0f565b93505060406132b387828801612f0f565b925050606085013567ffffffffffffffff8111156132d4576132d3612e05565b5b6132e08782880161323b565b91505092959194509250565b6132f581612e95565b82525050565b60006fffffffffffffffffffffffffffffffff82169050919050565b613320816132fb565b82525050565b60608201600082015161333c60008501826132ec565b50602082015161334f6020850182613317565b5060408201516133626040850182613317565b50505050565b600060608201905061337d6000830184613326565b92915050565b600080fd5b60006101a0828403121561339f5761339e613383565b5b6133aa6101a061319e565b905060006133ba84828501612e53565b60008301525060206133ce84828501612e53565b60208301525060406133e284828501612e53565b60408301525060606133f684828501612f0f565b606083015250608061340a84828501612f0f565b60808301525060a061341e84828501612eb6565b60a08301525060c061343284828501612eb6565b60c08301525060e061344684828501612eb6565b60e08301525061010061345b84828501612eb6565b6101008301525061012061347184828501612f0f565b6101208301525061014061348784828501612f0f565b6101408301525061016061349d84828501612f0f565b610160830152506101806134b384828501612e53565b6101808301525092915050565b60006101a082840312156134d7576134d6612e00565b5b60006134e584828501613388565b91505092915050565b7f4c324f75747075744f7261636c653a2063616c6c6572206973206e6f7420746860008201527f65206f776e657200000000000000000000000000000000000000000000000000602082015250565b600061354a602783612fb0565b9150613555826134ee565b604082019050919050565b600060208201905081810360008301526135798161353d565b9050919050565b7f4c324f75747075744f7261636c653a206f7074696d6973746963206d6f64652060008201527f697320656e61626c656400000000000000000000000000000000000000000000602082015250565b60006135dc602a83612fb0565b91506135e782613580565b604082019050919050565b6000602082019050818103600083015261360b816135cf565b9050919050565b7f4c324f75747075744f7261636c653a2063616c6c6572206d757374206265207460008201527f6865206368616c6c656e67657200000000000000000000000000000000000000602082015250565b600061366e602d83612fb0565b915061367982613612565b604082019050919050565b6000602082019050818103600083015261369d81613661565b9050919050565b7f4c324f75747075744f7261636c653a2066696e616c697a6174696f6e2070657260008201527f696f64206d7573742062652067726561746572207468616e2037206461797300602082015250565b6000613700603f83612fb0565b915061370b826136a4565b604082019050919050565b6000602082019050818103600083015261372f816136f3565b9050919050565b7f4c324f75747075744f7261636c653a2066696e616c697a6174696f6e2070657260008201527f696f64206d7573742062652067726561746572207468616e203120686f757200602082015250565b6000613792603f83612fb0565b915061379d82613736565b604082019050919050565b600060208201905081810360008301526137c181613785565b9050919050565b60006040820190506137dd6000830185612dcc565b6137ea6020830184612dcc565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061382b82612dc2565b915061383683612dc2565b925082821015613849576138486137f1565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4c324f75747075744f7261636c653a206f7074696d6973746963206d6f64652060008201527f6973206e6f7420656e61626c6564000000000000000000000000000000000000602082015250565b60006138df602e83612fb0565b91506138ea82613883565b604082019050919050565b6000602082019050818103600083015261390e816138d2565b9050919050565b600081905092915050565b600061392b82612fa5565b6139358185613915565b9350613945818560208601612fc1565b80840191505092915050565b7f2e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613987600183613915565b915061399282613951565b600182019050919050565b60006139a98286613920565b91506139b48261397a565b91506139c08285613920565b91506139cb8261397a565b91506139d78284613920565b9150819050949350505050565b7f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560008201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060208201527f70726f706f736564000000000000000000000000000000000000000000000000604082015250565b6000613a66604883612fb0565b9150613a71826139e4565b606082019050919050565b60006020820190508181036000830152613a9581613a59565b9050919050565b7f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560008201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360208201527f6564207965740000000000000000000000000000000000000000000000000000604082015250565b6000613b1e604683612fb0565b9150613b2982613a9c565b606082019050919050565b60006020820190508181036000830152613b4d81613b11565b9050919050565b6000613b5f82612dc2565b9150613b6a83612dc2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9f57613b9e6137f1565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613be482612dc2565b9150613bef83612dc2565b925082613bff57613bfe613baa565b5b828204905092915050565b7f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60008201527f67657220616464726573732063616e2064656c657465206f7574707574730000602082015250565b6000613c66603e83612fb0565b9150613c7182613c0a565b604082019050919050565b60006020820190508181036000830152613c9581613c59565b9050919050565b7f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560008201527f747075747320616674657220746865206c6174657374206f757470757420696e60208201527f6465780000000000000000000000000000000000000000000000000000000000604082015250565b6000613d1e604383612fb0565b9150613d2982613c9c565b606082019050919050565b60006020820190508181036000830152613d4d81613d11565b9050919050565b7f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560008201527f74707574732074686174206861766520616c7265616479206265656e2066696e60208201527f616c697a65640000000000000000000000000000000000000000000000000000604082015250565b6000613dd6604683612fb0565b9150613de182613d54565b606082019050919050565b60006020820190508181036000830152613e0581613dc9565b9050919050565b7f4c324f75747075744f7261636c653a206f6e6c7920617070726f76656420707260008201527f6f706f736572732063616e2070726f706f7365206e6577206f75747075747300602082015250565b6000613e68603f83612fb0565b9150613e7382613e0c565b604082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b7f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360008201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360208201527f6b206e756d626572000000000000000000000000000000000000000000000000604082015250565b6000613f20604883612fb0565b9150613f2b82613e9e565b606082019050919050565b60006020820190508181036000830152613f4f81613f13565b9050919050565b7f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60008201527f32206f757470757420696e207468652066757475726500000000000000000000602082015250565b6000613fb2603683612fb0565b9150613fbd82613f56565b604082019050919050565b60006020820190508181036000830152613fe181613fa5565b9050919050565b7f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360008201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000602082015250565b6000614044603a83612fb0565b915061404f82613fe8565b604082019050919050565b6000602082019050818103600083015261407381614037565b9050919050565b7f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060008201527f6e6f74206d61746368207468652068617368206174207468652065787065637460208201527f6564206865696768740000000000000000000000000000000000000000000000604082015250565b60006140fc604983612fb0565b91506141078261407a565b606082019050919050565b6000602082019050818103600083015261412b816140ef565b9050919050565b7f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360008201527f742062652067726561746572207468616e206f7220657175616c20746f206e6560208201527f787420657870656374656420626c6f636b206e756d6265720000000000000000604082015250565b60006141b4605883612fb0565b91506141bf82614132565b606082019050919050565b600060208201905081810360008301526141e3816141a7565b9050919050565b6141f381612dc2565b82525050565b60c08201600082015161420f60008501826132ec565b50602082015161422260208501826132ec565b50604082015161423560408501826132ec565b50606082015161424860608501826141ea565b50608082015161425b60808501826132ec565b5060a082015161426e60a08501826132ec565b50505050565b600060c08201905061428960008301846141f9565b92915050565b600081519050919050565b600082825260208201905092915050565b60006142b68261428f565b6142c0818561429a565b93506142d0818560208601612fc1565b6142d981612ff4565b840191505092915050565b60006060820190506142f96000830186612f51565b818103602083015261430b81856142ab565b9050818103604083015261431f81846142ab565b9050949350505050565b600061433482612dc2565b915061433f83612dc2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614378576143776137f1565b5b828202905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006143df602e83612fb0565b91506143ea82614383565b604082019050919050565b6000602082019050818103600083015261440e816143d2565b9050919050565b7f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260008201527f76616c206d7573742062652067726561746572207468616e2030000000000000602082015250565b6000614471603a83612fb0565b915061447c82614415565b604082019050919050565b600060208201905081810360008301526144a081614464565b9050919050565b7f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b6000614503603483612fb0565b915061450e826144a7565b604082019050919050565b60006020820190508181036000830152614532816144f6565b9050919050565b7f4c324f75747075744f7261636c653a207374617274696e67204c322074696d6560008201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060208201527f74696d6500000000000000000000000000000000000000000000000000000000604082015250565b60006145bb604483612fb0565b91506145c682614539565b606082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b60006145fc82612dc2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361462e5761462d6137f1565b5b600182019050919050565b600061464482612dc2565b915061464f83612dc2565b92508261465f5761465e613baa565b5b82820690509291505056fea2646970667358221220dc2a3687af60827fcf7b4b0a0a245ee81e8704f3c6cf018cb214be7b8e94649d64736f6c634300080f0033