Commit 25876600 authored by clabby's avatar clabby

`FaultDisputeGame` `loadLocalData` func

parent f43e8cd4
...@@ -30,8 +30,8 @@ var ( ...@@ -30,8 +30,8 @@ var (
// FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract. // FaultDisputeGameMetaData contains all meta data concerning the FaultDisputeGame contract.
var FaultDisputeGameMetaData = &bind.MetaData{ var FaultDisputeGameMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"createdAt_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameStart\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", ABI: "[{\"inputs\":[{\"internalType\":\"Claim\",\"name\":\"_absolutePrestate\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_maxGameDepth\",\"type\":\"uint256\"},{\"internalType\":\"Duration\",\"name\":\"_gameDuration\",\"type\":\"uint64\"},{\"internalType\":\"contractIBigStepper\",\"name\":\"_vm\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CannotDefendRootClaim\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClaimAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockNotExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClockTimeExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameDepthExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GameNotInProgress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPrestate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidStep\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"parentIndex\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"claimant\",\"type\":\"address\"}],\"name\":\"Move\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enumGameStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"Resolved\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ABSOLUTE_PRESTATE\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"GAME_DURATION\",\"outputs\":[{\"internalType\":\"Duration\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_GAME_DEPTH\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VM\",\"outputs\":[{\"internalType\":\"contractIBigStepper\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_ident\",\"type\":\"uint256\"}],\"name\":\"addLocalData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"attack\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"bondManager\",\"outputs\":[{\"internalType\":\"contractIBondManager\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"claimData\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"parentIndex\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"countered\",\"type\":\"bool\"},{\"internalType\":\"Claim\",\"name\":\"claim\",\"type\":\"bytes32\"},{\"internalType\":\"Position\",\"name\":\"position\",\"type\":\"uint128\"},{\"internalType\":\"Clock\",\"name\":\"clock\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimDataLen\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"len_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createdAt\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"createdAt_\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_parentIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"}],\"name\":\"defend\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"extraData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameData\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"},{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"extraData_\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameStart\",\"outputs\":[{\"internalType\":\"Timestamp\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gameType\",\"outputs\":[{\"internalType\":\"GameType\",\"name\":\"gameType_\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1Head\",\"outputs\":[{\"internalType\":\"Hash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2BlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"l2BlockNumber_\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_challengeIndex\",\"type\":\"uint256\"},{\"internalType\":\"Claim\",\"name\":\"_claim\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"}],\"name\":\"move\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resolve\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"status_\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rootClaim\",\"outputs\":[{\"internalType\":\"Claim\",\"name\":\"rootClaim_\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"status\",\"outputs\":[{\"internalType\":\"enumGameStatus\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_claimIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"_isAttack\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_stateData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"_proof\",\"type\":\"bytes\"}],\"name\":\"step\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
Bin: "0x6101606040523480156200001257600080fd5b506040516200230938038062002309833981016040819052620000359162000071565b6000608081905260a052600360c05260e093909352610100919091526001600160401b0316610120526001600160a01b031661014052620000d8565b600080600080608085870312156200008857600080fd5b84516020860151604087015191955093506001600160401b0381168114620000af57600080fd5b60608601519092506001600160a01b0381168114620000cd57600080fd5b939692955090935050565b60805160a05160c05160e0516101005161012051610140516121a562000164600039600081816103d601526114ca015260008181610463015281816107710152610dc20152600081816102d80152818161067901528181610c0101526112ce0152600081816101d30152611408015260006109e9015260006109c00152600061099701526121a56000f3fe6080604052600436106101805760003560e01c80638129fc1c116100d6578063c31b29ce1161007f578063cf09e0d011610059578063cf09e0d0146104fc578063d8cc1a3c1461051b578063fa24f7431461053b57600080fd5b8063c31b29ce14610451578063c55cd0c714610485578063c6f0308c1461049857600080fd5b806392931298116100b057806392931298146103c4578063bbdc02db146103f8578063bcef3b551461041457600080fd5b80638129fc1c1461035a5780638980e0cc1461036f5780638b85902b1461038457600080fd5b8063363cc42711610138578063609d333411610112578063609d33341461031c578063632247ea146103315780636361506d1461034457600080fd5b8063363cc427146102675780634778efe8146102c657806354fd4d50146102fa57600080fd5b80632810e1d6116101695780632810e1d6146102035780633218b99d1461021857806335fef5671461025257600080fd5b8063200d2ed214610185578063266198f9146101c1575b600080fd5b34801561019157600080fd5b506000546101ab9068010000000000000000900460ff1681565b6040516101b89190611c2e565b60405180910390f35b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101b8565b34801561020f57600080fd5b506101ab61055f565b34801561022457600080fd5b506000546102399067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b8565b610265610260366004611c6f565b610980565b005b34801561027357600080fd5b506000546102a1906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b8565b3480156102d257600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561030657600080fd5b5061030f610990565b6040516101b89190611d0b565b34801561032857600080fd5b5061030f610a33565b61026561033f366004611d3a565b610a45565b34801561035057600080fd5b506101f560015481565b34801561036657600080fd5b50610265611061565b34801561037b57600080fd5b506002546101f5565b34801561039057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101f5565b3480156103d057600080fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561040457600080fd5b50604051600081526020016101b8565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101f5565b34801561045d57600080fd5b506102397f000000000000000000000000000000000000000000000000000000000000000081565b610265610493366004611c6f565b6111a8565b3480156104a457600080fd5b506104b86104b3366004611d6f565b6111b4565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101b8565b34801561050857600080fd5b5060005467ffffffffffffffff16610239565b34801561052757600080fd5b50610265610536366004611dd1565b611225565b34801561054757600080fd5b50610550611749565b6040516101b893929190611e5b565b60008060005468010000000000000000900460ff16600281111561058557610585611bff565b146105bc576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906105ce90600190611eb5565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156106b85760006002828154811061060857610608611ecc565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561065957506105e3565b600281015460009061069d906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611787565b9050838110156106b1578093508260010194505b50506105e3565b506000600283815481106106ce576106ce611ecc565b600091825260208220600390910201805490925063ffffffff90811691908214610738576002828154811061070557610705611ecc565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610764565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166107a867ffffffffffffffff831642611eb5565b6107c4836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166107d89190611efb565b1161080f576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002838101546108b1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6108bb9190611f42565b67ffffffffffffffff161580156108e257506fffffffffffffffffffffffffffffffff8414155b156108f057600295506108f5565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000083600281111561093a5761093a611bff565b02179055600281111561094f5761094f611bff565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b61098c82826000610a45565b5050565b60606109bb7f000000000000000000000000000000000000000000000000000000000000000061183c565b6109e47f000000000000000000000000000000000000000000000000000000000000000061183c565b610a0d7f000000000000000000000000000000000000000000000000000000000000000061183c565b604051602001610a1f93929190611f69565b604051602081830303815290604052905090565b6060610a40602080611979565b905090565b6000805468010000000000000000900460ff166002811115610a6957610a69611bff565b14610aa0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610aac575080155b15610ae3576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610af857610af8611ecc565b60009182526020918290206040805160a0810182526003909302909101805463ffffffff8116845260ff64010000000090910416151593830193909352600180840154918301919091526002928301546fffffffffffffffffffffffffffffffff80821660608501527001000000000000000000000000000000009091041660808301528254919350919086908110610b9357610b93611ecc565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909316929092179091556060820151610bfd906fffffffffffffffffffffffffffffffff1684151760011b90565b90507f0000000000000000000000000000000000000000000000000000000000000000610cbc826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610cfe576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d5e576002836000015163ffffffff1681548110610d2d57610d2d611ecc565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610d97846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610dab9190611efb565b610db59190611eb5565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610e28576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421790506000610e49888660009182526020526040902090565b60008181526003602052604090205490915060ff1615610e95576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060a001604052808b63ffffffff1681526020016000151581526020018a8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff16888a7f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be60405160405180910390a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016110e67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015543409055565b61098c82826001610a45565b600281815481106111c457600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561124957611249611bff565b14611280576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002878154811061129557611295611ecc565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112f47f00000000000000000000000000000000000000000000000000000000000000006001611efb565b611390826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146113d1576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611457576113f5836fffffffffffffffffffffffffffffffff16611a10565b67ffffffffffffffff1660000361142e577f00000000000000000000000000000000000000000000000000000000000000009150611450565b61144961143c600186611fdf565b865463ffffffff16611ab6565b6001015491505b5083611471565b8460010154915061146e84600161143c9190612010565b90505b818989604051611482929190612044565b6040518091039020146114c1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611527949392919061209d565b6020604051808303816000875af1158015611546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a91906120cf565b600284810154929091149250600091611615906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116b1886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116bb91906120e8565b6116c59190611f42565b67ffffffffffffffff16159050811515810361170d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611780610a33565b9050909192565b600080611814847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361187f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156118a9578061189381612109565b91506118a29050600a83612141565b9150611883565b60008167ffffffffffffffff8111156118c4576118c4612155565b6040519080825280601f01601f1916602001820160405280156118ee576020820181803683370190505b5090505b841561197157611903600183611eb5565b9150611910600a86612184565b61191b906030611efb565b60f81b81838151811061193057611930611ecc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061196a600a86612141565b94506118f2565b949350505050565b606060006119b084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003611efb565b90508267ffffffffffffffff1667ffffffffffffffff8111156119d5576119d5612155565b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b509150828160208401375092915050565b600080611a9d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080611ad4846fffffffffffffffffffffffffffffffff16611b53565b905060028381548110611ae957611ae9611ecc565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff828116911614611b4c57815460028054909163ffffffff16908110611b3757611b37611ecc565b90600052602060002090600302019150611afa565b5092915050565b60008119600183011681611be7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611c69577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611c8257600080fd5b50508035926020909101359150565b60005b83811015611cac578181015183820152602001611c94565b83811115611cbb576000848401525b50505050565b60008151808452611cd9816020860160208601611c91565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d1e6020830184611cc1565b9392505050565b80358015158114611d3557600080fd5b919050565b600080600060608486031215611d4f57600080fd5b8335925060208401359150611d6660408501611d25565b90509250925092565b600060208284031215611d8157600080fd5b5035919050565b60008083601f840112611d9a57600080fd5b50813567ffffffffffffffff811115611db257600080fd5b602083019150836020828501011115611dca57600080fd5b9250929050565b60008060008060008060808789031215611dea57600080fd5b86359550611dfa60208801611d25565b9450604087013567ffffffffffffffff80821115611e1757600080fd5b611e238a838b01611d88565b90965094506060890135915080821115611e3c57600080fd5b50611e4989828a01611d88565b979a9699509497509295939492505050565b60ff84168152826020820152606060408201526000611e7d6060830184611cc1565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ec757611ec7611e86565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115611f0e57611f0e611e86565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611f5d57611f5d611f13565b92169190910692915050565b60008451611f7b818460208901611c91565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611fb7816001850160208a01611c91565b60019201918201528351611fd2816002840160208801611c91565b0160020195945050505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561200857612008611e86565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561203b5761203b611e86565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006120b1604083018688612054565b82810360208401526120c4818587612054565b979650505050505050565b6000602082840312156120e157600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561200857612008611e86565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361213a5761213a611e86565b5060010190565b60008261215057612150611f13565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261219357612193611f13565b50069056fea164736f6c634300080f000a", Bin: "0x6101606040523480156200001257600080fd5b50604051620026a5380380620026a5833981016040819052620000359162000071565b6000608081905260a052600360c05260e093909352610100919091526001600160401b0316610120526001600160a01b031661014052620000d8565b600080600080608085870312156200008857600080fd5b84516020860151604087015191955093506001600160401b0381168114620000af57600080fd5b60608601519092506001600160a01b0381168114620000cd57600080fd5b939692955090935050565b60805160a05160c05160e05161010051610120516101405161253a6200016b600039600081816103e1015281816114ff01526117dd01526000818161046e0152818161079c0152610ded0152600081816102e3015281816106a401528181610c2c01526113030152600081816101de015261143d01526000610a14015260006109eb015260006109c2015261253a6000f3fe60806040526004361061018b5760003560e01c80638980e0cc116100d6578063c55cd0c71161007f578063d8cc1a3c11610059578063d8cc1a3c14610526578063f05a6c3914610546578063fa24f7431461056657600080fd5b8063c55cd0c714610490578063c6f0308c146104a3578063cf09e0d01461050757600080fd5b8063bbdc02db116100b0578063bbdc02db14610403578063bcef3b551461041f578063c31b29ce1461045c57600080fd5b80638980e0cc1461037a5780638b85902b1461038f57806392931298146103cf57600080fd5b80634778efe811610138578063632247ea11610112578063632247ea1461033c5780636361506d1461034f5780638129fc1c1461036557600080fd5b80634778efe8146102d157806354fd4d5014610305578063609d33341461032757600080fd5b80633218b99d116101695780633218b99d1461022357806335fef5671461025d578063363cc4271461027257600080fd5b8063200d2ed214610190578063266198f9146101cc5780632810e1d61461020e575b600080fd5b34801561019c57600080fd5b506000546101b69068010000000000000000900460ff1681565b6040516101c39190611f8d565b60405180910390f35b3480156101d857600080fd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101c3565b34801561021a57600080fd5b506101b661058a565b34801561022f57600080fd5b506000546102449067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101c3565b61027061026b366004611fce565b6109ab565b005b34801561027e57600080fd5b506000546102ac906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c3565b3480156102dd57600080fd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b34801561031157600080fd5b5061031a6109bb565b6040516101c3919061206a565b34801561033357600080fd5b5061031a610a5e565b61027061034a366004612099565b610a70565b34801561035b57600080fd5b5061020060015481565b34801561037157600080fd5b5061027061108c565b34801561038657600080fd5b50600254610200565b34801561039b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610200565b3480156103db57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040f57600080fd5b50604051600081526020016101c3565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610200565b34801561046857600080fd5b506102447f000000000000000000000000000000000000000000000000000000000000000081565b61027061049e366004611fce565b6111dd565b3480156104af57600080fd5b506104c36104be3660046120ce565b6111e9565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101c3565b34801561051357600080fd5b5060005467ffffffffffffffff16610244565b34801561053257600080fd5b50610270610541366004612130565b61125a565b34801561055257600080fd5b506102706105613660046120ce565b61177e565b34801561057257600080fd5b5061057b611aa8565b6040516101c3939291906121ba565b60008060005468010000000000000000900460ff1660028111156105b0576105b0611f5e565b146105e7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906105f990600190612214565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156106e3576000600282815481106106335761063361222b565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff6401000000009091041615610684575061060e565b60028101546000906106c8906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611ae6565b9050838110156106dc578093508260010194505b505061060e565b506000600283815481106106f9576106f961222b565b600091825260208220600390910201805490925063ffffffff9081169190821461076357600282815481106107305761073061222b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1661078f565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166107d367ffffffffffffffff831642612214565b6107ef836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610803919061225a565b1161083a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002838101546108dc906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6108e691906122a1565b67ffffffffffffffff1615801561090d57506fffffffffffffffffffffffffffffffff8414155b1561091b5760029550610920565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000083600281111561096557610965611f5e565b02179055600281111561097a5761097a611f5e565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b6109b782826000610a70565b5050565b60606109e67f0000000000000000000000000000000000000000000000000000000000000000611b9b565b610a0f7f0000000000000000000000000000000000000000000000000000000000000000611b9b565b610a387f0000000000000000000000000000000000000000000000000000000000000000611b9b565b604051602001610a4a939291906122c8565b604051602081830303815290604052905090565b6060610a6b602080611cd8565b905090565b6000805468010000000000000000900460ff166002811115610a9457610a94611f5e565b14610acb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610ad7575080155b15610b0e576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610b2357610b2361222b565b60009182526020918290206040805160a0810182526003909302909101805463ffffffff8116845260ff64010000000090910416151593830193909352600180840154918301919091526002928301546fffffffffffffffffffffffffffffffff80821660608501527001000000000000000000000000000000009091041660808301528254919350919086908110610bbe57610bbe61222b565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909316929092179091556060820151610c28906fffffffffffffffffffffffffffffffff1684151760011b90565b90507f0000000000000000000000000000000000000000000000000000000000000000610ce7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610d29576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d89576002836000015163ffffffff1681548110610d5857610d5861222b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610dc2846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610dd6919061225a565b610de09190612214565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610e53576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421790506000610e74888660009182526020526040902090565b60008181526003602052604090205490915060ff1615610ec0576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060a001604052808b63ffffffff1681526020016000151581526020018a8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff16888a7f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be60405160405180910390a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016111117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111d79043612214565b40600155565b6109b782826001610a70565b600281815481106111f957600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561127e5761127e611f5e565b146112b5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106112ca576112ca61222b565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506113297f0000000000000000000000000000000000000000000000000000000000000000600161225a565b6113c5826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611406576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561148c5761142a836fffffffffffffffffffffffffffffffff16611d6f565b67ffffffffffffffff16600003611463577f00000000000000000000000000000000000000000000000000000000000000009150611485565b61147e61147160018661233e565b865463ffffffff16611e15565b6001015491505b50836114a6565b846001015491506114a3846001611471919061236f565b90505b8189896040516114b79291906123a3565b6040518091039020146114f6576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b815260040161155c94939291906123fc565b6020604051808303816000875af115801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f919061242e565b60028481015492909114925060009161164a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116e6886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f09190612447565b6116fa91906122a1565b67ffffffffffffffff161590508115158103611742576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b6000805468010000000000000000900460ff1660028111156117a2576117a2611f5e565b146117d9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190612468565b90508160010361190b576001546040517fe52f09370000000000000000000000000000000000000000000000000000000081526004810184905260248101919091526020604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064015b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050505050565b600282146109b757816003036119a5576040517fe52f093700000000000000000000000000000000000000000000000000000000815260048101839052367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560248201526020604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b81600403611a3d576040517fe52f093700000000000000000000000000000000000000000000000000000000815260048101839052367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013560c01b60248201526008604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b816005036109b7576040517fe52f0937000000000000000000000000000000000000000000000000000000008152600481018390524660c01b60248201526008604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611adf610a5e565b9050909192565b600080611b73847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b606081600003611bde57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c085780611bf28161249e565b9150611c019050600a836124d6565b9150611be2565b60008167ffffffffffffffff811115611c2357611c236124ea565b6040519080825280601f01601f191660200182016040528015611c4d576020820181803683370190505b5090505b8415611cd057611c62600183612214565b9150611c6f600a86612519565b611c7a90603061225a565b60f81b818381518110611c8f57611c8f61222b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611cc9600a866124d6565b9450611c51565b949350505050565b60606000611d0f84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361225a565b90508267ffffffffffffffff1667ffffffffffffffff811115611d3457611d346124ea565b6040519080825280601f01601f191660200182016040528015611d5e576020820181803683370190505b509150828160208401375092915050565b600080611dfc837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080611e33846fffffffffffffffffffffffffffffffff16611eb2565b905060028381548110611e4857611e4861222b565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff828116911614611eab57815460028054909163ffffffff16908110611e9657611e9661222b565b90600052602060002090600302019150611e59565b5092915050565b60008119600183011681611f46827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611fc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611fe157600080fd5b50508035926020909101359150565b60005b8381101561200b578181015183820152602001611ff3565b8381111561201a576000848401525b50505050565b60008151808452612038816020860160208601611ff0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061207d6020830184612020565b9392505050565b8035801515811461209457600080fd5b919050565b6000806000606084860312156120ae57600080fd5b83359250602084013591506120c560408501612084565b90509250925092565b6000602082840312156120e057600080fd5b5035919050565b60008083601f8401126120f957600080fd5b50813567ffffffffffffffff81111561211157600080fd5b60208301915083602082850101111561212957600080fd5b9250929050565b6000806000806000806080878903121561214957600080fd5b8635955061215960208801612084565b9450604087013567ffffffffffffffff8082111561217657600080fd5b6121828a838b016120e7565b9096509450606089013591508082111561219b57600080fd5b506121a889828a016120e7565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006121dc6060830184612020565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612226576122266121e5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561226d5761226d6121e5565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806122bc576122bc612272565b92169190910692915050565b600084516122da818460208901611ff0565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612316816001850160208a01611ff0565b60019201918201528351612331816002840160208801611ff0565b0160020195945050505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612367576123676121e5565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561239a5761239a6121e5565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006124106040830186886123b3565b82810360208401526124238185876123b3565b979650505050505050565b60006020828403121561244057600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015612367576123676121e5565b60006020828403121561247a57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461207d57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124cf576124cf6121e5565b5060010190565b6000826124e5576124e5612272565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261252857612528612272565b50069056fea164736f6c634300080f000a",
} }
// FaultDisputeGameABI is the input ABI used to generate the binding from. // FaultDisputeGameABI is the input ABI used to generate the binding from.
...@@ -776,6 +776,27 @@ func (_FaultDisputeGame *FaultDisputeGameCallerSession) Version() (string, error ...@@ -776,6 +776,27 @@ func (_FaultDisputeGame *FaultDisputeGameCallerSession) Version() (string, error
return _FaultDisputeGame.Contract.Version(&_FaultDisputeGame.CallOpts) return _FaultDisputeGame.Contract.Version(&_FaultDisputeGame.CallOpts)
} }
// AddLocalData is a paid mutator transaction binding the contract method 0xf05a6c39.
//
// Solidity: function addLocalData(uint256 _ident) returns()
func (_FaultDisputeGame *FaultDisputeGameTransactor) AddLocalData(opts *bind.TransactOpts, _ident *big.Int) (*types.Transaction, error) {
return _FaultDisputeGame.contract.Transact(opts, "addLocalData", _ident)
}
// AddLocalData is a paid mutator transaction binding the contract method 0xf05a6c39.
//
// Solidity: function addLocalData(uint256 _ident) returns()
func (_FaultDisputeGame *FaultDisputeGameSession) AddLocalData(_ident *big.Int) (*types.Transaction, error) {
return _FaultDisputeGame.Contract.AddLocalData(&_FaultDisputeGame.TransactOpts, _ident)
}
// AddLocalData is a paid mutator transaction binding the contract method 0xf05a6c39.
//
// Solidity: function addLocalData(uint256 _ident) returns()
func (_FaultDisputeGame *FaultDisputeGameTransactorSession) AddLocalData(_ident *big.Int) (*types.Transaction, error) {
return _FaultDisputeGame.Contract.AddLocalData(&_FaultDisputeGame.TransactOpts, _ident)
}
// Attack is a paid mutator transaction binding the contract method 0xc55cd0c7. // Attack is a paid mutator transaction binding the contract method 0xc55cd0c7.
// //
// Solidity: function attack(uint256 _parentIndex, bytes32 _claim) payable returns() // Solidity: function attack(uint256 _parentIndex, bytes32 _claim) payable returns()
......
...@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr ...@@ -13,7 +13,7 @@ const FaultDisputeGameStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contr
var FaultDisputeGameStorageLayout = new(solc.StorageLayout) var FaultDisputeGameStorageLayout = new(solc.StorageLayout)
var FaultDisputeGameDeployedBin = "0x6080604052600436106101805760003560e01c80638129fc1c116100d6578063c31b29ce1161007f578063cf09e0d011610059578063cf09e0d0146104fc578063d8cc1a3c1461051b578063fa24f7431461053b57600080fd5b8063c31b29ce14610451578063c55cd0c714610485578063c6f0308c1461049857600080fd5b806392931298116100b057806392931298146103c4578063bbdc02db146103f8578063bcef3b551461041457600080fd5b80638129fc1c1461035a5780638980e0cc1461036f5780638b85902b1461038457600080fd5b8063363cc42711610138578063609d333411610112578063609d33341461031c578063632247ea146103315780636361506d1461034457600080fd5b8063363cc427146102675780634778efe8146102c657806354fd4d50146102fa57600080fd5b80632810e1d6116101695780632810e1d6146102035780633218b99d1461021857806335fef5671461025257600080fd5b8063200d2ed214610185578063266198f9146101c1575b600080fd5b34801561019157600080fd5b506000546101ab9068010000000000000000900460ff1681565b6040516101b89190611c2e565b60405180910390f35b3480156101cd57600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101b8565b34801561020f57600080fd5b506101ab61055f565b34801561022457600080fd5b506000546102399067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101b8565b610265610260366004611c6f565b610980565b005b34801561027357600080fd5b506000546102a1906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b8565b3480156102d257600080fd5b506101f57f000000000000000000000000000000000000000000000000000000000000000081565b34801561030657600080fd5b5061030f610990565b6040516101b89190611d0b565b34801561032857600080fd5b5061030f610a33565b61026561033f366004611d3a565b610a45565b34801561035057600080fd5b506101f560015481565b34801561036657600080fd5b50610265611061565b34801561037b57600080fd5b506002546101f5565b34801561039057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003602001356101f5565b3480156103d057600080fd5b506102a17f000000000000000000000000000000000000000000000000000000000000000081565b34801561040457600080fd5b50604051600081526020016101b8565b34801561042057600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356101f5565b34801561045d57600080fd5b506102397f000000000000000000000000000000000000000000000000000000000000000081565b610265610493366004611c6f565b6111a8565b3480156104a457600080fd5b506104b86104b3366004611d6f565b6111b4565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101b8565b34801561050857600080fd5b5060005467ffffffffffffffff16610239565b34801561052757600080fd5b50610265610536366004611dd1565b611225565b34801561054757600080fd5b50610550611749565b6040516101b893929190611e5b565b60008060005468010000000000000000900460ff16600281111561058557610585611bff565b146105bc576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906105ce90600190611eb5565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156106b85760006002828154811061060857610608611ecc565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff640100000000909104161561065957506105e3565b600281015460009061069d906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611787565b9050838110156106b1578093508260010194505b50506105e3565b506000600283815481106106ce576106ce611ecc565b600091825260208220600390910201805490925063ffffffff90811691908214610738576002828154811061070557610705611ecc565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff16610764565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166107a867ffffffffffffffff831642611eb5565b6107c4836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff166107d89190611efb565b1161080f576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002838101546108b1906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6108bb9190611f42565b67ffffffffffffffff161580156108e257506fffffffffffffffffffffffffffffffff8414155b156108f057600295506108f5565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000083600281111561093a5761093a611bff565b02179055600281111561094f5761094f611bff565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b61098c82826000610a45565b5050565b60606109bb7f000000000000000000000000000000000000000000000000000000000000000061183c565b6109e47f000000000000000000000000000000000000000000000000000000000000000061183c565b610a0d7f000000000000000000000000000000000000000000000000000000000000000061183c565b604051602001610a1f93929190611f69565b604051602081830303815290604052905090565b6060610a40602080611979565b905090565b6000805468010000000000000000900460ff166002811115610a6957610a69611bff565b14610aa0576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610aac575080155b15610ae3576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610af857610af8611ecc565b60009182526020918290206040805160a0810182526003909302909101805463ffffffff8116845260ff64010000000090910416151593830193909352600180840154918301919091526002928301546fffffffffffffffffffffffffffffffff80821660608501527001000000000000000000000000000000009091041660808301528254919350919086908110610b9357610b93611ecc565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909316929092179091556060820151610bfd906fffffffffffffffffffffffffffffffff1684151760011b90565b90507f0000000000000000000000000000000000000000000000000000000000000000610cbc826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610cfe576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d5e576002836000015163ffffffff1681548110610d2d57610d2d611ecc565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610d97846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610dab9190611efb565b610db59190611eb5565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610e28576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421790506000610e49888660009182526020526040902090565b60008181526003602052604090205490915060ff1615610e95576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060a001604052808b63ffffffff1681526020016000151581526020018a8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff16888a7f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be60405160405180910390a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016110e67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff909316929092179490941781556040830151818501556060830151608090930151821670010000000000000000000000000000000002929091169190911760029091015543409055565b61098c82826001610a45565b600281815481106111c457600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561124957611249611bff565b14611280576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002878154811061129557611295611ecc565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506112f47f00000000000000000000000000000000000000000000000000000000000000006001611efb565b611390826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff16146113d1576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808915611457576113f5836fffffffffffffffffffffffffffffffff16611a10565b67ffffffffffffffff1660000361142e577f00000000000000000000000000000000000000000000000000000000000000009150611450565b61144961143c600186611fdf565b865463ffffffff16611ab6565b6001015491505b5083611471565b8460010154915061146e84600161143c9190612010565b90505b818989604051611482929190612044565b6040518091039020146114c1576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b8152600401611527949392919061209d565b6020604051808303816000875af1158015611546573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a91906120cf565b600284810154929091149250600091611615906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116b1886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116bb91906120e8565b6116c59190611f42565b67ffffffffffffffff16159050811515810361170d576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611780610a33565b9050909192565b600080611814847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b60608160000361187f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156118a9578061189381612109565b91506118a29050600a83612141565b9150611883565b60008167ffffffffffffffff8111156118c4576118c4612155565b6040519080825280601f01601f1916602001820160405280156118ee576020820181803683370190505b5090505b841561197157611903600183611eb5565b9150611910600a86612184565b61191b906030611efb565b60f81b81838151811061193057611930611ecc565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061196a600a86612141565b94506118f2565b949350505050565b606060006119b084367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003611efb565b90508267ffffffffffffffff1667ffffffffffffffff8111156119d5576119d5612155565b6040519080825280601f01601f1916602001820160405280156119ff576020820181803683370190505b509150828160208401375092915050565b600080611a9d837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080611ad4846fffffffffffffffffffffffffffffffff16611b53565b905060028381548110611ae957611ae9611ecc565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff828116911614611b4c57815460028054909163ffffffff16908110611b3757611b37611ecc565b90600052602060002090600302019150611afa565b5092915050565b60008119600183011681611be7827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611c69577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611c8257600080fd5b50508035926020909101359150565b60005b83811015611cac578181015183820152602001611c94565b83811115611cbb576000848401525b50505050565b60008151808452611cd9816020860160208601611c91565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d1e6020830184611cc1565b9392505050565b80358015158114611d3557600080fd5b919050565b600080600060608486031215611d4f57600080fd5b8335925060208401359150611d6660408501611d25565b90509250925092565b600060208284031215611d8157600080fd5b5035919050565b60008083601f840112611d9a57600080fd5b50813567ffffffffffffffff811115611db257600080fd5b602083019150836020828501011115611dca57600080fd5b9250929050565b60008060008060008060808789031215611dea57600080fd5b86359550611dfa60208801611d25565b9450604087013567ffffffffffffffff80821115611e1757600080fd5b611e238a838b01611d88565b90965094506060890135915080821115611e3c57600080fd5b50611e4989828a01611d88565b979a9699509497509295939492505050565b60ff84168152826020820152606060408201526000611e7d6060830184611cc1565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ec757611ec7611e86565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115611f0e57611f0e611e86565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff80841680611f5d57611f5d611f13565b92169190910692915050565b60008451611f7b818460208901611c91565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551611fb7816001850160208a01611c91565b60019201918201528351611fd2816002840160208801611c91565b0160020195945050505050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561200857612008611e86565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561203b5761203b611e86565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006120b1604083018688612054565b82810360208401526120c4818587612054565b979650505050505050565b6000602082840312156120e157600080fd5b5051919050565b600067ffffffffffffffff8381169083168181101561200857612008611e86565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361213a5761213a611e86565b5060010190565b60008261215057612150611f13565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261219357612193611f13565b50069056fea164736f6c634300080f000a" var FaultDisputeGameDeployedBin = "0x60806040526004361061018b5760003560e01c80638980e0cc116100d6578063c55cd0c71161007f578063d8cc1a3c11610059578063d8cc1a3c14610526578063f05a6c3914610546578063fa24f7431461056657600080fd5b8063c55cd0c714610490578063c6f0308c146104a3578063cf09e0d01461050757600080fd5b8063bbdc02db116100b0578063bbdc02db14610403578063bcef3b551461041f578063c31b29ce1461045c57600080fd5b80638980e0cc1461037a5780638b85902b1461038f57806392931298146103cf57600080fd5b80634778efe811610138578063632247ea11610112578063632247ea1461033c5780636361506d1461034f5780638129fc1c1461036557600080fd5b80634778efe8146102d157806354fd4d5014610305578063609d33341461032757600080fd5b80633218b99d116101695780633218b99d1461022357806335fef5671461025d578063363cc4271461027257600080fd5b8063200d2ed214610190578063266198f9146101cc5780632810e1d61461020e575b600080fd5b34801561019c57600080fd5b506000546101b69068010000000000000000900460ff1681565b6040516101c39190611f8d565b60405180910390f35b3480156101d857600080fd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101c3565b34801561021a57600080fd5b506101b661058a565b34801561022f57600080fd5b506000546102449067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101c3565b61027061026b366004611fce565b6109ab565b005b34801561027e57600080fd5b506000546102ac906901000000000000000000900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c3565b3480156102dd57600080fd5b506102007f000000000000000000000000000000000000000000000000000000000000000081565b34801561031157600080fd5b5061031a6109bb565b6040516101c3919061206a565b34801561033357600080fd5b5061031a610a5e565b61027061034a366004612099565b610a70565b34801561035b57600080fd5b5061020060015481565b34801561037157600080fd5b5061027061108c565b34801561038657600080fd5b50600254610200565b34801561039b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900360200135610200565b3480156103db57600080fd5b506102ac7f000000000000000000000000000000000000000000000000000000000000000081565b34801561040f57600080fd5b50604051600081526020016101c3565b34801561042b57600080fd5b50367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900335610200565b34801561046857600080fd5b506102447f000000000000000000000000000000000000000000000000000000000000000081565b61027061049e366004611fce565b6111dd565b3480156104af57600080fd5b506104c36104be3660046120ce565b6111e9565b6040805163ffffffff90961686529315156020860152928401919091526fffffffffffffffffffffffffffffffff908116606084015216608082015260a0016101c3565b34801561051357600080fd5b5060005467ffffffffffffffff16610244565b34801561053257600080fd5b50610270610541366004612130565b61125a565b34801561055257600080fd5b506102706105613660046120ce565b61177e565b34801561057257600080fd5b5061057b611aa8565b6040516101c3939291906121ba565b60008060005468010000000000000000900460ff1660028111156105b0576105b0611f5e565b146105e7576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002546000906105f990600190612214565b90506fffffffffffffffffffffffffffffffff815b67ffffffffffffffff8110156106e3576000600282815481106106335761063361222b565b6000918252602090912060039091020180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019290915060ff6401000000009091041615610684575061060e565b60028101546000906106c8906fffffffffffffffffffffffffffffffff167f0000000000000000000000000000000000000000000000000000000000000000611ae6565b9050838110156106dc578093508260010194505b505061060e565b506000600283815481106106f9576106f961222b565b600091825260208220600390910201805490925063ffffffff9081169190821461076357600282815481106107305761073061222b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1661078f565b600283015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff165b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c166107d367ffffffffffffffff831642612214565b6107ef836fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610803919061225a565b1161083a576040517ff2440b5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002838101546108dc906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6108e691906122a1565b67ffffffffffffffff1615801561090d57506fffffffffffffffffffffffffffffffff8414155b1561091b5760029550610920565b600195505b600080548791907fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000083600281111561096557610965611f5e565b02179055600281111561097a5761097a611f5e565b6040517f5e186f09b9c93491f14e277eea7faa5de6a2d4bda75a79af7a3684fbfb42da6090600090a2505050505090565b6109b782826000610a70565b5050565b60606109e67f0000000000000000000000000000000000000000000000000000000000000000611b9b565b610a0f7f0000000000000000000000000000000000000000000000000000000000000000611b9b565b610a387f0000000000000000000000000000000000000000000000000000000000000000611b9b565b604051602001610a4a939291906122c8565b604051602081830303815290604052905090565b6060610a6b602080611cd8565b905090565b6000805468010000000000000000900460ff166002811115610a9457610a94611f5e565b14610acb576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82158015610ad7575080155b15610b0e576040517fa42637bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060028481548110610b2357610b2361222b565b60009182526020918290206040805160a0810182526003909302909101805463ffffffff8116845260ff64010000000090910416151593830193909352600180840154918301919091526002928301546fffffffffffffffffffffffffffffffff80821660608501527001000000000000000000000000000000009091041660808301528254919350919086908110610bbe57610bbe61222b565b6000918252602082206003909102018054921515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff909316929092179091556060820151610c28906fffffffffffffffffffffffffffffffff1684151760011b90565b90507f0000000000000000000000000000000000000000000000000000000000000000610ce7826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff161115610d29576040517f56f57b2b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815160009063ffffffff90811614610d89576002836000015163ffffffff1681548110610d5857610d5861222b565b906000526020600020906003020160020160109054906101000a90046fffffffffffffffffffffffffffffffff1690505b608083015160009067ffffffffffffffff1667ffffffffffffffff1642610dc2846fffffffffffffffffffffffffffffffff1660401c90565b67ffffffffffffffff16610dd6919061225a565b610de09190612214565b9050677fffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000060011c1667ffffffffffffffff82161115610e53576040517f3381d11400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000604082901b421790506000610e74888660009182526020526040902090565b60008181526003602052604090205490915060ff1615610ec0576040517f80497e3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016003600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060026040518060a001604052808b63ffffffff1681526020016000151581526020018a8152602001876fffffffffffffffffffffffffffffffff168152602001846fffffffffffffffffffffffffffffffff16815250908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548160ff0219169083151502179055506040820151816001015560608201518160020160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555060808201518160020160106101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050503373ffffffffffffffffffffffffffffffffffffffff16888a7f9b3245740ec3b155098a55be84957a4da13eaf7f14a8bc6f53126c0b9350f2be60405160405180910390a4505050505050505050565b600080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000164267ffffffffffffffff161781556040805160a08101825263ffffffff815260208101929092526002919081016111117ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe369081013560f01c90033590565b815260016020820152604001426fffffffffffffffffffffffffffffffff908116909152825460018181018555600094855260209485902084516003909302018054958501511515640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000090961663ffffffff90931692909217949094178155604083015181850155606083015160809093015182167001000000000000000000000000000000000292909116919091176002909101556111d79043612214565b40600155565b6109b782826001610a70565b600281815481106111f957600080fd5b600091825260209091206003909102018054600182015460029092015463ffffffff8216935064010000000090910460ff1691906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041685565b6000805468010000000000000000900460ff16600281111561127e5761127e611f5e565b146112b5576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600287815481106112ca576112ca61222b565b6000918252602082206003919091020160028101549092506fffffffffffffffffffffffffffffffff16908715821760011b90506113297f0000000000000000000000000000000000000000000000000000000000000000600161225a565b6113c5826fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1614611406576040517f5f53dd9800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080891561148c5761142a836fffffffffffffffffffffffffffffffff16611d6f565b67ffffffffffffffff16600003611463577f00000000000000000000000000000000000000000000000000000000000000009150611485565b61147e61147160018661233e565b865463ffffffff16611e15565b6001015491505b50836114a6565b846001015491506114a3846001611471919061236f565b90505b8189896040516114b79291906123a3565b6040518091039020146114f6576040517f696550ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081600101547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f8e0cb968c8c8c8c6040518563ffffffff1660e01b815260040161155c94939291906123fc565b6020604051808303816000875af115801561157b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159f919061242e565b60028481015492909114925060009161164a906fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116e6886fffffffffffffffffffffffffffffffff167e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b6116f09190612447565b6116fa91906122a1565b67ffffffffffffffff161590508115158103611742576040517ffb4e40dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505084547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff166401000000001790945550505050505050505050565b6000805468010000000000000000900460ff1660028111156117a2576117a2611f5e565b146117d9576040517f67fe195000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186a9190612468565b90508160010361190b576001546040517fe52f09370000000000000000000000000000000000000000000000000000000081526004810184905260248101919091526020604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064015b600060405180830381600087803b1580156118ef57600080fd5b505af1158015611903573d6000803e3d6000fd5b505050505050565b600282146109b757816003036119a5576040517fe52f093700000000000000000000000000000000000000000000000000000000815260048101839052367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90033560248201526020604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b81600403611a3d576040517fe52f093700000000000000000000000000000000000000000000000000000000815260048101839052367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c90036020013560c01b60248201526008604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b816005036109b7576040517fe52f0937000000000000000000000000000000000000000000000000000000008152600481018390524660c01b60248201526008604482015273ffffffffffffffffffffffffffffffffffffffff82169063e52f0937906064016118d5565b6000367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c9003356060611adf610a5e565b9050909192565b600080611b73847e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff1690508083036001841b600180831b0386831b17039250505092915050565b606081600003611bde57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c085780611bf28161249e565b9150611c019050600a836124d6565b9150611be2565b60008167ffffffffffffffff811115611c2357611c236124ea565b6040519080825280601f01601f191660200182016040528015611c4d576020820181803683370190505b5090505b8415611cd057611c62600183612214565b9150611c6f600a86612519565b611c7a90603061225a565b60f81b818381518110611c8f57611c8f61222b565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611cc9600a866124d6565b9450611c51565b949350505050565b60606000611d0f84367ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe81013560f01c900361225a565b90508267ffffffffffffffff1667ffffffffffffffff811115611d3457611d346124ea565b6040519080825280601f01601f191660200182016040528015611d5e576020820181803683370190505b509150828160208401375092915050565b600080611dfc837e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b600167ffffffffffffffff919091161b90920392915050565b600080611e33846fffffffffffffffffffffffffffffffff16611eb2565b905060028381548110611e4857611e4861222b565b906000526020600020906003020191505b60028201546fffffffffffffffffffffffffffffffff828116911614611eab57815460028054909163ffffffff16908110611e9657611e9661222b565b90600052602060002090600302019150611e59565b5092915050565b60008119600183011681611f46827e09010a0d15021d0b0e10121619031e080c141c0f111807131b17061a05041f7f07c4acdd0000000000000000000000000000000000000000000000000000000067ffffffffffffffff831160061b83811c63ffffffff1060051b1792831c600181901c17600281901c17600481901c17600881901c17601081901c170260fb1c1a1790565b67ffffffffffffffff169390931c8015179392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6020810160038310611fc8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60008060408385031215611fe157600080fd5b50508035926020909101359150565b60005b8381101561200b578181015183820152602001611ff3565b8381111561201a576000848401525b50505050565b60008151808452612038816020860160208601611ff0565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061207d6020830184612020565b9392505050565b8035801515811461209457600080fd5b919050565b6000806000606084860312156120ae57600080fd5b83359250602084013591506120c560408501612084565b90509250925092565b6000602082840312156120e057600080fd5b5035919050565b60008083601f8401126120f957600080fd5b50813567ffffffffffffffff81111561211157600080fd5b60208301915083602082850101111561212957600080fd5b9250929050565b6000806000806000806080878903121561214957600080fd5b8635955061215960208801612084565b9450604087013567ffffffffffffffff8082111561217657600080fd5b6121828a838b016120e7565b9096509450606089013591508082111561219b57600080fd5b506121a889828a016120e7565b979a9699509497509295939492505050565b60ff841681528260208201526060604082015260006121dc6060830184612020565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612226576122266121e5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561226d5761226d6121e5565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600067ffffffffffffffff808416806122bc576122bc612272565b92169190910692915050565b600084516122da818460208901611ff0565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551612316816001850160208a01611ff0565b60019201918201528351612331816002840160208801611ff0565b0160020195945050505050565b60006fffffffffffffffffffffffffffffffff83811690831681811015612367576123676121e5565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561239a5761239a6121e5565b01949350505050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6040815260006124106040830186886123b3565b82810360208401526124238185876123b3565b979650505050505050565b60006020828403121561244057600080fd5b5051919050565b600067ffffffffffffffff83811690831681811015612367576123676121e5565b60006020828403121561247a57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff8116811461207d57600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124cf576124cf6121e5565b5060010190565b6000826124e5576124e5612272565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008261252857612528612272565b50069056fea164736f6c634300080f000a"
func init() { func init() {
if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil { if err := json.Unmarshal([]byte(FaultDisputeGameStorageLayoutJSON), FaultDisputeGameStorageLayout); err != nil {
......
...@@ -381,23 +381,23 @@ func (_PreimageOracle *PreimageOracleTransactorSession) LoadKeccak256PreimagePar ...@@ -381,23 +381,23 @@ func (_PreimageOracle *PreimageOracleTransactorSession) LoadKeccak256PreimagePar
return _PreimageOracle.Contract.LoadKeccak256PreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _preimage) return _PreimageOracle.Contract.LoadKeccak256PreimagePart(&_PreimageOracle.TransactOpts, _partOffset, _preimage)
} }
// LoadLocalPart is a paid mutator transaction binding the contract method 0x90fbc1e2. // LoadLocalData is a paid mutator transaction binding the contract method 0xe52f0937.
// //
// Solidity: function loadLocalPart(uint256 _partOffset, uint256 _ident, bytes32 _part, uint256 _size) returns() // Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint8 _size) returns()
func (_PreimageOracle *PreimageOracleTransactor) LoadLocalPart(opts *bind.TransactOpts, _partOffset *big.Int, _ident *big.Int, _part [32]byte, _size *big.Int) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleTransactor) LoadLocalData(opts *bind.TransactOpts, _ident *big.Int, _word [32]byte, _size uint8) (*types.Transaction, error) {
return _PreimageOracle.contract.Transact(opts, "loadLocalPart", _partOffset, _ident, _part, _size) return _PreimageOracle.contract.Transact(opts, "loadLocalData", _ident, _word, _size)
} }
// LoadLocalPart is a paid mutator transaction binding the contract method 0x90fbc1e2. // LoadLocalData is a paid mutator transaction binding the contract method 0xe52f0937.
// //
// Solidity: function loadLocalPart(uint256 _partOffset, uint256 _ident, bytes32 _part, uint256 _size) returns() // Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint8 _size) returns()
func (_PreimageOracle *PreimageOracleSession) LoadLocalPart(_partOffset *big.Int, _ident *big.Int, _part [32]byte, _size *big.Int) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleSession) LoadLocalData(_ident *big.Int, _word [32]byte, _size uint8) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadLocalPart(&_PreimageOracle.TransactOpts, _partOffset, _ident, _part, _size) return _PreimageOracle.Contract.LoadLocalData(&_PreimageOracle.TransactOpts, _ident, _word, _size)
} }
// LoadLocalPart is a paid mutator transaction binding the contract method 0x90fbc1e2. // LoadLocalData is a paid mutator transaction binding the contract method 0xe52f0937.
// //
// Solidity: function loadLocalPart(uint256 _partOffset, uint256 _ident, bytes32 _part, uint256 _size) returns() // Solidity: function loadLocalData(uint256 _ident, bytes32 _word, uint8 _size) returns()
func (_PreimageOracle *PreimageOracleTransactorSession) LoadLocalPart(_partOffset *big.Int, _ident *big.Int, _part [32]byte, _size *big.Int) (*types.Transaction, error) { func (_PreimageOracle *PreimageOracleTransactorSession) LoadLocalData(_ident *big.Int, _word [32]byte, _size uint8) (*types.Transaction, error) {
return _PreimageOracle.Contract.LoadLocalPart(&_PreimageOracle.TransactOpts, _partOffset, _ident, _part, _size) return _PreimageOracle.Contract.LoadLocalData(&_PreimageOracle.TransactOpts, _ident, _word, _size)
} }
...@@ -85,36 +85,36 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520) ...@@ -85,36 +85,36 @@ FaucetTest:test_nonAdmin_drip_fails() (gas: 262520)
FaucetTest:test_receive_succeeds() (gas: 17401) FaucetTest:test_receive_succeeds() (gas: 17401)
FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145) FaucetTest:test_withdraw_nonAdmin_reverts() (gas: 13145)
FaucetTest:test_withdraw_succeeds() (gas: 78359) FaucetTest:test_withdraw_succeeds() (gas: 78359)
FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 502252) FaultDisputeGame_ResolvesCorrectly_CorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 501901)
FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 509098) FaultDisputeGame_ResolvesCorrectly_CorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 508725)
FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 505795) FaultDisputeGame_ResolvesCorrectly_CorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 505444)
FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 508974) FaultDisputeGame_ResolvesCorrectly_CorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 508601)
FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 508291) FaultDisputeGame_ResolvesCorrectly_CorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 507940)
FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 501017) FaultDisputeGame_ResolvesCorrectly_IncorrectRoot1:test_resolvesCorrectly_succeeds() (gas: 500666)
FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 507863) FaultDisputeGame_ResolvesCorrectly_IncorrectRoot2:test_resolvesCorrectly_succeeds() (gas: 507490)
FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 504560) FaultDisputeGame_ResolvesCorrectly_IncorrectRoot3:test_resolvesCorrectly_succeeds() (gas: 504209)
FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505739) FaultDisputeGame_ResolvesCorrectly_IncorrectRoot4:test_resolvesCorrectly_succeeds() (gas: 505366)
FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 505056) FaultDisputeGame_ResolvesCorrectly_IncorrectRoot5:test_resolvesCorrectly_succeeds() (gas: 504705)
FaultDisputeGame_Test:test_extraData_succeeds() (gas: 17404) FaultDisputeGame_Test:test_extraData_succeeds() (gas: 17449)
FaultDisputeGame_Test:test_gameData_succeeds() (gas: 17917) FaultDisputeGame_Test:test_gameData_succeeds() (gas: 17917)
FaultDisputeGame_Test:test_gameStart_succeeds() (gas: 10315) FaultDisputeGame_Test:test_gameStart_succeeds() (gas: 10293)
FaultDisputeGame_Test:test_gameType_succeeds() (gas: 8260) FaultDisputeGame_Test:test_gameType_succeeds() (gas: 8238)
FaultDisputeGame_Test:test_initialRootClaimData_succeeds() (gas: 17669) FaultDisputeGame_Test:test_initialRootClaimData_succeeds() (gas: 17647)
FaultDisputeGame_Test:test_move_clockCorrectness_succeeds() (gas: 419317) FaultDisputeGame_Test:test_move_clockCorrectness_succeeds() (gas: 419119)
FaultDisputeGame_Test:test_move_clockTimeExceeded_reverts() (gas: 26399) FaultDisputeGame_Test:test_move_clockTimeExceeded_reverts() (gas: 26377)
FaultDisputeGame_Test:test_move_defendRoot_reverts() (gas: 13360) FaultDisputeGame_Test:test_move_defendRoot_reverts() (gas: 13338)
FaultDisputeGame_Test:test_move_duplicateClaim_reverts() (gas: 104076) FaultDisputeGame_Test:test_move_duplicateClaim_reverts() (gas: 104032)
FaultDisputeGame_Test:test_move_gameDepthExceeded_reverts() (gas: 411436) FaultDisputeGame_Test:test_move_gameDepthExceeded_reverts() (gas: 411304)
FaultDisputeGame_Test:test_move_gameNotInProgress_reverts() (gas: 10968) FaultDisputeGame_Test:test_move_gameNotInProgress_reverts() (gas: 10946)
FaultDisputeGame_Test:test_move_nonExistentParent_reverts() (gas: 24655) FaultDisputeGame_Test:test_move_nonExistentParent_reverts() (gas: 24611)
FaultDisputeGame_Test:test_move_simpleAttack_succeeds() (gas: 108178) FaultDisputeGame_Test:test_move_simpleAttack_succeeds() (gas: 108112)
FaultDisputeGame_Test:test_resolve_challengeContested_succeeds() (gas: 226467) FaultDisputeGame_Test:test_resolve_challengeContested_succeeds() (gas: 226468)
FaultDisputeGame_Test:test_resolve_notInProgress_reverts() (gas: 9657) FaultDisputeGame_Test:test_resolve_notInProgress_reverts() (gas: 9702)
FaultDisputeGame_Test:test_resolve_rootContested_succeeds() (gas: 110598) FaultDisputeGame_Test:test_resolve_rootContested_succeeds() (gas: 110621)
FaultDisputeGame_Test:test_resolve_rootUncontestedClockNotExpired_succeeds() (gas: 21437) FaultDisputeGame_Test:test_resolve_rootUncontestedClockNotExpired_succeeds() (gas: 21482)
FaultDisputeGame_Test:test_resolve_rootUncontested_succeeds() (gas: 27266) FaultDisputeGame_Test:test_resolve_rootUncontested_succeeds() (gas: 27311)
FaultDisputeGame_Test:test_resolve_teamDeathmatch_succeeds() (gas: 398793) FaultDisputeGame_Test:test_resolve_teamDeathmatch_succeeds() (gas: 398750)
FaultDisputeGame_Test:test_rootClaim_succeeds() (gas: 8225) FaultDisputeGame_Test:test_rootClaim_succeeds() (gas: 8203)
FeeVault_Test:test_constructor_succeeds() (gas: 18185) FeeVault_Test:test_constructor_succeeds() (gas: 18185)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 352113) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 352113)
GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2950320) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2950320)
...@@ -575,4 +575,3 @@ TransactorTest:test_constructor_succeeds() (gas: 9739) ...@@ -575,4 +575,3 @@ TransactorTest:test_constructor_succeeds() (gas: 9739)
TransactorTest:test_delegateCall_succeeds() (gas: 20909) TransactorTest:test_delegateCall_succeeds() (gas: 20909)
TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 16550) TransactorTest:test_delegateCall_unauthorized_reverts() (gas: 16550)
TransferOnionTest:test_constructor_succeeds() (gas: 564855) TransferOnionTest:test_constructor_succeeds() (gas: 564855)
TransferOnionTest:test_unwrap_succeeds() (gas: 724955)
\ No newline at end of file
...@@ -53,24 +53,49 @@ contract PreimageOracle { ...@@ -53,24 +53,49 @@ contract PreimageOracle {
preimageLengths[key] = size; preimageLengths[key] = size;
} }
/// @notice Loads a local data part into the preimage oracle. /// @notice Loads a word of local data into the preimage oracle in two separate parts.
/// @param _partOffset The offset of the local data part.
/// @param _ident The identifier of the local data. /// @param _ident The identifier of the local data.
/// @param _part The local data part. /// @param _word The local data word.
/// @param _size The size of the local data. /// @param _size The number of bytes in `_word` to load.
/// @dev The local data part is loaded into the preimage oracle under the context /// @dev The local data parts are loaded into the preimage oracle under the context
/// of the caller - no other account can write to the caller's context /// of the caller - no other account can write to the caller's context
/// specific data. /// specific data.
function loadLocalPart( ///
uint256 _partOffset, /// There are 5 local data identifiers:
uint256 _ident, /// ┌────────────┬─────────────────┐
bytes32 _part, /// │ Identifier │ Data │
uint256 _size /// ├────────────┼─────────────────┤
) external { /// │ 1 │ L1 Head Hash │
/// │ 2 │ Output Root │
/// │ 3 │ Root Claim │
/// │ 4 │ L2 Block Number │
/// │ 5 │ Chain ID │
/// └────────────┴─────────────────┘
function loadLocalData(uint256 _ident, bytes32 _word, uint8 _size) external {
// Compute the localized key from the given local identifier.
bytes32 key = PreimageKeyLib.localizeIdent(_ident); bytes32 key = PreimageKeyLib.localizeIdent(_ident);
preimagePartOk[key][_partOffset] = true; // Load both parts of the local data word into storage for future
preimageParts[key][_partOffset] = _part; // reads.
bytes32 part1;
assembly {
// The first part is prepended with an 8 byte length prefix and contains
// the first 24 bytes of the passed word.
part1 := or(shl(192, _size), shr(64, _word))
}
// Store the first part with offset 0.
preimagePartOk[key][0] = true;
preimageParts[key][0] = part1;
// If the size is greater than 24, we need to store a second part as well.
if (_size > 24) {
bytes32 part2 = _word << 192;
preimagePartOk[key][32] = true;
preimageParts[key][32] = part2;
}
// Assign the length of the preimage at the localized key.
preimageLengths[key] = _size; preimageLengths[key] = _size;
} }
......
...@@ -5,7 +5,7 @@ import { IDisputeGame } from "./interfaces/IDisputeGame.sol"; ...@@ -5,7 +5,7 @@ import { IDisputeGame } from "./interfaces/IDisputeGame.sol";
import { IFaultDisputeGame } from "./interfaces/IFaultDisputeGame.sol"; import { IFaultDisputeGame } from "./interfaces/IFaultDisputeGame.sol";
import { IInitializable } from "./interfaces/IInitializable.sol"; import { IInitializable } from "./interfaces/IInitializable.sol";
import { IBondManager } from "./interfaces/IBondManager.sol"; import { IBondManager } from "./interfaces/IBondManager.sol";
import { IBigStepper } from "./interfaces/IBigStepper.sol"; import { IBigStepper, IPreimageOracle } from "./interfaces/IBigStepper.sol";
import { Clone } from "../libraries/Clone.sol"; import { Clone } from "../libraries/Clone.sol";
import { Semver } from "../universal/Semver.sol"; import { Semver } from "../universal/Semver.sol";
...@@ -244,6 +244,35 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver { ...@@ -244,6 +244,35 @@ contract FaultDisputeGame is IFaultDisputeGame, Clone, Semver {
move(_parentIndex, _claim, false); move(_parentIndex, _claim, false);
} }
/// @inheritdoc IFaultDisputeGame
function addLocalData(uint256 _ident) external {
// INVARIANT: Local data can only be added if the game is currently in progress.
if (status != GameStatus.IN_PROGRESS) revert GameNotInProgress();
IPreimageOracle oracle = VM.oracle();
if (_ident == 1) {
// Load the L1 head hash into the game's local context in the preimage oracle.
oracle.loadLocalData(_ident, Hash.unwrap(l1Head), 32);
} else if (_ident == 2) {
// Load the earliest output root that commits to the passed L2 block number
// into the game's local context in the preimage oracle.
// TODO(clabby): Add an immutable for the L2OO.
} else if (_ident == 3) {
// Load the root claim into the game's local context in the preimage oracle.
oracle.loadLocalData(_ident, Claim.unwrap(rootClaim()), 32);
} else if (_ident == 4) {
// Load the L2 block number into the game's local context in the preimage oracle.
// The L2 block number is stored as a big-endian uint64 in the upper 8 bytes of the
// passed word.
oracle.loadLocalData(_ident, bytes32(l2BlockNumber() << 192), 8);
} else if (_ident == 5) {
// Load the chain ID into the game's local context in the preimage oracle.
// The chain ID is stored as a big-endian uint64 in the upper 8 bytes of the
// passed word.
oracle.loadLocalData(_ident, bytes32(block.chainid << 192), 8);
}
}
/// @inheritdoc IFaultDisputeGame /// @inheritdoc IFaultDisputeGame
function l2BlockNumber() public pure returns (uint256 l2BlockNumber_) { function l2BlockNumber() public pure returns (uint256 l2BlockNumber_) {
l2BlockNumber_ = _getArgUint256(0x20); l2BlockNumber_ = _getArgUint256(0x20);
......
...@@ -39,15 +39,5 @@ interface IBigStepper { ...@@ -39,15 +39,5 @@ interface IBigStepper {
/// @notice Temporary interface for the `IPreimageOracle`. Remove once we've upgraded /// @notice Temporary interface for the `IPreimageOracle`. Remove once we've upgraded
/// the cannon contracts to a newer version of solc. /// the cannon contracts to a newer version of solc.
interface IPreimageOracle { interface IPreimageOracle {
/// @notice Loads a local data part into the preimage oracle. function loadLocalData(uint256 _ident, bytes32 _word, uint8 _size) external;
/// @param _partOffset The offset of the local data part.
/// @param _ident The identifier of the local data.
/// @param _part The local data part.
/// @param _size The size of the local data.
function loadLocalPart(
uint256 _partOffset,
uint256 _ident,
bytes32 _part,
uint256 _size
) external;
} }
...@@ -53,6 +53,10 @@ interface IFaultDisputeGame is IDisputeGame { ...@@ -53,6 +53,10 @@ interface IFaultDisputeGame is IDisputeGame {
bytes calldata _proof bytes calldata _proof
) external; ) external;
/// @notice Posts the requested local data to the VM's `PreimageOralce`.
/// @param _ident The local identifier of the data to post.
function addLocalData(uint256 _ident) external;
/// @notice Returns the L1 block hash at the time of the game's creation. /// @notice Returns the L1 block hash at the time of the game's creation.
function l1Head() external view returns (Hash l1Head_); function l1Head() external view returns (Hash l1Head_);
......
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