Commit 4354aa88 authored by clabby's avatar clabby Committed by GitHub

feat(ctb): `PreimageOracle` large preimage proposal bonds (#9570)

* Add bonds to `PreimageOracle`

* Update op-challenger/game/fault/contracts/oracle_test.go
Co-authored-by: default avatarcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Update packages/contracts-bedrock/src/cannon/PreimageOracle.sol
Co-authored-by: default avatarrefcell <abigger87@gmail.com>

---------
Co-authored-by: default avatarcoderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: default avatarrefcell <abigger87@gmail.com>
parent 1e62a0b7
......@@ -42,8 +42,8 @@ type PreimageOracleLeaf struct {
// PreimageOracleMetaData contains all meta data concerning the PreimageOracle contract.
var PreimageOracleMetaData = &bind.MetaData{
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_cancunActivation\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_inputStartBlock\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadBlobPreimagePart\",\"inputs\":[{\"name\":\"_z\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_y\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_commitment\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKZGPointEvaluationPreimage\",\"inputs\":[{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CancunNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60e06040523480156200001157600080fd5b506040516200378f3803806200378f8339810160408190526200003491620000f9565b60c083905260a0829052608081905260005b62000054600160106200013e565b811015620000ef576003816010811062000072576200007262000158565b0154600382601081106200008a576200008a62000158565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c591906200016e565b60108110620000d857620000d862000158565b015580620000e68162000189565b91505062000046565b50505050620001a5565b6000806000606084860312156200010f57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008282101562000153576200015362000128565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000184576200018462000128565b500190565b6000600182016200019e576200019e62000128565b5060010190565b60805160a05160c0516135a5620001ea600039600081816104170152611b1701526000818161048b01526113d8015260008181610ffb015261123e01526135a56000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80639d53a648116100f9578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc14610476578063f3f480d914610489578063faf37bc7146104af578063fef2b4ed146104c257600080fd5b8063dd24f9bf14610415578063e03110e11461043b578063e15926111461046357600080fd5b8063b4801e61116100d3578063b4801e61146103d4578063b893f82c146103e7578063d18534b5146103fa578063da35c6641461040d57600080fd5b80639d53a648146103545780639d7e876914610396578063b2e67ba8146103a957600080fd5b806361238bde116101665780637ac54767116101405780637ac54767146102c45780638542cf50146102d7578063882856ef146103155780638dc4be111461034157600080fd5b806361238bde1461025b5780636551927b146102865780637917de1d146102b157600080fd5b80633909af5c116101975780633909af5c1461022b5780634d52b4c91461024057806352f0f3ad1461024857600080fd5b8063013cf08b146101be5780630359a563146102025780632055b36b14610223575b600080fd5b6101d16101cc366004612b1a565b6104e2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b610215610210366004612b5c565b610527565b6040519081526020016101f9565b610215601081565b61023e610239366004612d57565b61065f565b005b6102156108ad565b610215610256366004612e43565b6108c8565b610215610269366004612e7e565b600160209081526000928352604080842090915290825290205481565b610215610294366004612b5c565b601560209081526000928352604080842090915290825290205481565b61023e6102bf366004612ee2565b61099d565b6102156102d2366004612b1a565b610e8d565b6103056102e5366004612e7e565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101f9565b610328610323366004612f7e565b610ea4565b60405167ffffffffffffffff90911681526020016101f9565b61023e61034f366004612fb1565b610efe565b610215610362366004612b5c565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b61023e6103a4366004612ffd565b610ff9565b6102156103b7366004612b5c565b601660209081526000928352604080842090915290825290205481565b6102156103e2366004612f7e565b61120a565b61023e6103f5366004613089565b61123c565b61023e610408366004612d57565b611363565b601354610215565b7f0000000000000000000000000000000000000000000000000000000000000000610215565b61044e610449366004612e7e565b61171a565b604080519283526020830191909152016101f9565b61023e610471366004612fb1565b61180b565b61023e6104843660046130cb565b611913565b7f0000000000000000000000000000000000000000000000000000000000000000610215565b61023e6104bd366004613164565b611a8d565b6102156104d0366004612b1a565b60006020819052908152604090205481565b601381815481106104f257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061056a9060601c63ffffffff1690565b63ffffffff16905060005b601081101561065757816001166001036105fd5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106105ca576105ca6131a0565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061063e565b8260038260108110610611576106116131a0565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061064f816131fe565b915050610575565b505092915050565b600061066b8a8a610527565b905061068e86868360208b01356106896106848d613236565b611ca0565b611ce0565b80156106ac57506106ac83838360208801356106896106848a613236565b6106e2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106f89190613305565b6040516020818303038152906040528051906020012014610745576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161075b9190613343565b14610792576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107da886107a0868061335b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4192505050565b6107e388611e9c565b8360400135886040516020016107f99190613305565b6040516020818303038152906040528051906020012003610846576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b60016108bb601060026134e2565b6108c591906134ee565b81565b60006108d48686612738565b90506108e1836008613343565b8211806108ee5750602083115b15610925576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b606081156109b6576109af86866127e5565b90506109f0565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610a1d57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a9e8260601c63ffffffff1690565b63ffffffff169050333214610adf576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aef8260801c63ffffffff1690565b63ffffffff16600003610b2e576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b388260c01c90565b67ffffffffffffffff1615610b79576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610bb2576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bbf89898d888661285e565b83516020850160888204881415608883061715610be4576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c94578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c89576001821615610c695782818b0152610c89565b8981015160009081526020938452604090209260019290921c9101610c4c565b505050608801610bf1565b50505050600160106002610ca891906134e2565b610cb291906134ee565b811115610ceb576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d60610cfe8360401c63ffffffff1690565b610d0e9063ffffffff168a613343565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610ded5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610d9a8260801c63ffffffff1690565b63ffffffff16610db08360401c63ffffffff1690565b63ffffffff1614610ded576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610e1390846010612a90565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610e9d57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610ecc57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610f1c5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610f4957600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f0000000000000000000000000000000000000000000000000000000000000000421015611053576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa8061107b5763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826110fd576309bde3396000526004601cfd5b602886106111135763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061123257600080fd5b0154925083915050565b7f0000000000000000000000000000000000000000000000000000000000000000421015611296576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156113d6576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006114018260c01c90565b6114159067ffffffffffffffff16426134ee565b1161144c576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114588b8b610527565b905061147187878360208c01356106896106848e613236565b801561148f575061148f84848360208901356106896106848b613236565b6114c5576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016114db9190613305565b6040516020818303038152906040528051906020012014611528576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161153e9190613343565b141580611570575060016115588360601c63ffffffff1690565b6115629190613505565b63ffffffff16856020013514155b156115a7576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115b5896107a0878061335b565b6115be89611e9c565b60006115c98a6129b1565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006116208460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506116f28460801c63ffffffff1690565b60009283526020839052604090922063ffffffff909216909155505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546117bf816008613343565b6117ca856020613343565b106117e857836117db826008613343565b6117e591906134ee565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106118295763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061191f8686610527565b905061193883838360208801356106896106848a613236565b61196e576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156119aa576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b2612ace565b6119c0816107a0878061335b565b6119c981611e9c565b8460400135816040516020016119df9190613305565b6040516020818303038152906040528051906020012003611a2c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611ac6576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad181600861352a565b63ffffffff168263ffffffff1610611b15576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611b75576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611cc393929190613552565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611d34578060051b880135600186831c1660018114611d195760008481526020839052604090209350611d2a565b600082815260208590526040902093505b5050600101611ce6565b5090931495945050505050565b6088815114611d4f57600080fd5b6020810160208301611dd0565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611dca81611db5868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611ddc60008383611d5c565b611de860018383611d5c565b611df460028383611d5c565b611e0060038383611d5c565b611e0c60048383611d5c565b611e1860058383611d5c565b611e2460068383611d5c565b611e3060078383611d5c565b611e3c60088383611d5c565b611e4860098383611d5c565b611e54600a8383611d5c565b611e60600b8383611d5c565b611e6c600c8383611d5c565b611e78600d8383611d5c565b611e84600e8383611d5c565b611e90600f8383611d5c565b611dca60108383611d5c565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612618565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61204f8660011b67ffffffffffffffff1690565b18188584603f1c61206a8660011b67ffffffffffffffff1690565b18188584603f1c6120858660011b67ffffffffffffffff1690565b181895508483603f1c6120a28560011b67ffffffffffffffff1690565b181894508387603f1c6120bf8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61243f81611f92565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611dca565b61262460008284612436565b61263060018284612436565b61263c60028284612436565b61264860038284612436565b61265460048284612436565b61266060058284612436565b61266c60068284612436565b61267860078284612436565b61268460088284612436565b61269060098284612436565b61269c600a8284612436565b6126a8600b8284612436565b6126b4600c8284612436565b6126c0600d8284612436565b6126cc600e8284612436565b6126d8600f8284612436565b6126e460108284612436565b6126f060118284612436565b6126fc60128284612436565b61270860138284612436565b61271460148284612436565b61272060158284612436565b61272c60168284612436565b611dca60178284612436565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176127de818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561282e5760888290038501848101848103803687375060806001820353506001845160001a1784538652612845565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006128708260a01c63ffffffff1690565b67ffffffffffffffff169050600061288e8360801c63ffffffff1690565b63ffffffff16905060006128a88460401c63ffffffff1690565b63ffffffff1690506008831080156128be575080155b156128f25760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556129a7565b6008831015801561291057508061290a6008856134ee565b93508310155b801561292457506129218782613343565b83105b156129a757600061293582856134ee565b905087612943826020613343565b1015801561294f575085155b15612986576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612a34565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006129e28360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612a0f8360101b67ffffffffffffffff1690565b1617905060008160201c612a2d8360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612a4c906129b8565b6129b8565b6040820151612a5a906129b8565b60401b17612a72612a4760018460059190911b015190565b825160809190911b90612a84906129b8565b60c01b17179392505050565b8260108101928215612abe579160200282015b82811115612abe578251825591602001919060010190612aa3565b50612aca929150612ae6565b5090565b6040518060200160405280612ae1612afb565b905290565b5b80821115612aca5760008155600101612ae7565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612b2c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612b5757600080fd5b919050565b60008060408385031215612b6f57600080fd5b612b7883612b33565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612bd957612bd9612b86565b60405290565b6040516060810167ffffffffffffffff81118282101715612bd957612bd9612b86565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612c4957612c49612b86565b604052919050565b6000610320808385031215612c6557600080fd5b604051602080820167ffffffffffffffff8382108183111715612c8a57612c8a612b86565b8160405283955087601f880112612ca057600080fd5b612ca8612bb5565b9487019491508188861115612cbc57600080fd5b875b86811015612ce45780358381168114612cd75760008081fd5b8452928401928401612cbe565b50909352509295945050505050565b600060608284031215612d0557600080fd5b50919050565b60008083601f840112612d1d57600080fd5b50813567ffffffffffffffff811115612d3557600080fd5b6020830191508360208260051b8501011115612d5057600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612d7657600080fd5b612d7f8a612b33565b985060208a01359750612d958b60408c01612c51565b96506103608a013567ffffffffffffffff80821115612db357600080fd5b612dbf8d838e01612cf3565b97506103808c0135915080821115612dd657600080fd5b612de28d838e01612d0b565b90975095506103a08c0135915080821115612dfc57600080fd5b612e088d838e01612cf3565b94506103c08c0135915080821115612e1f57600080fd5b50612e2c8c828d01612d0b565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612e5b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612e9157600080fd5b50508035926020909101359150565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b602083019150836020828501011115612d5057600080fd5b600080600080600080600060a0888a031215612efd57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612f2357600080fd5b612f2f8b838c01612ea0565b909750955060608a0135915080821115612f4857600080fd5b50612f558a828b01612d0b565b90945092505060808801358015158114612f6e57600080fd5b8091505092959891949750929550565b600080600060608486031215612f9357600080fd5b612f9c84612b33565b95602085013595506040909401359392505050565b600080600060408486031215612fc657600080fd5b83359250602084013567ffffffffffffffff811115612fe457600080fd5b612ff086828701612ea0565b9497909650939450505050565b600080600080600080600060a0888a03121561301857600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561303e57600080fd5b61304a8b838c01612ea0565b909750955060608a013591508082111561306357600080fd5b506130708a828b01612ea0565b989b979a50959894979596608090950135949350505050565b6000806020838503121561309c57600080fd5b823567ffffffffffffffff8111156130b357600080fd5b6130bf85828601612ea0565b90969095509350505050565b6000806000806000608086880312156130e357600080fd5b6130ec86612b33565b945060208601359350604086013567ffffffffffffffff8082111561311057600080fd5b61311c89838a01612cf3565b9450606088013591508082111561313257600080fd5b5061313f88828901612d0b565b969995985093965092949392505050565b803563ffffffff81168114612b5757600080fd5b60008060006060848603121561317957600080fd5b8335925061318960208501613150565b915061319760408501613150565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361322f5761322f6131cf565b5060010190565b60006060823603121561324857600080fd5b613250612bdf565b823567ffffffffffffffff8082111561326857600080fd5b9084019036601f83011261327b57600080fd5b813560208282111561328f5761328f612b86565b6132bf817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612c02565b925081835236818386010111156132d557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561333a57825167ffffffffffffffff16825260209283019290910190600101613311565b50505092915050565b60008219821115613356576133566131cf565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261339057600080fd5b83018035915067ffffffffffffffff8211156133ab57600080fd5b602001915036819003821315612d5057600080fd5b600181815b8085111561341957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156133ff576133ff6131cf565b8085161561340c57918102915b93841c93908002906133c5565b509250929050565b600082613430575060016134dc565b8161343d575060006134dc565b8160018114613453576002811461345d57613479565b60019150506134dc565b60ff84111561346e5761346e6131cf565b50506001821b6134dc565b5060208310610133831016604e8410600b841016171561349c575081810a6134dc565b6134a683836133c0565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156134d8576134d86131cf565b0290505b92915050565b60006127de8383613421565b600082821015613500576135006131cf565b500390565b600063ffffffff83811690831681811015613522576135226131cf565b039392505050565b600063ffffffff808316818516808303821115613549576135496131cf565b01949350505050565b6000845160005b818110156135735760208188018101518583015201613559565b81811115613582576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_minProposalSize\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_challengePeriod\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_cancunActivation\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"KECCAK_TREE_DEPTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_LEAF_COUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_BOND_SIZE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addLeavesLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_inputStartBlock\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_stateCommitments\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_finalize\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeFirstLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"challengePeriod\",\"inputs\":[],\"outputs\":[{\"name\":\"challengePeriod_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTreeRootLPP\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"treeRoot_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initLPP\",\"inputs\":[{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_claimedSize\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"loadBlobPreimagePart\",\"inputs\":[{\"name\":\"_z\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_y\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_commitment\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKZGPointEvaluationPreimage\",\"inputs\":[{\"name\":\"_input\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadKeccak256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadLocalData\",\"inputs\":[{\"name\":\"_ident\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_localContext\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_word\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_size\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"key_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"loadSha256PreimagePart\",\"inputs\":[{\"name\":\"_partOffset\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_preimage\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"minProposalSize\",\"inputs\":[],\"outputs\":[{\"name\":\"minProposalSize_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageLengths\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimagePartOk\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"preimageParts\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocks\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBlocksLen\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"len_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBonds\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalBranches\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalCount\",\"inputs\":[],\"outputs\":[{\"name\":\"count_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalMetadata\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"LPPMetaData\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposalParts\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proposals\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"readPreimage\",\"inputs\":[{\"name\":\"_key\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_offset\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"dat_\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"datLen_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"squeezeLPP\",\"inputs\":[{\"name\":\"_claimant\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_uuid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_stateMatrix\",\"type\":\"tuple\",\"internalType\":\"structLibKeccak.StateMatrix\",\"components\":[{\"name\":\"state\",\"type\":\"uint64[25]\",\"internalType\":\"uint64[25]\"}]},{\"name\":\"_preState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_preStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"_postState\",\"type\":\"tuple\",\"internalType\":\"structPreimageOracle.Leaf\",\"components\":[{\"name\":\"input\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"stateCommitment\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_postStateProof\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"zeroHashes\",\"inputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"ActiveProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AlreadyFinalized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BadProposal\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BondTransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CancunNotActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBond\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInputSize\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPreimage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEOA\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PartOffsetOOB\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PostStateMatches\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StatesNotContiguous\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TreeSizeOverflow\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WrongStartingBlock\",\"inputs\":[]}]",
Bin: "0x60e06040523480156200001157600080fd5b506040516200397b3803806200397b8339810160408190526200003491620000f9565b60c083905260a0829052608081905260005b62000054600160106200013e565b811015620000ef576003816010811062000072576200007262000158565b0154600382601081106200008a576200008a62000158565b0154604080516020810193909352820152606001604051602081830303815290604052805190602001206003826001620000c591906200016e565b60108110620000d857620000d862000158565b015580620000e68162000189565b91505062000046565b50505050620001a5565b6000806000606084860312156200010f57600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052601160045260246000fd5b60008282101562000153576200015362000128565b500390565b634e487b7160e01b600052603260045260246000fd5b6000821982111562000184576200018462000128565b500190565b6000600182016200019e576200019e62000128565b5060010190565b60805160a05160c051613791620001ea6000396000818161054d0152611d2801526000818161062d01526115900152600081816111b301526113f601526137916000f3fe6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b4801e61116100d1578063b4801e61146104c9578063b893f82c146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e876914610471578063b2e67ba81461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d06565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d48565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f43565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad36600461302f565b610a80565b3480156102be57600080fd5b506102386102cd36600461306a565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d48565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130ce565b610b55565b34801561036a57600080fd5b50610238610379366004612d06565b611045565b34801561038a57600080fd5b506103b961039936600461306a565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461316a565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d36600461319d565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d48565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c3660046131e9565b6111b1565b34801561049d57600080fd5b506102386104ac366004612d48565b601760209081526000928352604080842090915290825290205481565b3480156104d557600080fd5b506102386104e436600461316a565b6113c2565b3480156104f557600080fd5b5061027b610504366004613275565b6113f4565b34801561051557600080fd5b5061027b610524366004612f43565b61151b565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d48565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461306a565b6118dd565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f936600461319d565b6119ce565b34801561060a57600080fd5b5061027b6106193660046132b7565b611ad6565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613350565b611c5c565b34801561067057600080fd5b5061023861067f366004612d06565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961338c565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061338c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133ea565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613422565b611ec7565b611f07565b801561085b575061085b83838360208801356108386108338a613422565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134f1565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a919061352f565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f8680613547565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6892505050565b610992886120c3565b8360400135886040516020016109a891906134f1565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a3361286b565b50505050505050505050565b6001610a73601060026136ce565b610a7d91906136da565b81565b6000610a8c8686612924565b9050610a9983600861352f565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129d1565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a4a565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136ce565b610e6a91906136da565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a61352f565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612c7c565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b601460205282600052604060002060205281600052604060002081601081106113ea57600080fd5b0154925083915050565b7f000000000000000000000000000000000000000000000000000000000000000042101561144e576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff81161561158e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115b98260c01c90565b6115cd9067ffffffffffffffff16426136da565b11611604576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116108b8b6106d6565b905061162987878360208c01356108386108338e613422565b8015611647575061164784848360208901356108386108338b613422565b61167d576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87604001358960405160200161169391906134f1565b60405160208183030381529060405280519060200120146116e0576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116f6919061352f565b141580611728575060016117108360601c63ffffffff1690565b61171a91906136f1565b63ffffffff16856020013514155b1561175f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8961094f8780613547565b611776896120c3565b60006117818a612b9d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117d88460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118aa8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118ce8d8d8161286b565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461198281600861352f565b61198d85602061352f565b106119ab578361199e82600861352f565b6119a891906136da565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106119ec5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611ae286866106d6565b9050611afb83838360208801356108386108338a613422565b611b31576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b6d576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b75612cba565b611b838161094f8780613547565b611b8c816120c3565b846040013581604051602001611ba291906134f1565b6040516020818303038152906040528051906020012003611bef576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c5387873361286b565b50505050505050565b6703782dace9d90000341015611c9e576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cd7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2816008613716565b63ffffffff168263ffffffff1610611d26576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611d86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611eea9392919061373e565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f5b578060051b880135600186831c1660018114611f405760008481526020839052604090209350611f51565b600082815260208590526040902093505b5050600101611f0d565b5090931495945050505050565b6088815114611f7657600080fd5b6020810160208301611ff7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611ff181611fdc868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61200360008383611f83565b61200f60018383611f83565b61201b60028383611f83565b61202760038383611f83565b61203360048383611f83565b61203f60058383611f83565b61204b60068383611f83565b61205760078383611f83565b61206360088383611f83565b61206f60098383611f83565b61207b600a8383611f83565b612087600b8383611f83565b612093600c8383611f83565b61209f600d8383611f83565b6120ab600e8383611f83565b6120b7600f8383611f83565b611ff160108383611f83565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161274b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6122768660011b67ffffffffffffffff1690565b18188584603f1c6122918660011b67ffffffffffffffff1690565b18188584603f1c6122ac8660011b67ffffffffffffffff1690565b181895508483603f1c6122c98560011b67ffffffffffffffff1690565b181894508387603f1c6122e68960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c53565b6126e560008261265e565b6126f060058261265e565b6126fb600a8261265e565b612706600f8261265e565b61271160148261265e565b50565b61271d816121b9565b612726816126da565b600383901b820151815160c09190911c90611ff190821867ffffffffffffffff168352565b61275760008284612714565b61276360018284612714565b61276f60028284612714565b61277b60038284612714565b61278760048284612714565b61279360058284612714565b61279f60068284612714565b6127ab60078284612714565b6127b760088284612714565b6127c360098284612714565b6127cf600a8284612714565b6127db600b8284612714565b6127e7600c8284612714565b6127f3600d8284612714565b6127ff600e8284612714565b61280b600f8284612714565b61281760108284612714565b61282360118284612714565b61282f60128284612714565b61283b60138284612714565b61284760148284612714565b61285360158284612714565b61285f60168284612714565b611ff160178284612714565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d80600081146128e4576040519150601f19603f3d011682016040523d82523d6000602084013e6128e9565b606091505b5050905080612657576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ca818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a1a5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a31565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a5c8260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a7a8360801c63ffffffff1690565b63ffffffff1690506000612a948460401c63ffffffff1690565b63ffffffff169050600883108015612aaa575080155b15612ade5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b93565b60088310158015612afc575080612af66008856136da565b93508310155b8015612b105750612b0d878261352f565b83105b15612b93576000612b2182856136da565b905087612b2f82602061352f565b10158015612b3b575085155b15612b72576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c20565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bce8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612bfb8360101b67ffffffffffffffff1690565b1617905060008160201c612c198360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c3890612ba4565b612ba4565b6040820151612c4690612ba4565b60401b17612c5e612c3360018460059190911b015190565b825160809190911b90612c7090612ba4565b60c01b17179392505050565b8260108101928215612caa579160200282015b82811115612caa578251825591602001919060010190612c8f565b50612cb6929150612cd2565b5090565b6040518060200160405280612ccd612ce7565b905290565b5b80821115612cb65760008155600101612cd3565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d1857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d4357600080fd5b919050565b60008060408385031215612d5b57600080fd5b612d6483612d1f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dc557612dc5612d72565b60405290565b6040516060810167ffffffffffffffff81118282101715612dc557612dc5612d72565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e3557612e35612d72565b604052919050565b6000610320808385031215612e5157600080fd5b604051602080820167ffffffffffffffff8382108183111715612e7657612e76612d72565b8160405283955087601f880112612e8c57600080fd5b612e94612da1565b9487019491508188861115612ea857600080fd5b875b86811015612ed05780358381168114612ec35760008081fd5b8452928401928401612eaa565b50909352509295945050505050565b600060608284031215612ef157600080fd5b50919050565b60008083601f840112612f0957600080fd5b50813567ffffffffffffffff811115612f2157600080fd5b6020830191508360208260051b8501011115612f3c57600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f6257600080fd5b612f6b8a612d1f565b985060208a01359750612f818b60408c01612e3d565b96506103608a013567ffffffffffffffff80821115612f9f57600080fd5b612fab8d838e01612edf565b97506103808c0135915080821115612fc257600080fd5b612fce8d838e01612ef7565b90975095506103a08c0135915080821115612fe857600080fd5b612ff48d838e01612edf565b94506103c08c013591508082111561300b57600080fd5b506130188c828d01612ef7565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561304757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561307d57600080fd5b50508035926020909101359150565b60008083601f84011261309e57600080fd5b50813567ffffffffffffffff8111156130b657600080fd5b602083019150836020828501011115612f3c57600080fd5b600080600080600080600060a0888a0312156130e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561310f57600080fd5b61311b8b838c0161308c565b909750955060608a013591508082111561313457600080fd5b506131418a828b01612ef7565b9094509250506080880135801515811461315a57600080fd5b8091505092959891949750929550565b60008060006060848603121561317f57600080fd5b61318884612d1f565b95602085013595506040909401359392505050565b6000806000604084860312156131b257600080fd5b83359250602084013567ffffffffffffffff8111156131d057600080fd5b6131dc8682870161308c565b9497909650939450505050565b600080600080600080600060a0888a03121561320457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561322a57600080fd5b6132368b838c0161308c565b909750955060608a013591508082111561324f57600080fd5b5061325c8a828b0161308c565b989b979a50959894979596608090950135949350505050565b6000806020838503121561328857600080fd5b823567ffffffffffffffff81111561329f57600080fd5b6132ab8582860161308c565b90969095509350505050565b6000806000806000608086880312156132cf57600080fd5b6132d886612d1f565b945060208601359350604086013567ffffffffffffffff808211156132fc57600080fd5b61330889838a01612edf565b9450606088013591508082111561331e57600080fd5b5061332b88828901612ef7565b969995985093965092949392505050565b803563ffffffff81168114612d4357600080fd5b60008060006060848603121561336557600080fd5b833592506133756020850161333c565b91506133836040850161333c565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361341b5761341b6133bb565b5060010190565b60006060823603121561343457600080fd5b61343c612dcb565b823567ffffffffffffffff8082111561345457600080fd5b9084019036601f83011261346757600080fd5b813560208282111561347b5761347b612d72565b6134ab817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612dee565b925081835236818386010111156134c157600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561352657825167ffffffffffffffff168252602092830192909101906001016134fd565b50505092915050565b60008219821115613542576135426133bb565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357c57600080fd5b83018035915067ffffffffffffffff82111561359757600080fd5b602001915036819003821315612f3c57600080fd5b600181815b8085111561360557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135eb576135eb6133bb565b808516156135f857918102915b93841c93908002906135b1565b509250929050565b60008261361c575060016136c8565b81613629575060006136c8565b816001811461363f576002811461364957613665565b60019150506136c8565b60ff84111561365a5761365a6133bb565b50506001821b6136c8565b5060208310610133831016604e8410600b8410161715613688575081810a6136c8565b61369283836135ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136c4576136c46133bb565b0290505b92915050565b60006129ca838361360d565b6000828210156136ec576136ec6133bb565b500390565b600063ffffffff8381169083168181101561370e5761370e6133bb565b039392505050565b600063ffffffff808316818516808303821115613735576137356133bb565b01949350505050565b6000845160005b8181101561375f5760208188018101518583015201613745565b8181111561376e576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a",
}
// PreimageOracleABI is the input ABI used to generate the binding from.
......@@ -275,6 +275,37 @@ func (_PreimageOracle *PreimageOracleCallerSession) MAXLEAFCOUNT() (*big.Int, er
return _PreimageOracle.Contract.MAXLEAFCOUNT(&_PreimageOracle.CallOpts)
}
// MINBONDSIZE is a free data retrieval call binding the contract method 0x7051472e.
//
// Solidity: function MIN_BOND_SIZE() view returns(uint256)
func (_PreimageOracle *PreimageOracleCaller) MINBONDSIZE(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "MIN_BOND_SIZE")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// MINBONDSIZE is a free data retrieval call binding the contract method 0x7051472e.
//
// Solidity: function MIN_BOND_SIZE() view returns(uint256)
func (_PreimageOracle *PreimageOracleSession) MINBONDSIZE() (*big.Int, error) {
return _PreimageOracle.Contract.MINBONDSIZE(&_PreimageOracle.CallOpts)
}
// MINBONDSIZE is a free data retrieval call binding the contract method 0x7051472e.
//
// Solidity: function MIN_BOND_SIZE() view returns(uint256)
func (_PreimageOracle *PreimageOracleCallerSession) MINBONDSIZE() (*big.Int, error) {
return _PreimageOracle.Contract.MINBONDSIZE(&_PreimageOracle.CallOpts)
}
// ChallengePeriod is a free data retrieval call binding the contract method 0xf3f480d9.
//
// Solidity: function challengePeriod() view returns(uint256 challengePeriod_)
......@@ -523,6 +554,37 @@ func (_PreimageOracle *PreimageOracleCallerSession) ProposalBlocksLen(_claimant
return _PreimageOracle.Contract.ProposalBlocksLen(&_PreimageOracle.CallOpts, _claimant, _uuid)
}
// ProposalBonds is a free data retrieval call binding the contract method 0xddcd58de.
//
// Solidity: function proposalBonds(address , uint256 ) view returns(uint256)
func (_PreimageOracle *PreimageOracleCaller) ProposalBonds(opts *bind.CallOpts, arg0 common.Address, arg1 *big.Int) (*big.Int, error) {
var out []interface{}
err := _PreimageOracle.contract.Call(opts, &out, "proposalBonds", arg0, arg1)
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// ProposalBonds is a free data retrieval call binding the contract method 0xddcd58de.
//
// Solidity: function proposalBonds(address , uint256 ) view returns(uint256)
func (_PreimageOracle *PreimageOracleSession) ProposalBonds(arg0 common.Address, arg1 *big.Int) (*big.Int, error) {
return _PreimageOracle.Contract.ProposalBonds(&_PreimageOracle.CallOpts, arg0, arg1)
}
// ProposalBonds is a free data retrieval call binding the contract method 0xddcd58de.
//
// Solidity: function proposalBonds(address , uint256 ) view returns(uint256)
func (_PreimageOracle *PreimageOracleCallerSession) ProposalBonds(arg0 common.Address, arg1 *big.Int) (*big.Int, error) {
return _PreimageOracle.Contract.ProposalBonds(&_PreimageOracle.CallOpts, arg0, arg1)
}
// ProposalBranches is a free data retrieval call binding the contract method 0xb4801e61.
//
// Solidity: function proposalBranches(address , uint256 , uint256 ) view returns(bytes32)
......@@ -833,21 +895,21 @@ func (_PreimageOracle *PreimageOracleTransactorSession) ChallengeLPP(_claimant c
// InitLPP is a paid mutator transaction binding the contract method 0xfaf37bc7.
//
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) returns()
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) payable returns()
func (_PreimageOracle *PreimageOracleTransactor) InitLPP(opts *bind.TransactOpts, _uuid *big.Int, _partOffset uint32, _claimedSize uint32) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "initLPP", _uuid, _partOffset, _claimedSize)
}
// InitLPP is a paid mutator transaction binding the contract method 0xfaf37bc7.
//
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) returns()
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) payable returns()
func (_PreimageOracle *PreimageOracleSession) InitLPP(_uuid *big.Int, _partOffset uint32, _claimedSize uint32) (*types.Transaction, error) {
return _PreimageOracle.Contract.InitLPP(&_PreimageOracle.TransactOpts, _uuid, _partOffset, _claimedSize)
}
// InitLPP is a paid mutator transaction binding the contract method 0xfaf37bc7.
//
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) returns()
// Solidity: function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) payable returns()
func (_PreimageOracle *PreimageOracleTransactorSession) InitLPP(_uuid *big.Int, _partOffset uint32, _claimedSize uint32) (*types.Transaction, error) {
return _PreimageOracle.Contract.InitLPP(&_PreimageOracle.TransactOpts, _uuid, _partOffset, _claimedSize)
}
......
......@@ -9,11 +9,11 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/solc"
)
const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageLengths\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageParts\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1002,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimagePartOk\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\"},{\"astId\":1003,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"zeroHashes\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_array(t_bytes32)16_storage\"},{\"astId\":1004,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposals\",\"offset\":0,\"slot\":\"19\",\"type\":\"t_array(t_struct(LargePreimageProposalKeys)1009_storage)dyn_storage\"},{\"astId\":1005,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBranches\",\"offset\":0,\"slot\":\"20\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\"},{\"astId\":1006,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalMetadata\",\"offset\":0,\"slot\":\"21\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010))\"},{\"astId\":1007,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalParts\",\"offset\":0,\"slot\":\"22\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1008,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBlocks\",\"offset\":0,\"slot\":\"23\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)16_storage\":{\"encoding\":\"inplace\",\"label\":\"bytes32[16]\",\"numberOfBytes\":\"512\",\"base\":\"t_bytes32\"},\"t_array(t_struct(LargePreimageProposalKeys)1009_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(LargePreimageProposalKeys)1009_storage\"},\"t_array(t_uint64)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint64[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint64\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32[16]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint64[]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e LPPMetaData))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1010)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32[16])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_bytes32)16_storage\"},\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint64[])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_uint64)dyn_storage\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"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_userDefinedValueType(LPPMetaData)1010)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e LPPMetaData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_userDefinedValueType(LPPMetaData)1010\"},\"t_struct(LargePreimageProposalKeys)1009_storage\":{\"encoding\":\"inplace\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_userDefinedValueType(LPPMetaData)1010\":{\"encoding\":\"inplace\",\"label\":\"LPPMetaData\",\"numberOfBytes\":\"32\"}}}"
const PreimageOracleStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageLengths\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_mapping(t_bytes32,t_uint256)\"},{\"astId\":1001,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimageParts\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1002,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"preimagePartOk\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\"},{\"astId\":1003,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"zeroHashes\",\"offset\":0,\"slot\":\"3\",\"type\":\"t_array(t_bytes32)16_storage\"},{\"astId\":1004,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposals\",\"offset\":0,\"slot\":\"19\",\"type\":\"t_array(t_struct(LargePreimageProposalKeys)1010_storage)dyn_storage\"},{\"astId\":1005,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBranches\",\"offset\":0,\"slot\":\"20\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\"},{\"astId\":1006,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalMetadata\",\"offset\":0,\"slot\":\"21\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1011))\"},{\"astId\":1007,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBonds\",\"offset\":0,\"slot\":\"22\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\"},{\"astId\":1008,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalParts\",\"offset\":0,\"slot\":\"23\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\"},{\"astId\":1009,\"contract\":\"src/cannon/PreimageOracle.sol:PreimageOracle\",\"label\":\"proposalBlocks\",\"offset\":0,\"slot\":\"24\",\"type\":\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_bytes32)16_storage\":{\"encoding\":\"inplace\",\"label\":\"bytes32[16]\",\"numberOfBytes\":\"512\",\"base\":\"t_bytes32\"},\"t_array(t_struct(LargePreimageProposalKeys)1010_storage)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys[]\",\"numberOfBytes\":\"32\",\"base\":\"t_struct(LargePreimageProposalKeys)1010_storage\"},\"t_array(t_uint64)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"uint64[]\",\"numberOfBytes\":\"32\",\"base\":\"t_uint64\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_bytes32)16_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32[16]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_array(t_uint64)dyn_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint64[]))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_uint256))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e uint256))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_uint256)\"},\"t_mapping(t_address,t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1011))\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e mapping(uint256 =\u003e LPPMetaData))\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1011)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bool))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bool))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bool)\"},\"t_mapping(t_bytes32,t_mapping(t_uint256,t_bytes32))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(uint256 =\u003e bytes32))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_uint256,t_bytes32)\"},\"t_mapping(t_bytes32,t_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_array(t_bytes32)16_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bytes32[16])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_bytes32)16_storage\"},\"t_mapping(t_uint256,t_array(t_uint64)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint64[])\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_array(t_uint64)dyn_storage\"},\"t_mapping(t_uint256,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"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_uint256)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e uint256)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_uint256\"},\"t_mapping(t_uint256,t_userDefinedValueType(LPPMetaData)1011)\":{\"encoding\":\"mapping\",\"label\":\"mapping(uint256 =\u003e LPPMetaData)\",\"numberOfBytes\":\"32\",\"key\":\"t_uint256\",\"value\":\"t_userDefinedValueType(LPPMetaData)1011\"},\"t_struct(LargePreimageProposalKeys)1010_storage\":{\"encoding\":\"inplace\",\"label\":\"struct PreimageOracle.LargePreimageProposalKeys\",\"numberOfBytes\":\"64\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_userDefinedValueType(LPPMetaData)1011\":{\"encoding\":\"inplace\",\"label\":\"LPPMetaData\",\"numberOfBytes\":\"32\"}}}"
var PreimageOracleStorageLayout = new(solc.StorageLayout)
var PreimageOracleDeployedBin = "0x608060405234801561001057600080fd5b50600436106101b95760003560e01c80639d53a648116100f9578063dd24f9bf11610097578063ec5efcbc11610071578063ec5efcbc14610476578063f3f480d914610489578063faf37bc7146104af578063fef2b4ed146104c257600080fd5b8063dd24f9bf14610415578063e03110e11461043b578063e15926111461046357600080fd5b8063b4801e61116100d3578063b4801e61146103d4578063b893f82c146103e7578063d18534b5146103fa578063da35c6641461040d57600080fd5b80639d53a648146103545780639d7e876914610396578063b2e67ba8146103a957600080fd5b806361238bde116101665780637ac54767116101405780637ac54767146102c45780638542cf50146102d7578063882856ef146103155780638dc4be111461034157600080fd5b806361238bde1461025b5780636551927b146102865780637917de1d146102b157600080fd5b80633909af5c116101975780633909af5c1461022b5780634d52b4c91461024057806352f0f3ad1461024857600080fd5b8063013cf08b146101be5780630359a563146102025780632055b36b14610223575b600080fd5b6101d16101cc366004612b1a565b6104e2565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b610215610210366004612b5c565b610527565b6040519081526020016101f9565b610215601081565b61023e610239366004612d57565b61065f565b005b6102156108ad565b610215610256366004612e43565b6108c8565b610215610269366004612e7e565b600160209081526000928352604080842090915290825290205481565b610215610294366004612b5c565b601560209081526000928352604080842090915290825290205481565b61023e6102bf366004612ee2565b61099d565b6102156102d2366004612b1a565b610e8d565b6103056102e5366004612e7e565b600260209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101f9565b610328610323366004612f7e565b610ea4565b60405167ffffffffffffffff90911681526020016101f9565b61023e61034f366004612fb1565b610efe565b610215610362366004612b5c565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601760209081526040808320938352929052205490565b61023e6103a4366004612ffd565b610ff9565b6102156103b7366004612b5c565b601660209081526000928352604080842090915290825290205481565b6102156103e2366004612f7e565b61120a565b61023e6103f5366004613089565b61123c565b61023e610408366004612d57565b611363565b601354610215565b7f0000000000000000000000000000000000000000000000000000000000000000610215565b61044e610449366004612e7e565b61171a565b604080519283526020830191909152016101f9565b61023e610471366004612fb1565b61180b565b61023e6104843660046130cb565b611913565b7f0000000000000000000000000000000000000000000000000000000000000000610215565b61023e6104bd366004613164565b611a8d565b6102156104d0366004612b1a565b60006020819052908152604090205481565b601381815481106104f257600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601560209081526040808320848452909152812054819061056a9060601c63ffffffff1690565b63ffffffff16905060005b601081101561065757816001166001036105fd5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106105ca576105ca6131a0565b0154604080516020810192909252810184905260600160405160208183030381529060405280519060200120925061063e565b8260038260108110610611576106116131a0565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c908061064f816131fe565b915050610575565b505092915050565b600061066b8a8a610527565b905061068e86868360208b01356106896106848d613236565b611ca0565b611ce0565b80156106ac57506106ac83838360208801356106896106848a613236565b6106e2576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016106f89190613305565b6040516020818303038152906040528051906020012014610745576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161075b9190613343565b14610792576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107da886107a0868061335b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4192505050565b6107e388611e9c565b8360400135886040516020016107f99190613305565b6040516020818303038152906040528051906020012003610846576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9590951660009081526015602090815260408083209683529590529390932080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550505050565b60016108bb601060026134e2565b6108c591906134ee565b81565b60006108d48686612738565b90506108e1836008613343565b8211806108ee5750602083115b15610925576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b606081156109b6576109af86866127e5565b90506109f0565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610a1d57505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610a9e8260601c63ffffffff1690565b63ffffffff169050333214610adf576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610aef8260801c63ffffffff1690565b63ffffffff16600003610b2e576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b388260c01c90565b67ffffffffffffffff1615610b79576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610bb2576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bbf89898d888661285e565b83516020850160888204881415608883061715610be4576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610c94578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610c89576001821615610c695782818b0152610c89565b8981015160009081526020938452604090209260019290921c9101610c4c565b505050608801610bf1565b50505050600160106002610ca891906134e2565b610cb291906134ee565b811115610ceb576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d60610cfe8360401c63ffffffff1690565b610d0e9063ffffffff168a613343565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610ded5777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610d9a8260801c63ffffffff1690565b63ffffffff16610db08360401c63ffffffff1690565b63ffffffff1614610ded576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610e1390846010612a90565b50503360008181526017602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b60038160108110610e9d57600080fd5b0154905081565b60176020528260005260406000206020528160005260406000208181548110610ecc57600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b604435600080600883018610610f1c5763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa905080610f4957600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f0000000000000000000000000000000000000000000000000000000000000000421015611053576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa8061107b5763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826110fd576309bde3396000526004601cfd5b602886106111135763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b6014602052826000526040600020602052816000526040600020816010811061123257600080fd5b0154925083915050565b7f0000000000000000000000000000000000000000000000000000000000000000421015611296576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff8116156113d6576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006114018260c01c90565b6114159067ffffffffffffffff16426134ee565b1161144c576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114588b8b610527565b905061147187878360208c01356106896106848e613236565b801561148f575061148f84848360208901356106896106848b613236565b6114c5576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760400135896040516020016114db9190613305565b6040516020818303038152906040528051906020012014611528576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84602001358860200135600161153e9190613343565b141580611570575060016115588360601c63ffffffff1690565b6115629190613505565b63ffffffff16856020013514155b156115a7576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115b5896107a0878061335b565b6115be89611e9c565b60006115c98a6129b1565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006116208460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506116f28460801c63ffffffff1690565b60009283526020839052604090922063ffffffff909216909155505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff166117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b50600083815260208181526040909120546117bf816008613343565b6117ca856020613343565b106117e857836117db826008613343565b6117e591906134ee565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106118295763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b600061191f8686610527565b905061193883838360208801356106896106848a613236565b61196e576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840135156119aa576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119b2612ace565b6119c0816107a0878061335b565b6119c981611e9c565b8460400135816040516020016119df9190613305565b6040516020818303038152906040528051906020012003611a2c576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505073ffffffffffffffffffffffffffffffffffffffff9290921660009081526015602090815260408083209383529290522080547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016600117905550565b333214611ac6576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ad181600861352a565b63ffffffff168263ffffffff1610611b15576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611b75576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b9490941790945582518084019093529082529181019283526013805460018101825592525160029091027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9093167fffffffffffffffffffffffff00000000000000000000000000000000000000009093169290921790915590517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09190910155565b6000816000015182602001518360400151604051602001611cc393929190613552565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611d34578060051b880135600186831c1660018114611d195760008481526020839052604090209350611d2a565b600082815260208590526040902093505b5050600101611ce6565b5090931495945050505050565b6088815114611d4f57600080fd5b6020810160208301611dd0565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611dca81611db5868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b611ddc60008383611d5c565b611de860018383611d5c565b611df460028383611d5c565b611e0060038383611d5c565b611e0c60048383611d5c565b611e1860058383611d5c565b611e2460068383611d5c565b611e3060078383611d5c565b611e3c60088383611d5c565b611e4860098383611d5c565b611e54600a8383611d5c565b611e60600b8383611d5c565b611e6c600c8383611d5c565b611e78600d8383611d5c565b611e84600e8383611d5c565b611e90600f8383611d5c565b611dca60108383611d5c565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e00160405160208183030381529060405290506020820160208201612618565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c61204f8660011b67ffffffffffffffff1690565b18188584603f1c61206a8660011b67ffffffffffffffff1690565b18188584603f1c6120858660011b67ffffffffffffffff1690565b181895508483603f1c6120a28560011b67ffffffffffffffff1690565b181894508387603f1c6120bf8960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525050505050565b61243f81611f92565b805160208201805160408401805160608601805160808801805167ffffffffffffffff871986168a188116808c528619851689188216909952831982169095188516909552841988169091188316909152941990921618811690925260a08301805160c0808601805160e0880180516101008a0180516101208c018051861985168a188d16909a528319821686188c16909652801989169092188a169092528619861618881690529219909216909218841690526101408401805161016086018051610180880180516101a08a0180516101c08c0180518619851689188d169099528319821686188c16909652801988169092188a169092528519851618881690529119909116909118841690526101e08401805161020086018051610220880180516102408a0180516102608c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052610280840180516102a0860180516102c0880180516102e08a0180516103008c0180518619851689188d169099528319821686188c16909652801988169092188a16909252851985161888169052911990911690911884169052600386901b850151901c9081189091168252611dca565b61262460008284612436565b61263060018284612436565b61263c60028284612436565b61264860038284612436565b61265460048284612436565b61266060058284612436565b61266c60068284612436565b61267860078284612436565b61268460088284612436565b61269060098284612436565b61269c600a8284612436565b6126a8600b8284612436565b6126b4600c8284612436565b6126c0600d8284612436565b6126cc600e8284612436565b6126d8600f8284612436565b6126e460108284612436565b6126f060118284612436565b6126fc60128284612436565b61270860138284612436565b61271460148284612436565b61272060158284612436565b61272c60168284612436565b611dca60178284612436565b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176127de818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b606060405190508160208201818101828683376088830680801561282e5760888290038501848101848103803687375060806001820353506001845160001a1784538652612845565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b60006128708260a01c63ffffffff1690565b67ffffffffffffffff169050600061288e8360801c63ffffffff1690565b63ffffffff16905060006128a88460401c63ffffffff1690565b63ffffffff1690506008831080156128be575080155b156128f25760c082901b6000908152883560085283513382526016602090815260408084208a8552909152909120556129a7565b6008831015801561291057508061290a6008856134ee565b93508310155b801561292457506129218782613343565b83105b156129a757600061293582856134ee565b905087612943826020613343565b1015801561294f575085155b15612986576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526016602090815260408083208a845290915290209089013590555b5050505050505050565b6000612a34565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff006129e28360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612a0f8360101b67ffffffffffffffff1690565b1617905060008160201c612a2d8360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612a4c906129b8565b6129b8565b6040820151612a5a906129b8565b60401b17612a72612a4760018460059190911b015190565b825160809190911b90612a84906129b8565b60c01b17179392505050565b8260108101928215612abe579160200282015b82811115612abe578251825591602001919060010190612aa3565b50612aca929150612ae6565b5090565b6040518060200160405280612ae1612afb565b905290565b5b80821115612aca5760008155600101612ae7565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612b2c57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612b5757600080fd5b919050565b60008060408385031215612b6f57600080fd5b612b7883612b33565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612bd957612bd9612b86565b60405290565b6040516060810167ffffffffffffffff81118282101715612bd957612bd9612b86565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612c4957612c49612b86565b604052919050565b6000610320808385031215612c6557600080fd5b604051602080820167ffffffffffffffff8382108183111715612c8a57612c8a612b86565b8160405283955087601f880112612ca057600080fd5b612ca8612bb5565b9487019491508188861115612cbc57600080fd5b875b86811015612ce45780358381168114612cd75760008081fd5b8452928401928401612cbe565b50909352509295945050505050565b600060608284031215612d0557600080fd5b50919050565b60008083601f840112612d1d57600080fd5b50813567ffffffffffffffff811115612d3557600080fd5b6020830191508360208260051b8501011115612d5057600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612d7657600080fd5b612d7f8a612b33565b985060208a01359750612d958b60408c01612c51565b96506103608a013567ffffffffffffffff80821115612db357600080fd5b612dbf8d838e01612cf3565b97506103808c0135915080821115612dd657600080fd5b612de28d838e01612d0b565b90975095506103a08c0135915080821115612dfc57600080fd5b612e088d838e01612cf3565b94506103c08c0135915080821115612e1f57600080fd5b50612e2c8c828d01612d0b565b915080935050809150509295985092959850929598565b600080600080600060a08688031215612e5b57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215612e9157600080fd5b50508035926020909101359150565b60008083601f840112612eb257600080fd5b50813567ffffffffffffffff811115612eca57600080fd5b602083019150836020828501011115612d5057600080fd5b600080600080600080600060a0888a031215612efd57600080fd5b8735965060208801359550604088013567ffffffffffffffff80821115612f2357600080fd5b612f2f8b838c01612ea0565b909750955060608a0135915080821115612f4857600080fd5b50612f558a828b01612d0b565b90945092505060808801358015158114612f6e57600080fd5b8091505092959891949750929550565b600080600060608486031215612f9357600080fd5b612f9c84612b33565b95602085013595506040909401359392505050565b600080600060408486031215612fc657600080fd5b83359250602084013567ffffffffffffffff811115612fe457600080fd5b612ff086828701612ea0565b9497909650939450505050565b600080600080600080600060a0888a03121561301857600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561303e57600080fd5b61304a8b838c01612ea0565b909750955060608a013591508082111561306357600080fd5b506130708a828b01612ea0565b989b979a50959894979596608090950135949350505050565b6000806020838503121561309c57600080fd5b823567ffffffffffffffff8111156130b357600080fd5b6130bf85828601612ea0565b90969095509350505050565b6000806000806000608086880312156130e357600080fd5b6130ec86612b33565b945060208601359350604086013567ffffffffffffffff8082111561311057600080fd5b61311c89838a01612cf3565b9450606088013591508082111561313257600080fd5b5061313f88828901612d0b565b969995985093965092949392505050565b803563ffffffff81168114612b5757600080fd5b60008060006060848603121561317957600080fd5b8335925061318960208501613150565b915061319760408501613150565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361322f5761322f6131cf565b5060010190565b60006060823603121561324857600080fd5b613250612bdf565b823567ffffffffffffffff8082111561326857600080fd5b9084019036601f83011261327b57600080fd5b813560208282111561328f5761328f612b86565b6132bf817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612c02565b925081835236818386010111156132d557600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561333a57825167ffffffffffffffff16825260209283019290910190600101613311565b50505092915050565b60008219821115613356576133566131cf565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261339057600080fd5b83018035915067ffffffffffffffff8211156133ab57600080fd5b602001915036819003821315612d5057600080fd5b600181815b8085111561341957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156133ff576133ff6131cf565b8085161561340c57918102915b93841c93908002906133c5565b509250929050565b600082613430575060016134dc565b8161343d575060006134dc565b8160018114613453576002811461345d57613479565b60019150506134dc565b60ff84111561346e5761346e6131cf565b50506001821b6134dc565b5060208310610133831016604e8410600b841016171561349c575081810a6134dc565b6134a683836133c0565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156134d8576134d86131cf565b0290505b92915050565b60006127de8383613421565b600082821015613500576135006131cf565b500390565b600063ffffffff83811690831681811015613522576135226131cf565b039392505050565b600063ffffffff808316818516808303821115613549576135496131cf565b01949350505050565b6000845160005b818110156135735760208188018101518583015201613559565b81811115613582576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
var PreimageOracleDeployedBin = "0x6080604052600436106101c25760003560e01c80639d53a648116100f7578063dd24f9bf11610095578063ec5efcbc11610064578063ec5efcbc146105fe578063f3f480d91461061e578063faf37bc714610651578063fef2b4ed1461066457600080fd5b8063dd24f9bf1461053e578063ddcd58de14610571578063e03110e1146105a9578063e1592611146105de57600080fd5b8063b4801e61116100d1578063b4801e61146104c9578063b893f82c146104e9578063d18534b514610509578063da35c6641461052957600080fd5b80639d53a648146104225780639d7e876914610471578063b2e67ba81461049157600080fd5b80636551927b116101645780637ac547671161013e5780637ac547671461035e5780638542cf501461037e578063882856ef146103c95780638dc4be111461040257600080fd5b80636551927b146102ea5780637051472e146103225780637917de1d1461033e57600080fd5b80633909af5c116101a05780633909af5c1461025b5780634d52b4c91461027d57806352f0f3ad1461029257806361238bde146102b257600080fd5b8063013cf08b146101c75780630359a563146102185780632055b36b14610246575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612d06565b610691565b6040805173ffffffffffffffffffffffffffffffffffffffff90931683526020830191909152015b60405180910390f35b34801561022457600080fd5b50610238610233366004612d48565b6106d6565b60405190815260200161020f565b34801561025257600080fd5b50610238601081565b34801561026757600080fd5b5061027b610276366004612f43565b61080e565b005b34801561028957600080fd5b50610238610a65565b34801561029e57600080fd5b506102386102ad36600461302f565b610a80565b3480156102be57600080fd5b506102386102cd36600461306a565b600160209081526000928352604080842090915290825290205481565b3480156102f657600080fd5b50610238610305366004612d48565b601560209081526000928352604080842090915290825290205481565b34801561032e57600080fd5b506102386703782dace9d9000081565b34801561034a57600080fd5b5061027b6103593660046130ce565b610b55565b34801561036a57600080fd5b50610238610379366004612d06565b611045565b34801561038a57600080fd5b506103b961039936600461306a565b600260209081526000928352604080842090915290825290205460ff1681565b604051901515815260200161020f565b3480156103d557600080fd5b506103e96103e436600461316a565b61105c565b60405167ffffffffffffffff909116815260200161020f565b34801561040e57600080fd5b5061027b61041d36600461319d565b6110b6565b34801561042e57600080fd5b5061023861043d366004612d48565b73ffffffffffffffffffffffffffffffffffffffff9091166000908152601860209081526040808320938352929052205490565b34801561047d57600080fd5b5061027b61048c3660046131e9565b6111b1565b34801561049d57600080fd5b506102386104ac366004612d48565b601760209081526000928352604080842090915290825290205481565b3480156104d557600080fd5b506102386104e436600461316a565b6113c2565b3480156104f557600080fd5b5061027b610504366004613275565b6113f4565b34801561051557600080fd5b5061027b610524366004612f43565b61151b565b34801561053557600080fd5b50601354610238565b34801561054a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b34801561057d57600080fd5b5061023861058c366004612d48565b601660209081526000928352604080842090915290825290205481565b3480156105b557600080fd5b506105c96105c436600461306a565b6118dd565b6040805192835260208301919091520161020f565b3480156105ea57600080fd5b5061027b6105f936600461319d565b6119ce565b34801561060a57600080fd5b5061027b6106193660046132b7565b611ad6565b34801561062a57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610238565b61027b61065f366004613350565b611c5c565b34801561067057600080fd5b5061023861067f366004612d06565b60006020819052908152604090205481565b601381815481106106a157600080fd5b60009182526020909120600290910201805460019091015473ffffffffffffffffffffffffffffffffffffffff909116915082565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260156020908152604080832084845290915281205481906107199060601c63ffffffff1690565b63ffffffff16905060005b601081101561080657816001166001036107ac5773ffffffffffffffffffffffffffffffffffffffff85166000908152601460209081526040808320878452909152902081601081106107795761077961338c565b015460408051602081019290925281018490526060016040516020818303038152906040528051906020012092506107ed565b82600382601081106107c0576107c061338c565b01546040805160208101939093528201526060016040516020818303038152906040528051906020012092505b60019190911c90806107fe816133ea565b915050610724565b505092915050565b600061081a8a8a6106d6565b905061083d86868360208b01356108386108338d613422565b611ec7565b611f07565b801561085b575061085b83838360208801356108386108338a613422565b610891576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660400135886040516020016108a791906134f1565b60405160208183030381529060405280519060200120146108f4576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83602001358760200135600161090a919061352f565b14610941576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109898861094f8680613547565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6892505050565b610992886120c3565b8360400135886040516020016109a891906134f1565b60405160208183030381529060405280519060200120036109f5576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526015602090815260408083208c8452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055610a598a8a3361286b565b50505050505050505050565b6001610a73601060026136ce565b610a7d91906136da565b81565b6000610a8c8686612924565b9050610a9983600861352f565b821180610aa65750602083115b15610add576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602081815260c085901b82526008959095528251828252600286526040808320858452875280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558484528752808320948352938652838220558181529384905292205592915050565b60608115610b6e57610b6786866129d1565b9050610ba8565b85858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050505b3360009081526014602090815260408083208b845290915280822081516102008101928390529160109082845b815481526020019060010190808311610bd557505050505090506000601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008b81526020019081526020016000205490506000610c568260601c63ffffffff1690565b63ffffffff169050333214610c97576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca78260801c63ffffffff1690565b63ffffffff16600003610ce6576040517f87138d5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cf08260c01c90565b67ffffffffffffffff1615610d31576040517f475a253500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b898114610d6a576040517f60f95d5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d7789898d8886612a4a565b83516020850160888204881415608883061715610d9c576307b1daf16000526004601cfd5b60405160c8810160405260005b83811015610e4c578083018051835260208101516020840152604081015160408401526060810151606084015260808101516080840152508460888301526088810460051b8b013560a883015260c882206001860195508560005b610200811015610e41576001821615610e215782818b0152610e41565b8981015160009081526020938452604090209260019290921c9101610e04565b505050608801610da9565b50505050600160106002610e6091906136ce565b610e6a91906136da565b811115610ea3576040517f6229572300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f18610eb68360401c63ffffffff1690565b610ec69063ffffffff168a61352f565b60401b7fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff606084901b167fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8516171790565b91508415610fa55777ffffffffffffffffffffffffffffffffffffffffffffffff82164260c01b179150610f528260801c63ffffffff1690565b63ffffffff16610f688360401c63ffffffff1690565b63ffffffff1614610fa5576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526014602090815260408083208e84529091529020610fcb90846010612c7c565b50503360008181526018602090815260408083208e8452825280832080546001810182559084528284206004820401805460039092166008026101000a67ffffffffffffffff818102199093164390931602919091179055928252601581528282209c82529b909b52909920989098555050505050505050565b6003816010811061105557600080fd5b0154905081565b6018602052826000526040600020602052816000526040600020818154811061108457600080fd5b906000526020600020906004918282040191900660080292509250509054906101000a900467ffffffffffffffff1681565b6044356000806008830186106110d45763fe2549876000526004601cfd5b60c083901b60805260888386823786600882030151915060206000858360025afa90508061110157600080fd5b50600080517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0400000000000000000000000000000000000000000000000000000000000000178082526002602090815260408084208a8552825280842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091558385528252808420998452988152888320939093558152908190529490942055505050565b7f000000000000000000000000000000000000000000000000000000000000000042101561120b576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080603087600037602060006030600060025afa806112335763f91129696000526004601cfd5b6000517effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f010000000000000000000000000000000000000000000000000000000000000017608081815260a08c905260c08b905260308a60e037603088609083013760008060c083600a5afa9250826112b5576309bde3396000526004601cfd5b602886106112cb5763fe2549876000526004601cfd5b6000602882015278200000000000000000000000000000000000000000000000008152600881018b905285810151935060308a8237603081019b909b52505060509098207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f0500000000000000000000000000000000000000000000000000000000000000176000818152600260209081526040808320868452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209583529481528482209a909a559081528089529190912096909655505050505050565b601460205282600052604060002060205281600052604060002081601081106113ea57600080fd5b0154925083915050565b7f000000000000000000000000000000000000000000000000000000000000000042101561144e576040517f299f254900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806080838582378381207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f06000000000000000000000000000000000000000000000000000000000000001792506000808583600a5afa6000848152600260209081526040808320838052825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001908117909155878452808352818420848052835281842060f89590951b909455958252819052939093209290925550505050565b73ffffffffffffffffffffffffffffffffffffffff891660009081526015602090815260408083208b845290915290205467ffffffffffffffff81161561158e576040517fc334f06900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006115b98260c01c90565b6115cd9067ffffffffffffffff16426136da565b11611604576040517f55d4cbf900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116108b8b6106d6565b905061162987878360208c01356108386108338e613422565b8015611647575061164784848360208901356108386108338b613422565b61167d576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87604001358960405160200161169391906134f1565b60405160208183030381529060405280519060200120146116e0576040517f1968a90200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8460200135886020013560016116f6919061352f565b141580611728575060016117108360601c63ffffffff1690565b61171a91906136f1565b63ffffffff16856020013514155b1561175f576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176d8961094f8780613547565b611776896120c3565b60006117818a612b9d565b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f020000000000000000000000000000000000000000000000000000000000000017905060006117d88460a01c63ffffffff1690565b67ffffffffffffffff169050600160026000848152602001908152602001600020600083815260200190815260200160002060006101000a81548160ff021916908315150217905550601760008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008d815260200190815260200160002054600160008481526020019081526020016000206000838152602001908152602001600020819055506118aa8460801c63ffffffff1690565b600083815260208190526040902063ffffffff9190911690556118ce8d8d8161286b565b50505050505050505050505050565b6000828152600260209081526040808320848452909152812054819060ff16611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f7072652d696d616765206d757374206578697374000000000000000000000000604482015260640160405180910390fd5b506000838152602081815260409091205461198281600861352f565b61198d85602061352f565b106119ab578361199e82600861352f565b6119a891906136da565b91505b506000938452600160209081526040808620948652939052919092205492909150565b6044356000806008830186106119ec5763fe2549876000526004601cfd5b60c083901b6080526088838682378087017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80151908490207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f02000000000000000000000000000000000000000000000000000000000000001760008181526002602090815260408083208b8452825280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915584845282528083209a83529981528982209390935590815290819052959095209190915550505050565b6000611ae286866106d6565b9050611afb83838360208801356108386108338a613422565b611b31576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602084013515611b6d576040517f9a3b119900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b75612cba565b611b838161094f8780613547565b611b8c816120c3565b846040013581604051602001611ba291906134f1565b6040516020818303038152906040528051906020012003611bef576040517f9843145b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff87166000908152601560209081526040808320898452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000166001179055611c5387873361286b565b50505050505050565b6703782dace9d90000341015611c9e576040517fe92c469f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333214611cd7576040517fba092d1600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ce2816008613716565b63ffffffff168263ffffffff1610611d26576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008163ffffffff161015611d86576040517f7b1dafd100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000818152601560209081526040808320878452825280832080547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1660a09790971b7fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff169690961760809590951b949094179094558251808401845282815280850186815260138054600181018255908452915160029092027f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0908101805473ffffffffffffffffffffffffffffffffffffffff9094167fffffffffffffffffffffffff000000000000000000000000000000000000000090941693909317909255517f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0919091015590815260168352818120938152929091529020349055565b6000816000015182602001518360400151604051602001611eea9392919061373e565b604051602081830303815290604052805190602001209050919050565b60008160005b6010811015611f5b578060051b880135600186831c1660018114611f405760008481526020839052604090209350611f51565b600082815260208590526040902093505b5050600101611f0d565b5090931495945050505050565b6088815114611f7657600080fd5b6020810160208301611ff7565b8260031b8201518060001a8160011a60081b178160021a60101b8260031a60181b17178160041a60201b8260051a60281b178260061a60301b8360071a60381b1717179050611ff181611fdc868560059190911b015190565b1867ffffffffffffffff16600586901b840152565b50505050565b61200360008383611f83565b61200f60018383611f83565b61201b60028383611f83565b61202760038383611f83565b61203360048383611f83565b61203f60058383611f83565b61204b60068383611f83565b61205760078383611f83565b61206360088383611f83565b61206f60098383611f83565b61207b600a8383611f83565b612087600b8383611f83565b612093600c8383611f83565b61209f600d8383611f83565b6120ab600e8383611f83565b6120b7600f8383611f83565b611ff160108383611f83565b6040805178010000000000008082800000000000808a8000000080008000602082015279808b00000000800000018000000080008081800000000000800991810191909152788a00000000000000880000000080008009000000008000000a60608201527b8000808b800000000000008b8000000000008089800000000000800360808201527f80000000000080028000000000000080000000000000800a800000008000000a60a08201527f800000008000808180000000000080800000000080000001800000008000800860c082015260009060e0016040516020818303038152906040529050602082016020820161274b565b6102808101516101e082015161014083015160a0840151845118189118186102a082015161020083015161016084015160c0850151602086015118189118186102c083015161022084015161018085015160e0860151604087015118189118186102e08401516102408501516101a0860151610100870151606088015118189118186103008501516102608601516101c0870151610120880151608089015118189118188084603f1c6122768660011b67ffffffffffffffff1690565b18188584603f1c6122918660011b67ffffffffffffffff1690565b18188584603f1c6122ac8660011b67ffffffffffffffff1690565b181895508483603f1c6122c98560011b67ffffffffffffffff1690565b181894508387603f1c6122e68960011b67ffffffffffffffff1690565b60208b01518b51861867ffffffffffffffff168c5291189190911897508118600181901b603f9190911c18935060c08801518118601481901c602c9190911b1867ffffffffffffffff1660208901526101208801518718602c81901c60149190911b1867ffffffffffffffff1660c08901526102c08801518618600381901c603d9190911b1867ffffffffffffffff166101208901526101c08801518718601981901c60279190911b1867ffffffffffffffff166102c08901526102808801518218602e81901c60129190911b1867ffffffffffffffff166101c089015260408801518618600281901c603e9190911b1867ffffffffffffffff166102808901526101808801518618601581901c602b9190911b1867ffffffffffffffff1660408901526101a08801518518602781901c60199190911b1867ffffffffffffffff166101808901526102608801518718603881901c60089190911b1867ffffffffffffffff166101a08901526102e08801518518600881901c60389190911b1867ffffffffffffffff166102608901526101e08801518218601781901c60299190911b1867ffffffffffffffff166102e089015260808801518718602581901c601b9190911b1867ffffffffffffffff166101e08901526103008801518718603281901c600e9190911b1867ffffffffffffffff1660808901526102a08801518118603e81901c60029190911b1867ffffffffffffffff166103008901526101008801518518600981901c60379190911b1867ffffffffffffffff166102a08901526102008801518118601381901c602d9190911b1867ffffffffffffffff1661010089015260a08801518218601c81901c60249190911b1867ffffffffffffffff1661020089015260608801518518602481901c601c9190911b1867ffffffffffffffff1660a08901526102408801518518602b81901c60159190911b1867ffffffffffffffff1660608901526102208801518618603181901c600f9190911b1867ffffffffffffffff166102408901526101608801518118603681901c600a9190911b1867ffffffffffffffff166102208901525060e08701518518603a81901c60069190911b1867ffffffffffffffff166101608801526101408701518118603d81901c60039190911b1867ffffffffffffffff1660e0880152505067ffffffffffffffff81166101408601525b5050505050565b600582811b8201805160018501831b8401805160028701851b8601805160038901871b8801805160048b0190981b8901805167ffffffffffffffff861985168918811690995283198a16861889169096528819861683188816909352841986168818871690528419831684189095169052919391929190611c53565b6126e560008261265e565b6126f060058261265e565b6126fb600a8261265e565b612706600f8261265e565b61271160148261265e565b50565b61271d816121b9565b612726816126da565b600383901b820151815160c09190911c90611ff190821867ffffffffffffffff168352565b61275760008284612714565b61276360018284612714565b61276f60028284612714565b61277b60038284612714565b61278760048284612714565b61279360058284612714565b61279f60068284612714565b6127ab60078284612714565b6127b760088284612714565b6127c360098284612714565b6127cf600a8284612714565b6127db600b8284612714565b6127e7600c8284612714565b6127f3600d8284612714565b6127ff600e8284612714565b61280b600f8284612714565b61281760108284612714565b61282360118284612714565b61282f60128284612714565b61283b60138284612714565b61284760148284612714565b61285360158284612714565b61285f60168284612714565b611ff160178284612714565b73ffffffffffffffffffffffffffffffffffffffff83811660009081526016602090815260408083208684529091528082208054908390559051909284169083908381818185875af1925050503d80600081146128e4576040519150601f19603f3d011682016040523d82523d6000602084013e6128e9565b606091505b5050905080612657576040517f83e6cc6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316176129ca818360408051600093845233602052918152606090922091527effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01000000000000000000000000000000000000000000000000000000000000001790565b9392505050565b6060604051905081602082018181018286833760888306808015612a1a5760888290038501848101848103803687375060806001820353506001845160001a1784538652612a31565b608836843760018353608060878401536088850186525b5050505050601f19603f82510116810160405292915050565b6000612a5c8260a01c63ffffffff1690565b67ffffffffffffffff1690506000612a7a8360801c63ffffffff1690565b63ffffffff1690506000612a948460401c63ffffffff1690565b63ffffffff169050600883108015612aaa575080155b15612ade5760c082901b6000908152883560085283513382526017602090815260408084208a855290915290912055612b93565b60088310158015612afc575080612af66008856136da565b93508310155b8015612b105750612b0d878261352f565b83105b15612b93576000612b2182856136da565b905087612b2f82602061352f565b10158015612b3b575085155b15612b72576040517ffe25498700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360009081526017602090815260408083208a845290915290209089013590555b5050505050505050565b6000612c20565b66ff00ff00ff00ff8160081c1667ff00ff00ff00ff00612bce8360081b67ffffffffffffffff1690565b1617905065ffff0000ffff8160101c1667ffff0000ffff0000612bfb8360101b67ffffffffffffffff1690565b1617905060008160201c612c198360201b67ffffffffffffffff1690565b1792915050565b60808201516020830190612c3890612ba4565b612ba4565b6040820151612c4690612ba4565b60401b17612c5e612c3360018460059190911b015190565b825160809190911b90612c7090612ba4565b60c01b17179392505050565b8260108101928215612caa579160200282015b82811115612caa578251825591602001919060010190612c8f565b50612cb6929150612cd2565b5090565b6040518060200160405280612ccd612ce7565b905290565b5b80821115612cb65760008155600101612cd3565b6040518061032001604052806019906020820280368337509192915050565b600060208284031215612d1857600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114612d4357600080fd5b919050565b60008060408385031215612d5b57600080fd5b612d6483612d1f565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610320810167ffffffffffffffff81118282101715612dc557612dc5612d72565b60405290565b6040516060810167ffffffffffffffff81118282101715612dc557612dc5612d72565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612e3557612e35612d72565b604052919050565b6000610320808385031215612e5157600080fd5b604051602080820167ffffffffffffffff8382108183111715612e7657612e76612d72565b8160405283955087601f880112612e8c57600080fd5b612e94612da1565b9487019491508188861115612ea857600080fd5b875b86811015612ed05780358381168114612ec35760008081fd5b8452928401928401612eaa565b50909352509295945050505050565b600060608284031215612ef157600080fd5b50919050565b60008083601f840112612f0957600080fd5b50813567ffffffffffffffff811115612f2157600080fd5b6020830191508360208260051b8501011115612f3c57600080fd5b9250929050565b60008060008060008060008060006103e08a8c031215612f6257600080fd5b612f6b8a612d1f565b985060208a01359750612f818b60408c01612e3d565b96506103608a013567ffffffffffffffff80821115612f9f57600080fd5b612fab8d838e01612edf565b97506103808c0135915080821115612fc257600080fd5b612fce8d838e01612ef7565b90975095506103a08c0135915080821115612fe857600080fd5b612ff48d838e01612edf565b94506103c08c013591508082111561300b57600080fd5b506130188c828d01612ef7565b915080935050809150509295985092959850929598565b600080600080600060a0868803121561304757600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000806040838503121561307d57600080fd5b50508035926020909101359150565b60008083601f84011261309e57600080fd5b50813567ffffffffffffffff8111156130b657600080fd5b602083019150836020828501011115612f3c57600080fd5b600080600080600080600060a0888a0312156130e957600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561310f57600080fd5b61311b8b838c0161308c565b909750955060608a013591508082111561313457600080fd5b506131418a828b01612ef7565b9094509250506080880135801515811461315a57600080fd5b8091505092959891949750929550565b60008060006060848603121561317f57600080fd5b61318884612d1f565b95602085013595506040909401359392505050565b6000806000604084860312156131b257600080fd5b83359250602084013567ffffffffffffffff8111156131d057600080fd5b6131dc8682870161308c565b9497909650939450505050565b600080600080600080600060a0888a03121561320457600080fd5b8735965060208801359550604088013567ffffffffffffffff8082111561322a57600080fd5b6132368b838c0161308c565b909750955060608a013591508082111561324f57600080fd5b5061325c8a828b0161308c565b989b979a50959894979596608090950135949350505050565b6000806020838503121561328857600080fd5b823567ffffffffffffffff81111561329f57600080fd5b6132ab8582860161308c565b90969095509350505050565b6000806000806000608086880312156132cf57600080fd5b6132d886612d1f565b945060208601359350604086013567ffffffffffffffff808211156132fc57600080fd5b61330889838a01612edf565b9450606088013591508082111561331e57600080fd5b5061332b88828901612ef7565b969995985093965092949392505050565b803563ffffffff81168114612d4357600080fd5b60008060006060848603121561336557600080fd5b833592506133756020850161333c565b91506133836040850161333c565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361341b5761341b6133bb565b5060010190565b60006060823603121561343457600080fd5b61343c612dcb565b823567ffffffffffffffff8082111561345457600080fd5b9084019036601f83011261346757600080fd5b813560208282111561347b5761347b612d72565b6134ab817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85011601612dee565b925081835236818386010111156134c157600080fd5b81818501828501376000918301810191909152908352848101359083015250604092830135928101929092525090565b81516103208201908260005b601981101561352657825167ffffffffffffffff168252602092830192909101906001016134fd565b50505092915050565b60008219821115613542576135426133bb565b500190565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261357c57600080fd5b83018035915067ffffffffffffffff82111561359757600080fd5b602001915036819003821315612f3c57600080fd5b600181815b8085111561360557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156135eb576135eb6133bb565b808516156135f857918102915b93841c93908002906135b1565b509250929050565b60008261361c575060016136c8565b81613629575060006136c8565b816001811461363f576002811461364957613665565b60019150506136c8565b60ff84111561365a5761365a6133bb565b50506001821b6136c8565b5060208310610133831016604e8410600b8410161715613688575081810a6136c8565b61369283836135ac565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156136c4576136c46133bb565b0290505b92915050565b60006129ca838361360d565b6000828210156136ec576136ec6133bb565b500390565b600063ffffffff8381169083168181101561370e5761370e6133bb565b039392505050565b600063ffffffff808316818516808303821115613735576137356133bb565b01949350505050565b6000845160005b8181101561375f5760208188018101518583015201613745565b8181111561376e576000828501525b509190910192835250602082015260400191905056fea164736f6c634300080f000a"
func init() {
......
......@@ -38,6 +38,7 @@ const (
methodChallengeLPP = "challengeLPP"
methodChallengePeriod = "challengePeriod"
methodGetTreeRootLPP = "getTreeRootLPP"
methodMinBondSizeLPP = "MIN_BOND_SIZE"
)
var (
......@@ -55,6 +56,9 @@ type PreimageOracleContract struct {
// challengePeriod caches the challenge period from the contract once it has been loaded.
// 0 indicates the period has not been loaded yet.
challengePeriod atomic.Uint64
// minBondSizeLPP caches the minimum bond size for large preimages from the contract once it has been loaded.
// 0 indicates the value has not been loaded yet.
minBondSizeLPP atomic.Uint64
}
// toPreimageOracleLeaf converts a Leaf to the contract [bindings.PreimageOracleLeaf] type.
......@@ -318,6 +322,19 @@ func (c *PreimageOracleContract) ChallengeTx(ident keccakTypes.LargePreimageIden
return call.ToTxCandidate()
}
func (c *PreimageOracleContract) GetMinBondLPP(ctx context.Context) (*big.Int, error) {
if bondSize := c.minBondSizeLPP.Load(); bondSize != 0 {
return big.NewInt(int64(bondSize)), nil
}
result, err := c.multiCaller.SingleCall(ctx, batching.BlockLatest, c.contract.Call(methodMinBondSizeLPP))
if err != nil {
return nil, fmt.Errorf("failed to fetch min bond size for LPPs: %w", err)
}
period := result.GetBigInt(0)
c.minBondSizeLPP.Store(period.Uint64())
return period, nil
}
func (c *PreimageOracleContract) decodePreimageIdent(result *batching.CallResult) keccakTypes.LargePreimageIdent {
return keccakTypes.LargePreimageIdent{
Claimant: result.GetAddress(0),
......
......@@ -113,6 +113,23 @@ func TestPreimageOracleContract_MinLargePreimageSize(t *testing.T) {
require.Equal(t, uint64(123), minProposalSize)
}
func TestPreimageOracleContract_MinBondSizeLPP(t *testing.T) {
stubRpc, oracle := setupPreimageOracleTest(t)
stubRpc.SetResponse(oracleAddr, methodMinBondSizeLPP, batching.BlockLatest,
[]interface{}{},
[]interface{}{big.NewInt(123)},
)
minBond, err := oracle.GetMinBondLPP(context.Background())
require.NoError(t, err)
require.Equal(t, big.NewInt(123), minBond)
// Should cache responses
stubRpc.ClearResponses(methodMinBondSizeLPP)
minBond, err = oracle.GetMinBondLPP(context.Background())
require.NoError(t, err)
require.Equal(t, big.NewInt(123), minBond)
}
func TestPreimageOracleContract_PreimageDataExists(t *testing.T) {
t.Run("exists", func(t *testing.T) {
stubRpc, oracle := setupPreimageOracleTest(t)
......@@ -332,7 +349,6 @@ func setupPreimageOracleTestWithProposals(t *testing.T, block batching.Block) (*
}
return stubRpc, oracle, proposals
}
func setupPreimageOracleTest(t *testing.T) (*batchingTest.AbiBasedRpc, *PreimageOracleContract) {
......
......@@ -165,6 +165,11 @@ func (p *LargePreimageUploader) initLargePreimage(uuid *big.Int, partOffset uint
if err != nil {
return fmt.Errorf("failed to create pre-image oracle tx: %w", err)
}
bond, err := p.contract.GetMinBondLPP(context.Background())
if err != nil {
return fmt.Errorf("failed to get min bond for large preimage proposal: %w", err)
}
candidate.Value = bond
if _, err := p.txSender.SendAndWait("init large preimage", candidate); err != nil {
return fmt.Errorf("failed to populate pre-image oracle: %w", err)
}
......
......@@ -338,6 +338,11 @@ func (s *mockPreimageOracleContract) GetProposalMetadata(_ context.Context, _ ba
s.squeezeCallClaimSize = 1
return []keccakTypes.LargePreimageMetaData{{LargePreimageIdent: idents[0]}}, nil
}
func (s *mockPreimageOracleContract) GetMinBondLPP(_ context.Context) (*big.Int, error) {
return big.NewInt(0), nil
}
func (s *mockPreimageOracleContract) CallSqueeze(_ context.Context, _ common.Address, _ *big.Int, _ keccakTypes.StateSnapshot, _ keccakTypes.Leaf, _ merkle.Proof, _ keccakTypes.Leaf, _ merkle.Proof) error {
if s.squeezeCallFails {
return mockSqueezeCallError
......
......@@ -29,4 +29,5 @@ type PreimageOracleContract interface {
CallSqueeze(ctx context.Context, claimant common.Address, uuid *big.Int, prestateMatrix keccakTypes.StateSnapshot, preState keccakTypes.Leaf, preStateProof merkle.Proof, postState keccakTypes.Leaf, postStateProof merkle.Proof) error
GetProposalMetadata(ctx context.Context, block batching.Block, idents ...keccakTypes.LargePreimageIdent) ([]keccakTypes.LargePreimageMetaData, error)
ChallengePeriod(ctx context.Context) (uint64, error)
GetMinBondLPP(ctx context.Context) (*big.Int, error)
}
......@@ -82,10 +82,15 @@ func (h *Helper) UploadLargePreimage(ctx context.Context, dataSize int, modifier
data := testutils.RandomData(rand.New(rand.NewSource(1234)), dataSize)
s := matrix.NewStateMatrix()
uuid := big.NewInt(h.uuidProvider.Add(1))
bondValue, err := h.oracleBindings.MINBONDSIZE(&bind.CallOpts{})
h.require.NoError(err)
h.opts.Value = bondValue
tx, err := h.oracleBindings.InitLPP(h.opts, uuid, 32, uint32(len(data)))
h.require.NoError(err)
_, err = wait.ForReceiptOK(ctx, h.client, tx.Hash())
h.require.NoError(err)
h.opts.Value = big.NewInt(0)
startBlock := big.NewInt(0)
totalBlocks := len(data) / types.BlockSize
in := bytes.NewReader(data)
......@@ -111,6 +116,7 @@ func (h *Helper) UploadLargePreimage(ctx context.Context, dataSize int, modifier
break
}
}
return types.LargePreimageIdent{
Claimant: h.opts.From,
UUID: uuid,
......
......@@ -46,6 +46,19 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "MIN_BOND_SIZE",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
......@@ -265,7 +278,7 @@
],
"name": "initLPP",
"outputs": [],
"stateMutability": "nonpayable",
"stateMutability": "payable",
"type": "function"
},
{
......@@ -522,6 +535,30 @@
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "proposalBonds",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
......@@ -783,11 +820,21 @@
"name": "BadProposal",
"type": "error"
},
{
"inputs": [],
"name": "BondTransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "CancunNotActive",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientBond",
"type": "error"
},
{
"inputs": [],
"name": "InvalidInputSize",
......
......@@ -50,16 +50,23 @@
},
{
"bytes": "32",
"label": "proposalParts",
"label": "proposalBonds",
"offset": 0,
"slot": "22",
"type": "mapping(address => mapping(uint256 => uint256))"
},
{
"bytes": "32",
"label": "proposalParts",
"offset": 0,
"slot": "23",
"type": "mapping(address => mapping(uint256 => bytes32))"
},
{
"bytes": "32",
"label": "proposalBlocks",
"offset": 0,
"slot": "23",
"slot": "24",
"type": "mapping(address => mapping(uint256 => uint64[]))"
}
]
\ No newline at end of file
......@@ -23,6 +23,8 @@ contract PreimageOracle is IPreimageOracle {
uint256 internal immutable CHALLENGE_PERIOD;
/// @notice The minimum size of a preimage that can be proposed in the large preimage path.
uint256 internal immutable MIN_LPP_SIZE_BYTES;
/// @notice The minimum bond size for large preimage proposals.
uint256 public constant MIN_BOND_SIZE = 0.25 ether;
/// @notice The depth of the keccak256 merkle tree. Supports up to 65,536 keccak blocks, or ~8.91MB preimages.
uint256 public constant KECCAK_TREE_DEPTH = 16;
/// @notice The maximum number of keccak blocks that can fit into the merkle tree.
......@@ -71,6 +73,8 @@ contract PreimageOracle is IPreimageOracle {
/// @notice Mapping of claimants to proposal UUIDs to the timestamp of creation of the proposal as well as the
/// challenged status.
mapping(address => mapping(uint256 => LPPMetaData)) public proposalMetadata;
/// @notice Mapping of claimants to proposal UUIDs to bond amounts.
mapping(address => mapping(uint256 => uint256)) public proposalBonds;
/// @notice Mapping of claimants to proposal UUIDs to the preimage part picked up during the absorbtion process.
mapping(address => mapping(uint256 => bytes32)) public proposalParts;
/// @notice Mapping of claimants to proposal UUIDs to blocks which leaves were added to the merkle tree.
......@@ -394,8 +398,11 @@ contract PreimageOracle is IPreimageOracle {
}
/// @notice Initialize a large preimage proposal. Must be called before adding any leaves.
function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) external {
// The caller of `addLeavesLPP` must be an EOA.
function initLPP(uint256 _uuid, uint32 _partOffset, uint32 _claimedSize) external payable {
// The bond provided must be at least `MIN_BOND_SIZE`.
if (msg.value < MIN_BOND_SIZE) revert InsufficientBond();
// The caller of `addLeavesLPP` must be an EOA, so that the call inputs are always available in block bodies.
if (msg.sender != tx.origin) revert NotEOA();
// The part offset must be within the bounds of the claimed size + 8.
......@@ -404,9 +411,13 @@ contract PreimageOracle is IPreimageOracle {
// The claimed size must be at least `MIN_LPP_SIZE_BYTES`.
if (_claimedSize < MIN_LPP_SIZE_BYTES) revert InvalidInputSize();
// Initialize the proposal metadata.
LPPMetaData metaData = proposalMetadata[msg.sender][_uuid];
proposalMetadata[msg.sender][_uuid] = metaData.setPartOffset(_partOffset).setClaimedSize(_claimedSize);
proposals.push(LargePreimageProposalKeys(msg.sender, _uuid));
// Assign the bond to the proposal.
proposalBonds[msg.sender][_uuid] = msg.value;
}
/// @notice Adds a contiguous list of keccak state matrices to the merkle tree.
......@@ -563,6 +574,9 @@ contract PreimageOracle is IPreimageOracle {
// Mark the keccak claim as countered.
proposalMetadata[_claimant][_uuid] = proposalMetadata[_claimant][_uuid].setCountered(true);
// Pay out the bond to the challenger.
_payoutBond(_claimant, _uuid, msg.sender);
}
/// @notice Challenge the first keccak256 block that was absorbed.
......@@ -591,6 +605,9 @@ contract PreimageOracle is IPreimageOracle {
// Mark the keccak claim as countered.
proposalMetadata[_claimant][_uuid] = proposalMetadata[_claimant][_uuid].setCountered(true);
// Pay out the bond to the challenger.
_payoutBond(_claimant, _uuid, msg.sender);
}
/// @notice Finalize a large preimage proposal after the challenge period has passed.
......@@ -644,6 +661,9 @@ contract PreimageOracle is IPreimageOracle {
preimagePartOk[finalDigest][partOffset] = true;
preimageParts[finalDigest][partOffset] = proposalParts[_claimant][_uuid];
preimageLengths[finalDigest] = metaData.claimedSize();
// Pay out the bond to the claimant.
_payoutBond(_claimant, _uuid, _claimant);
}
/// @notice Gets the current merkle root of the large preimage proposal tree.
......@@ -705,7 +725,7 @@ contract PreimageOracle is IPreimageOracle {
}
}
/// Check if leaf` at `index` verifies against the Merkle `root` and `branch`.
/// @notice Check if leaf` at `index` verifies against the Merkle `root` and `branch`.
/// https://github.com/ethereum/consensus-specs/blob/dev/specs/phase0/beacon-chain.md#is_valid_merkle_branch
function _verify(
bytes32[] calldata _proof,
......@@ -738,6 +758,15 @@ contract PreimageOracle is IPreimageOracle {
}
}
/// @notice Pay out a proposal's bond. Reverts if the transfer fails.
function _payoutBond(address _claimant, uint256 _uuid, address _to) internal {
// Pay out the bond to the claimant.
uint256 bond = proposalBonds[_claimant][_uuid];
proposalBonds[_claimant][_uuid] = 0;
(bool success,) = _to.call{ value: bond }("");
if (!success) revert BondTransferFailed();
}
/// @notice Hashes leaf data for the preimage proposals tree
function _hashLeaf(Leaf memory _leaf) internal pure returns (bytes32 leaf_) {
leaf_ = keccak256(abi.encodePacked(_leaf.input, _leaf.index, _leaf.stateCommitment));
......
......@@ -42,3 +42,9 @@ error NotEOA();
/// @notice Thrown when a function that requires Cancun EVM features is called on at a time where Cancun is not enabled.
error CancunNotActive();
/// @notice Thrown when an insufficient bond is provided for a large preimage proposal.
error InsufficientBond();
/// @notice Thrown when a bond transfer fails.
error BondTransferFailed();
......@@ -191,6 +191,9 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Set `tx.origin` and `msg.sender` to `address(this)` so that it may behave like an EOA for `addLeavesLPP`.
vm.startPrank(address(this), address(this));
// Give this address some ETH to work with.
vm.deal(address(this), 100 ether);
}
/// @notice Tests that the `initLPP` function reverts when the part offset is out of bounds of the full preimage.
......@@ -202,8 +205,9 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
uint256 bondSize = oracle.MIN_BOND_SIZE();
vm.expectRevert(PartOffsetOOB.selector);
oracle.initLPP(TEST_UUID, 136 + 8, uint32(data.length));
oracle.initLPP{ value: bondSize }(TEST_UUID, 136 + 8, uint32(data.length));
}
/// @notice Tests that the `initLPP` function reverts when the part offset is out of bounds of the full preimage.
......@@ -218,8 +222,9 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
uint256 bondSize = oracle.MIN_BOND_SIZE();
vm.expectRevert(InvalidInputSize.selector);
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: bondSize }(TEST_UUID, 0, uint32(data.length));
}
/// @notice Gas snapshot for `addLeaves`
......@@ -231,7 +236,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -260,7 +265,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length + 1));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length + 1));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -276,7 +281,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory data = new bytes(136 * 500);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -296,7 +301,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory data = new bytes(136 * 500);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -316,7 +321,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Ensure that the proposal keys are present in the array.
(address claimant, uint256 uuid) = oracle.proposals(0);
assertEq(oracle.proposalCount(), 1);
......@@ -396,7 +401,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -421,6 +426,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
vm.warp(block.timestamp + oracle.challengePeriod() + 1 seconds);
// Finalize the proposal.
uint256 balanceBefore = address(this).balance;
oracle.squeezeLPP({
_claimant: address(this),
_uuid: TEST_UUID,
......@@ -430,6 +436,8 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
_postState: leaves[1],
_postStateProof: postProof
});
assertEq(address(this).balance, balanceBefore + oracle.MIN_BOND_SIZE());
assertEq(oracle.proposalBonds(address(this), TEST_UUID), 0);
bytes32 finalDigest = _setStatusByte(keccak256(data), 2);
bytes32 expectedPart = bytes32((~uint256(0) & ~(uint256(type(uint64).max) << 192)) | (data.length << 192));
......@@ -448,7 +456,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory phonyData = new bytes(136);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -507,7 +515,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -540,7 +548,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Construct the leaf preimage data for the blocks added.
LibKeccak.StateMatrix memory matrix;
......@@ -568,7 +576,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -614,7 +622,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree (2 keccak blocks.)
LibKeccak.StateMatrix memory stateMatrix;
......@@ -666,7 +674,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
// Propose and squeeze a large preimage.
{
// Initialize the proposal.
oracle.initLPP(TEST_UUID, _partOffset, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, _partOffset, uint32(data.length));
// Add the leaves to the tree with correct state commitments.
LibKeccak.StateMatrix memory matrixA;
......@@ -733,7 +741,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -773,7 +781,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory phonyData = new bytes(136);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -813,7 +821,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory phonyData = new bytes(136);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -834,12 +842,15 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Should succeed since the commitment was wrong.
uint256 balanceBefore = address(this).balance;
oracle.challengeFirstLPP({
_claimant: address(this),
_uuid: TEST_UUID,
_postState: leaves[0],
_postStateProof: p
});
assertEq(address(this).balance, balanceBefore + oracle.MIN_BOND_SIZE());
assertEq(oracle.proposalBonds(address(this), TEST_UUID), 0);
LPPMetaData metaData = oracle.proposalMetadata(address(this), TEST_UUID);
assertTrue(metaData.countered());
......@@ -855,7 +866,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory data = new bytes(136 * _numBlocks);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with corrupted state commitments.
LibKeccak.StateMatrix memory matrixA;
......@@ -906,7 +917,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
bytes memory data = new bytes(136 * _numBlocks);
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with corrupted state commitments.
bytes32[] memory stateCommitments = new bytes32[](_numBlocks + 1);
......@@ -947,7 +958,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -999,7 +1010,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -1053,7 +1064,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -1107,7 +1118,7 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
}
// Initialize the proposal.
oracle.initLPP(TEST_UUID, 0, uint32(data.length));
oracle.initLPP{ value: oracle.MIN_BOND_SIZE() }(TEST_UUID, 0, uint32(data.length));
// Add the leaves to the tree with mismatching state commitments.
LibKeccak.StateMatrix memory stateMatrix;
......@@ -1134,8 +1145,8 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
postProof[i] = zeroHash;
}
uint256 balanceBefore = address(this).balance;
LibKeccak.StateMatrix memory preMatrix = _stateMatrixAtBlockIndex(data, 1);
oracle.challengeLPP({
_claimant: address(this),
_uuid: TEST_UUID,
......@@ -1145,6 +1156,8 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
_postState: leaves[1],
_postStateProof: postProof
});
assertEq(address(this).balance, balanceBefore + oracle.MIN_BOND_SIZE());
assertEq(oracle.proposalBonds(address(this), TEST_UUID), 0);
LPPMetaData metaData = oracle.proposalMetadata(address(this), TEST_UUID);
assertTrue(metaData.countered());
......@@ -1243,6 +1256,10 @@ contract PreimageOracle_LargePreimageProposals_Test is Test {
commands[4] = vm.toString(_leafIdx);
(root_, proof_) = abi.decode(vm.ffi(commands), (bytes32, bytes32[]));
}
fallback() external payable { }
receive() external payable { }
}
/// @notice Sets the status byte of a hash.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment