diff --git a/contracts/generated/SystemDeployer/SystemDeployer.go b/contracts/generated/SystemDeployer/SystemDeployer.go index fcffdeafe9..08ee7c699b 100644 --- a/contracts/generated/SystemDeployer/SystemDeployer.go +++ b/contracts/generated/SystemDeployer/SystemDeployer.go @@ -32,7 +32,7 @@ var ( // SystemDeployerMetaData contains all meta data concerning the SystemDeployer contract. var SystemDeployerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051615ca7380380615ca783398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c878339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c87833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c878339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c878339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610e368061061183390190565b6107c68061144783390190565b611d0080611c0d83390190565b6110f08061390d83390190565b61128a806149fd83390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220d6d4d7132e8631956841e9da61cd856e5aaa08ec2049993d13224b35601df7d064736f6c634300081c00336080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", + Bin: "0x608060405234801561001057600080fd5b50604051615c6f380380615c6f83398101604081905261002f916103e7565b61003881610060565b6000610044828261011d565b905061005082826101e2565b610059826102a2565b50506105c4565b600060405161006e90610373565b604051809103906000f08015801561008a573d6000803e3d6000fd5b509050600063c4d66de860e01b836040516024016100a8919061041c565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006100f083858461032f60201b60201c565b9050600080516020615c4f8339815191528160405161010f919061045e565b60405180910390a150505050565b60008060405161012c90610380565b604051809103906000f080158015610148573d6000803e3d6000fd5b509050600063da35a26f60e01b8486604051602401610168929190610483565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b038381831617835250505050905060006101b083878461032f60201b60201c565b9050600080516020615c4f833981519152816040516101cf91906104b7565b60405180910390a1925050505b92915050565b60006040516101f09061038d565b604051809103906000f08015801561020c573d6000803e3d6000fd5b509050600063485cc95560e01b848460405160240161022c9291906104c7565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600061027483868461032f60201b60201c565b9050600080516020615c4f8339815191528160405161029391906104f4565b60405180910390a15050505050565b60006040516102b09061039a565b604051809103906000f0801580156102cc573d6000803e3d6000fd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250906000906103109084908690859061032f16565b9050600080516020615c4f8339815191528160405161010f9190610528565b600080848484604051610341906103a7565b61034d9392919061058e565b604051809103906000f080158015610369573d6000803e3d6000fd5b5095945050505050565b610dfe8061061183390190565b6107c68061140f83390190565b611d0080611bd583390190565b6110f0806138d583390190565b61128a806149c583390190565b60006001600160a01b0382166101dc565b6103ce816103b4565b81146103d957600080fd5b50565b80516101dc816103c5565b6000602082840312156103fc576103fc600080fd5b61040683836103dc565b9392505050565b610416816103b4565b82525050565b602081016101dc828461040d565b60198152602081017f5472616e73616374696f6e73506f737450726f636573736f7200000000000000815290505b60200190565b6040808252810161046e8161042a565b90506101dc602083018461040d565b80610416565b60408101610491828561047d565b610406602083018461040d565b6004815260208101634665657360e01b81529050610458565b6040808252810161046e8161049e565b60408101610491828561040d565b600a815260208101694d65737361676542757360b01b81529050610458565b6040808252810161046e816104d5565b600f8152602081016e5075626c696343616c6c6261636b7360881b81529050610458565b6040808252810161046e81610504565b60005b8381101561055357818101518382015260200161053b565b50506000910152565b6000610566825190565b80845260208401935061057d818560208601610538565b601f01601f19169290920192915050565b6060810161059c828661040d565b6105a9602083018561040d565b81810360408301526105bb818461055c565b95945050505050565b603f806105d26000396000f3fe6080604052600080fdfea2646970667358221220cfb9abdae2b57cca2b06e1592a881ffea4f5fb7d2226145858f8312ae691b7f664736f6c634300081c00336080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6106ed806100d96000396000f3fe60806040526004361061007f5760003560e01c8063afe997ea1161004e578063afe997ea1461012c578063da35a26f14610141578063f1d44d5114610161578063f2fde38b1461018157600080fd5b806323aa2a9d1461008b578063715018a6146100ad5780638da5cb5b146100c25780639003adfe1461011057600080fd5b3661008657005b600080fd5b34801561009757600080fd5b506100ab6100a6366004610575565b6101a1565b005b3480156100b957600080fd5b506100ab6101ae565b3480156100ce57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161010791906105bb565b60405180910390f35b34801561011c57600080fd5b50475b60405161010791906105cf565b34801561013857600080fd5b506100ab6101c2565b34801561014d57600080fd5b506100ab61015c3660046105f1565b610225565b34801561016d57600080fd5b5061011f61017c366004610575565b61036d565b34801561018d57600080fd5b506100ab61019c366004610629565b610383565b6101a96103e0565b600055565b6101b66103e0565b6101c06000610454565b565b6101ca6103e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610222573d6000803e3d6000fd5b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102705750825b905060008267ffffffffffffffff16600114801561028d5750303b155b90508115801561029b575080155b156102d2576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561030657845468ff00000000000000001916680100000000000000001785555b61030f866104dd565b6000879055831561036457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061035b90600190610663565b60405180910390a15b50505050505050565b60008160005461037d91906106a0565b92915050565b61038b6103e0565b6001600160a01b0381166103d75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b60405180910390fd5b61022281610454565b336104127f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146101c057336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016103ce91906105bb565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6104e56104ee565b61022281610555565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166101c0576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61038b6104ee565b805b811461022257600080fd5b803561037d8161055d565b60006020828403121561058a5761058a600080fd5b610594838361056a565b9392505050565b60006001600160a01b03821661037d565b6105b58161059b565b82525050565b6020810161037d82846105ac565b806105b5565b6020810161037d82846105c9565b61055f8161059b565b803561037d816105dd565b6000806040838503121561060757610607600080fd5b610611848461056a565b915061062084602085016105e6565b90509250929050565b60006020828403121561063e5761063e600080fd5b61059483836105e6565b600067ffffffffffffffff821661037d565b6105b581610648565b6020810161037d828461065a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818102811582820484141761037d5761037d61067156fea26469706673582212203b15352e8f587de7fab730ebe897ce1d19b5fb0f5a07f4e8af1cc73861e46f5864736f6c634300081c0033608060405234801561001057600080fd5b5061001a33610027565b610022610098565b61014a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100e85760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101475780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611ba7806101596000396000f3fe6080604052600436106100cb5760003560e01c80638da5cb5b11610074578063ab53bddc1161004e578063ab53bddc146102b0578063b1454caa146102d0578063f2fde38b146102f05761013f565b80638da5cb5b1461022b5780639730886d1461027057806399a3ad21146102905761013f565b806336d2da90116100a557806336d2da90146101d6578063485cc955146101f6578063715018a6146102165761013f565b80630fcfbd111461016057806333a88c7214610196578063346633fb146101c35761013f565b3661013f576040517f346633fb000000000000000000000000000000000000000000000000000000008152309063346633fb9034906101109033908390600401610e2b565b6000604051808303818588803b15801561012957600080fd5b505af115801561013d573d6000803e3d6000fd5b005b60405162461bcd60e51b815260040161015790610e7a565b60405180910390fd5b34801561016c57600080fd5b5061018061017b366004610ea5565b610310565b60405161018d9190610ee0565b60405180910390f35b3480156101a257600080fd5b506101b66101b1366004610ea5565b61036f565b60405161018d9190610ef6565b61013d6101d1366004610f34565b6103c1565b3480156101e257600080fd5b5061013d6101f1366004610f6c565b610510565b34801561020257600080fd5b5061013d610211366004610f8b565b61058f565b34801561022257600080fd5b5061013d6106fa565b34801561023757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031660405161018d9190610fba565b34801561027c57600080fd5b5061013d61028b366004610fc8565b61070e565b34801561029c57600080fd5b5061013d6102ab366004610f34565b61087a565b3480156102bc57600080fd5b5061013d6102cb366004610f34565b6108fa565b6102e36102de366004611091565b6109c3565b60405161018d919061111e565b3480156102fc57600080fd5b5061013d61030b366004610f6c565b610acb565b6000808260405160200161032491906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150806103685760405162461bcd60e51b815260040161015790611336565b9392505050565b6000808260405160200161038391906112cb565b60408051601f19818403018152918152815160209283012060008181529283905291205490915080158015906103b95750428111155b949350505050565b6000341180156103d057508034145b6103ec5760405162461bcd60e51b81526004016101579061139e565b60035434906001600160a01b0316156104b0576000610409610b22565b90508034101561042b5760405162461bcd60e51b8152600401610157906113de565b6104358134611404565b6003546040519193506000916001600160a01b039091169083908381818185875af1925050503d8060008114610487576040519150601f19603f3d011682016040523d82523d6000602084013e61048c565b606091505b50509050806104ad5760405162461bcd60e51b81526004016101579061146f565b50505b60006104bb33610bb3565b9050836001600160a01b0316336001600160a01b03167f50c536ac33a920f00755865b831d17bf4cff0b2e0345f65b16d52bfc004068b6848460405161050292919061147f565b60405180910390a350505050565b610518610c11565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610565576040519150601f19603f3d011682016040523d82523d6000602084013e61056a565b606091505b505090508061058b5760405162461bcd60e51b8152600401610157906114cc565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105da5750825b905060008267ffffffffffffffff1660011480156105f75750303b155b905081158015610605575080155b1561063c576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561067057845468ff00000000000000001916680100000000000000001785555b61067987610c85565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106f157845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106e890600190611500565b60405180910390a15b50505050505050565b610702610c11565b61070c6000610c96565b565b600061071b60013061150e565b905061074e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806107755750336001600160a01b038216145b6107915760405162461bcd60e51b815260040161015790611563565b600061079d8342611573565b90506000846040516020016107b291906112cb565b60408051601f198184030181529181528151602092830120600081815292839052912054909150156107f65760405162461bcd60e51b8152600401610157906115de565b60008181526020818152604082208490556001919061081790880188610f6c565b6001600160a01b03168152602081019190915260400160009081209061084360808801606089016115ee565b63ffffffff168152602080820192909252604001600090812080546001810182559082529190208691600402016106f18282611a37565b610882610c11565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146108cf576040519150601f19603f3d011682016040523d82523d6000602084013e6108d4565b606091505b50509050806108f55760405162461bcd60e51b8152600401610157906114cc565b505050565b600061090760013061150e565b905061093a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316336001600160a01b031614806109615750336001600160a01b038216145b61097d5760405162461bcd60e51b815260040161015790611563565b826001600160a01b03167fcd9850463422a7449c406a036e35e5edb6fbe35a64c9f12a2354be98a750c0d3836040516109b69190610ee0565b60405180910390a2505050565b6003546000906001600160a01b031615610a74576109e083610d14565b3410156109ff5760405162461bcd60e51b815260040161015790611a99565b6003546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610a4c576040519150601f19603f3d011682016040523d82523d6000602084013e610a51565b606091505b5050905080610a725760405162461bcd60e51b81526004016101579061146f565b505b610a7d33610bb3565b90507fb93c37389233beb85a3a726c3f15c2d15533ee74cb602f20f490dfffef77593733828888888888604051610aba9796959493929190611aa9565b60405180910390a195945050505050565b610ad3610c11565b6001600160a01b038116610b165760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610b1f81610c96565b50565b6003546040517ff1d44d510000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f1d44d5190610b6d90602090600401611b15565b602060405180830381865afa158015610b8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bae9190611b2e565b905090565b6001600160a01b0381166000908152600260205260408120805467ffffffffffffffff169160019190610be68385611b4d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b33610c437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461070c57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016101579190610fba565b610c8d610d96565b610b1f81610dfd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6003546000906001600160a01b031663f1d44d51610d33601185611573565b6040518263ffffffff1660e01b8152600401610d4f9190610ee0565b602060405180830381865afa158015610d6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d909190611b2e565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff1661070c576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ad3610d96565b60006001600160a01b038216610d90565b610e1f81610e05565b82525050565b80610e1f565b60408101610e398285610e16565b6103686020830184610e25565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b60208082528101610d9081610e46565b600060c08284031215610e9f57610e9f600080fd5b50919050565b600060208284031215610eba57610eba600080fd5b813567ffffffffffffffff811115610ed457610ed4600080fd5b6103b984828501610e8a565b60208101610d908284610e25565b801515610e1f565b60208101610d908284610eee565b610f0d81610e05565b8114610b1f57600080fd5b8035610d9081610f04565b80610f0d565b8035610d9081610f23565b60008060408385031215610f4a57610f4a600080fd5b610f548484610f18565b9150610f638460208501610f29565b90509250929050565b600060208284031215610f8157610f81600080fd5b6103688383610f18565b60008060408385031215610fa157610fa1600080fd5b610fab8484610f18565b9150610f638460208501610f18565b60208101610d908284610e16565b60008060408385031215610fde57610fde600080fd5b823567ffffffffffffffff811115610ff857610ff8600080fd5b61100485828601610e8a565b925050610f638460208501610f29565b63ffffffff8116610f0d565b8035610d9081611014565b60008083601f84011261104057611040600080fd5b50813567ffffffffffffffff81111561105b5761105b600080fd5b60208301915083600182028301111561107657611076600080fd5b9250929050565b60ff8116610f0d565b8035610d908161107d565b6000806000806000608086880312156110ac576110ac600080fd5b6110b68787611020565b94506110c58760208801611020565b9350604086013567ffffffffffffffff8111156110e4576110e4600080fd5b6110f08882890161102b565b93509350506111028760608801611086565b90509295509295909350565b67ffffffffffffffff8116610e1f565b60208101610d90828461110e565b506000610d906020830183610f18565b67ffffffffffffffff8116610f0d565b8035610d908161113c565b506000610d90602083018361114c565b506000610d906020830183611020565b63ffffffff8116610e1f565b6000808335601e193685900301811261119e5761119e600080fd5b830160208101925035905067ffffffffffffffff8111156111c1576111c1600080fd5b3681900382131561107657611076600080fd5b82818337506000910152565b8183526020830192506111f48284836111d4565b50601f01601f19160190565b506000610d906020830183611086565b60ff8116610e1f565b600060c08301611229838061112c565b6112338582610e16565b506112416020840184611157565b61124e602086018261110e565b5061125c6040840184611167565b6112696040860182611177565b506112776060840184611167565b6112846060860182611177565b506112926080840184611183565b85830360808701526112a58382846111e0565b925050506112b660a0840184611200565b6112c360a0860182611210565b509392505050565b602080825281016103688184611219565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610d90816112dc565b60308152602081017f417474656d7074696e6720746f2073656e642076616c756520776974686f757481527f2070726f766964696e672045746865720000000000000000000000000000000060208201529050611330565b60208082528101610d9081611346565b60208082527f496e73756666696369656e742066756e647320746f2073656e642076616c75659101908152610e74565b60208082528101610d90816113ae565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9057610d906113ee565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f726163740000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611417565b6040810161148d8285610e25565b610368602083018461110e565b60148152602081017f6661696c65642073656e64696e672076616c756500000000000000000000000081529050610e74565b60208082528101610d908161149a565b6000610d90826114ea565b90565b67ffffffffffffffff1690565b610e1f816114dc565b60208101610d9082846114f7565b6001600160a01b03918216919081169082820390811115610d9057610d906113ee565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050610e74565b60208082528101610d9081611531565b80820180821115610d9057610d906113ee565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f210000000000000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611586565b60006020828403121561160357611603600080fd5b6103688383611020565b60008135610d9081610f04565b60006001600160a01b03835b81169019929092169190911792915050565b6000610d9082610e05565b6000610d9082611638565b61165782611643565b61166281835461161a565b8255505050565b60008135610d908161113c565b60007bffffffffffffffff00000000000000000000000000000000000000006116268460a01b90565b6000610d9067ffffffffffffffff83166114ea565b6116bd8261169f565b611662818354611676565b60008135610d9081611014565b60007fffffffff000000000000000000000000000000000000000000000000000000006116268460e01b90565b600063ffffffff8216610d90565b61171982611702565b6116628183546116d5565b600063ffffffff83611626565b61173a82611702565b611662818354611724565b6000808335601e193685900301811261176057611760600080fd5b8301915050803567ffffffffffffffff81111561177f5761177f600080fd5b60208201915060018102360382131561107657611076600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806117da57607f821691505b602082108103610e9f57610e9f6117b0565b6000610d906114e78381565b611801836117ec565b815460001960089490940293841b1916921b91909117905550565b60006108f58184846117f8565b8181101561058b5761183c60008261181c565b600101611829565b601f8211156108f5576000818152602090206020601f8501048101602085101561186b5750805b61187d6020601f860104830182611829565b5050505050565b8267ffffffffffffffff81111561189d5761189d61179a565b6118a782546117c6565b6118b2828285611844565b506000601f8211600181146118e757600083156118cf5750848201355b600019600885021c1981166002850217855550611941565b600084815260209020601f19841690835b8281101561191857878501358255602094850194600190920191016118f8565b5084821015611935576000196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b6108f5838383611884565b60008135610d908161107d565b600060ff8216610d90565b61197582611961565b815460ff191660ff821617611662565b8082806119918161160d565b905061199d818461164e565b505060208301806119ad82611669565b90506119b981846116b4565b505060408301806119c9826116c8565b90506119d58184611710565b50505060608201806119e6826116c8565b90506119f58160018501611731565b5050611a046080830183611745565b611a12818360028601611949565b505060a0820180611a2282611954565b9050611a31816003850161196c565b50505050565b61058b8282611985565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f737361676500000000000000000000000000000000000000000000000000000060208201529050611330565b60208082528101610d9081611a41565b60c08101611ab7828a610e16565b611ac4602083018961110e565b611ad16040830188611177565b611ade6060830187611177565b8181036080830152611af18185876111e0565b9050611b0060a0830184611210565b98975050505050505050565b610e1f816117ec565b60208101610d908284611b0c565b8051610d9081610f23565b600060208284031215611b4357611b43600080fd5b6103688383611b23565b67ffffffffffffffff918216919081169082820190811115610d9057610d906113ee56fea26469706673582212205827e6100538af9307eff1914e07e481a82d2ed05aab2e5cf52b967c89af264964736f6c634300081c00336080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611017806100d96000396000f3fe6080604052600436106100595760003560e01c806382fbdc9c1161004357806382fbdc9c146100ae578063929d34e9146100ce578063a67e1760146100ee57600080fd5b8062e0d3b51461005e5780638129fc1c14610097575b600080fd5b34801561006a57600080fd5b5061007e610079366004610a7a565b610103565b60405161008e9493929190610b15565b60405180910390f35b3480156100a357600080fd5b506100ac6101be565b005b6100c16100bc366004610bac565b610300565b60405161008e9190610bf4565b3480156100da57600080fd5b506100ac6100e9366004610a7a565b610368565b3480156100fa57600080fd5b506100ac61050d565b600060208190529081526040902080546001820180546001600160a01b03909216929161012f90610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461015b90610c18565b80156101a85780601f1061017d576101008083540402835291602001916101a8565b820191906000526020600020905b81548152906001019060200180831161018b57829003601f168201915b5050505050908060020154908060030154905084565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156102095750825b905060008267ffffffffffffffff1660011480156102265750303b155b905081158015610234575080155b1561026b576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561029f57845468ff00000000000000001916680100000000000000001785555b6000600181905560025583156102f957845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906102f090600190610c68565b60405180910390a15b5050505050565b600080341161032a5760405162461bcd60e51b815260040161032190610caa565b60405180910390fd5b6152086103363461055f565b116103535760405162461bcd60e51b815260040161032190610cba565b61035f3384843461056b565b90505b92915050565b60008181526020818152604080832081516080810190925280546001600160a01b0316825260018101805492939192918401916103a490610c18565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090610c18565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b50505050508152602001600282015481526020016003820154815250509050600081600001516001600160a01b0316826020015160405161045e9190610d3d565b6000604051808303816000865af19150503d806000811461049b576040519150601f19603f3d011682016040523d82523d6000602084013e6104a0565b606091505b50509050806104c15760405162461bcd60e51b815260040161032190610d79565b6000838152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906104f86001830182610a25565b50600060028201819055600390910155505050565b600061051a600130610d9f565b9050336001600160a01b038216146105445760405162461bcd60e51b815260040161032190610df4565b6002546001541461055c57610557610654565b610544565b50565b60006103624883610e1a565b60006040518060800160405280866001600160a01b0316815260200185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506020820185905248604090920191909152600180548291826105e083610e2e565b9091555081526020808201929092526040016000208251815473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039091161781559082015160018201906106319082610ef7565b506040820151600282015560609091015160039091015550600154949350505050565b6002546001540361066157565b60008061066c61077f565b91509150600082606001519050600081846040015161068b9190610e1a565b905060005a9050600085600001516001600160a01b03168387602001516040516106b59190610d3d565b60006040518083038160008787f1925050503d80600081146106f3576040519150601f19603f3d011682016040523d82523d6000602084013e6106f8565b606091505b5050905060005a9050600061070d8285610fb7565b905060008186111561073157866107248388610fb7565b61072e9190610fca565b90505b6000818a604001516107439190610fb7565b8a51909150851561075657610756610897565b61075e6108e3565b61076983828c6108fa565b610772826109da565b5050505050505050505050565b6107b3604051806080016040528060006001600160a01b031681526020016060815260200160008152602001600081525090565b60025460008181526020818152604080832081516080810190925280546001600160a01b03168252600181018054949591949193859290840191906107f790610c18565b80601f016020809104026020016040519081016040528092919081815260200182805461082390610c18565b80156108705780601f1061084557610100808354040283529160200191610870565b820191906000526020600020905b81548152906001019060200180831161085357829003601f168201915b50505050508152602001600282015481526020016003820154815250509150915091509091565b6002546000908152602081905260408120805473ffffffffffffffffffffffffffffffffffffffff19168155906108d16001830182610a25565b50600060028201819055600390910155565b600280549060006108f383610e2e565b9190505550565b6000826001600160a01b0316846188b8908460405160240161091c9190610bf4565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f5ea39558000000000000000000000000000000000000000000000000000000001790525161097f9190610d3d565b600060405180830381858888f193505050503d80600081146109bd576040519150601f19603f3d011682016040523d82523d6000602084013e6109c2565b606091505b50509050806109d4576109d4846109da565b50505050565b806000036109e55750565b60405141908290600081818185875af1925050503d80600081146109d4576040519150601f19603f3d011682016040523d82523d6000602084013e6109d4565b508054610a3190610c18565b6000825580601f10610a41575050565b601f01602090049060005260206000209081019061055c91905b80821115610a6f5760008155600101610a5b565b5090565b8035610362565b600060208284031215610a8f57610a8f600080fd5b61035f8383610a73565b60006001600160a01b038216610362565b610ab381610a99565b82525050565b60005b83811015610ad4578181015183820152602001610abc565b50506000910152565b6000610ae7825190565b808452602084019350610afe818560208601610ab9565b601f01601f19169290920192915050565b80610ab3565b60808101610b238287610aaa565b8181036020830152610b358186610add565b9050610b446040830185610b0f565b610b516060830184610b0f565b95945050505050565b60008083601f840112610b6f57610b6f600080fd5b50813567ffffffffffffffff811115610b8a57610b8a600080fd5b602083019150836001820283011115610ba557610ba5600080fd5b9250929050565b60008060208385031215610bc257610bc2600080fd5b823567ffffffffffffffff811115610bdc57610bdc600080fd5b610be885828601610b5a565b92509250509250929050565b602081016103628284610b0f565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610c2c57607f821691505b602082108103610c3e57610c3e610c02565b50919050565b600061036282610c52565b90565b67ffffffffffffffff1690565b610ab381610c44565b602081016103628284610c5f565b600d8152602081017f4e6f2076616c75652073656e7400000000000000000000000000000000000000815290505b60200190565b6020808252810161036281610c76565b6020808252810161036281602481527f47617320746f6f206c6f7720636f6d706172656420746f20636f7374206f662060208201527f63616c6c00000000000000000000000000000000000000000000000000000000604082015260600190565b6000610d25825190565b610d33818560208601610ab9565b9290920192915050565b6103628183610d1b565b60198152602081017f43616c6c6261636b20657865637574696f6e206661696c65640000000000000081529050610ca4565b6020808252810161036281610d47565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0391821691908116908282039081111561036257610362610d89565b60088152602081017f4e6f742073656c6600000000000000000000000000000000000000000000000081529050610ca4565b6020808252810161036281610dc2565b634e487b7160e01b600052601260045260246000fd5b600082610e2957610e29610e04565b500490565b600060018201610e4057610e40610d89565b5060010190565b634e487b7160e01b600052604160045260246000fd5b6000610362610c4f8381565b610e7283610e5d565b815460001960089490940293841b1916921b91909117905550565b6000610e9a818484610e69565b505050565b81811015610eba57610eb2600082610e8d565b600101610e9f565b5050565b601f821115610e9a576000818152602090206020601f85010481016020851015610ee55750805b6102f96020601f860104830182610e9f565b815167ffffffffffffffff811115610f1157610f11610e47565b610f1b8254610c18565b610f26828285610ebe565b506020601f821160018114610f5b5760008315610f435750848201515b600019600885021c19811660028502178555506102f9565b600084815260208120601f198516915b82811015610f8b5787850151825560209485019460019092019101610f6b565b5084821015610fa85783870151600019601f87166008021c191681555b50505050600202600101905550565b8181038181111561036257610362610d89565b818102811582820484141761036257610362610d8956fea264697066735822122022c0117e92f6ffb3d46b462f20642839c7b4f030bf531f7cf3eb5d72325f73f664736f6c634300081c003360a060405260405161128a38038061128a8339810160408190526100229161046a565b828161002e8282610089565b50508160405161003d9061031d565b61004791906104df565b604051809103906000f080158015610063573d6000803e3d6000fd5b506001600160a01b031660805261008161007c60805190565b6100e8565b505050610534565b6100928261014b565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156100dc576100d782826101c5565b505050565b6100e461023e565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61012860008051602061126a833981519152546001600160a01b031690565b826040516101379291906104ed565b60405180910390a16101488161025f565b50565b806001600160a01b03163b6000036101815780604051634c9c8ce360e01b815260040161017891906104df565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b0316846040516101e2919061052a565b600060405180830381855af49150503d806000811461021d576040519150601f19603f3d011682016040523d82523d6000602084013e610222565b606091505b50909250905061023385838361029e565b925050505b92915050565b341561025d5760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116610289576000604051633173bdd160e11b815260040161017891906104df565b8060008051602061126a8339815191526101a4565b6060826102b3576102ae826102f4565b6102ed565b81511580156102ca57506001600160a01b0384163b155b156102ea5783604051639996b31560e01b815260040161017891906104df565b50805b9392505050565b8051156103045780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6106eb80610b7f83390190565b60006001600160a01b038216610238565b6103448161032a565b811461014857600080fd5b80516102388161033b565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681016001600160401b03811182821017156103955761039561035a565b6040525050565b60006103a760405190565b90506103b38282610370565b919050565b60006001600160401b038211156103d1576103d161035a565b601f19601f83011660200192915050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b6000610419610414846103b8565b61039c565b905082815283838301111561043057610430600080fd5b6102ed8360208301846103e2565b600082601f83011261045257610452600080fd5b8151610462848260208601610406565b949350505050565b60008060006060848603121561048257610482600080fd5b61048c858561034f565b925061049b856020860161034f565b60408501519092506001600160401b038111156104ba576104ba600080fd5b6104c68682870161043e565b9150509250925092565b6104d98161032a565b82525050565b6020810161023882846104d0565b604081016104fb82856104d0565b6102ed60208301846104d0565b6000610512825190565b6105208185602086016103e2565b9290920192915050565b6102388183610508565b60805161063161054e6000396000601001526106316000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c5576000357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100bb576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c36100cd565b565b6100c36100fc565b6000806100dd36600481846103cf565b8101906100ea9190610539565b915091506100f8828261010c565b5050565b6100c3610107610167565b61019f565b610115826101c3565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561015f5761015a828261026b565b505050565b6100f86102e3565b600061019a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156101be573d6000f35b3d6000fd5b806001600160a01b03163b60000361021257806040517f4c9c8ce3000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161028891906105f1565b600060405180830381855af49150503d80600081146102c3576040519150601f19603f3d011682016040523d82523d6000602084013e6102c8565b606091505b50915091506102d885838361031b565b925050505b92915050565b34156100c3576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103305761032b8261038a565b610383565b815115801561034757506001600160a01b0384163b155b1561038057836040517f9996b315000000000000000000000000000000000000000000000000000000008152600401610209919061059d565b50805b9392505050565b80511561039a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b600080858511156103e2576103e2600080fd5b838611156103f2576103f2600080fd5b5050820193919092039150565b60006001600160a01b0382166102dd565b610419816103ff565b81146103cc57600080fd5b80356102dd81610410565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff821117156104845761048461042f565b6040525050565b600061049660405190565b90506104a2828261045e565b919050565b600067ffffffffffffffff8211156104c1576104c161042f565b601f19601f83011660200192915050565b82818337506000910152565b60006104f16104ec846104a7565b61048b565b905082815283838301111561050857610508600080fd5b6103838360208301846104d2565b600082601f83011261052a5761052a600080fd5b610383838335602085016104de565b6000806040838503121561054f5761054f600080fd5b6105598484610424565b9150602083013567ffffffffffffffff81111561057857610578600080fd5b61058485828601610516565b9150509250929050565b610597816103ff565b82525050565b602081016102dd828461058e565b60005b838110156105c65781810151838201526020016105ae565b50506000910152565b60006105d9825190565b6105e78185602086016105ab565b9290920192915050565b6102dd81836105cf56fea264697066735822122010d1880687d5a44f0a558c272f84fabbd9bf65d697170ee3f6681c2467feb26164736f6c634300081c0033608060405234801561001057600080fd5b506040516106eb3803806106eb83398101604081905261002f916100f8565b806001600160a01b038116610063576000604051631e4fbdf760e01b815260040161005a919061012d565b60405180910390fd5b61006c81610073565b505061013b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6100df816100c3565b81146100ea57600080fd5b50565b80516100d0816100d6565b60006020828403121561010d5761010d600080fd5b61011783836100ed565b9392505050565b610127816100c3565b82525050565b602081016100d0828461011e565b6105a18061014a6000396000f3fe60806040526004361061005a5760003560e01c80639623609d116100435780639623609d146100a5578063ad3cb1cc146100b8578063f2fde38b1461010e57600080fd5b8063715018a61461005f5780638da5cb5b14610076575b600080fd5b34801561006b57600080fd5b5061007461012e565b005b34801561008257600080fd5b506000546001600160a01b031660405161009c91906102fa565b60405180910390f35b6100746100b3366004610457565b610142565b3480156100c457600080fd5b506101016040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009c9190610513565b34801561011a57600080fd5b50610074610129366004610524565b6101ca565b61013661022a565b6101406000610270565b565b61014a61022a565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef2869034906101939086908690600401610543565b6000604051808303818588803b1580156101ac57600080fd5b505af11580156101c0573d6000803e3d6000fd5b5050505050505050565b6101d261022a565b6001600160a01b03811661021e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b60405180910390fd5b61022781610270565b50565b6000546001600160a01b0316331461014057336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161021591906102fa565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b0382165b92915050565b6102f4816102d8565b82525050565b602081016102e582846102eb565b60006102e5826102d8565b61031c81610308565b811461022757600080fd5b80356102e581610313565b61031c816102d8565b80356102e581610332565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b601f19601f830116810181811067ffffffffffffffff8211171561039b5761039b610346565b6040525050565b60006103ad60405190565b90506103b98282610375565b919050565b600067ffffffffffffffff8211156103d8576103d8610346565b601f19601f83011660200192915050565b82818337506000910152565b6000610408610403846103be565b6103a2565b905082815283838301111561041f5761041f600080fd5b61042d8360208301846103e9565b9392505050565b600082601f83011261044857610448600080fd5b61042d838335602085016103f5565b60008060006060848603121561046f5761046f600080fd5b6104798585610327565b9250610488856020860161033b565b9150604084013567ffffffffffffffff8111156104a7576104a7600080fd5b6104b386828701610434565b9150509250925092565b60005b838110156104d85781810151838201526020016104c0565b50506000910152565b60006104eb825190565b8084526020840193506105028185602086016104bd565b601f01601f19169290920192915050565b6020808252810161042d81846104e1565b60006020828403121561053957610539600080fd5b61042d838361033b565b6040810161055182856102eb565b818103602083015261056381846104e1565b94935050505056fea264697066735822122096c3a562b6861bd964d97d99d95931f7343ac03c64bc04aeab6287f6e42e45eb64736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69", } // SystemDeployerABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go index 0e7169a760..eccf52712c 100644 --- a/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go +++ b/contracts/generated/TransactionPostProcessor/TransactionPostProcessor.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // TransactionPostProcessorMetaData contains all meta data concerning the TransactionPostProcessor contract. var TransactionPostProcessorMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"transactionsLength\",\"type\":\"uint256\"}],\"name\":\"TransactionsConverted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"EOA_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"callbackAddress\",\"type\":\"address\"}],\"name\":\"addOnBlockEndCallback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b50610e178061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc366004610835565b610265565b6040516100ee9190610865565b60405180910390f35b61011a610105366004610884565b60009081526020819052604090206001015490565b6040516100ee91906108a9565b61013a6101353660046108dc565b6102fe565b005b61013a61014a3660046108dc565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a610184366004610966565b61037a565b6100e16101973660046108dc565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d63660046109ae565b6104ca565b61013a6101e93660046108dc565b61063a565b61013a6101fc3660046109ae565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000828152602081905260409020600101546103198161065f565b610323838361066c565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6103758282610716565b505050565b60006103876001306109e3565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a3a565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a7c565b6040517f3357352afe45ddda257f56623a512152c527b6f11555ec2fb2fdbbe72ddece419061040b9084906108a9565b60405180910390a160005b6001548110156103235760006001828154811061043557610435610a8c565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af9061048c9088908890600401610d83565b600060405180830381600087803b1580156104a657600080fd5b505af11580156104ba573d6000803e3d6000fd5b5050505050806001019050610416565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105155750825b905060008267ffffffffffffffff1660011480156105325750303b155b905081158015610540575080155b15610577576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105ab57845468ff00000000000000001916680100000000000000001785555b6105b660008761066c565b506105e17ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a5988761066c565b50831561063257845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061062990600190610db8565b60405180910390a15b505050505050565b6000828152602081905260409020600101546106558161065f565b6103238383610716565b6106698133610799565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661070e576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556106c63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561070e576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107f75780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610dc6565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461066957600080fd5b80356102f8816107fb565b60006020828403121561084a5761084a600080fd5b610854838361082a565b9392505050565b8015155b82525050565b602081016102f8828461085b565b8061081f565b80356102f881610873565b60006020828403121561089957610899600080fd5b6108548383610879565b8061085f565b602081016102f882846108a3565b60006001600160a01b0382166102f8565b61081f816108b7565b80356102f8816108c8565b600080604083850312156108f2576108f2600080fd5b6108fc8484610879565b915061090b84602085016108d1565b90509250929050565b60008083601f84011261092957610929600080fd5b50813567ffffffffffffffff81111561094457610944600080fd5b60208301915083602082028301111561095f5761095f600080fd5b9250929050565b6000806020838503121561097c5761097c600080fd5b823567ffffffffffffffff81111561099657610996600080fd5b6109a285828601610914565b92509250509250929050565b6000602082840312156109c3576109c3600080fd5b61085483836108d1565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f86109cd565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f881610a06565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e7665727400000000000081529050610a34565b602080825281016102f881610a4a565b634e487b7160e01b600052603260045260246000fd5b60ff811661081f565b80356102f881610aa2565b5060006102f86020830183610aab565b60ff811661085f565b5060006102f86020830183610879565b5060006102f860208301836108d1565b61085f816108b7565b6000808335601e1936859003018112610b1357610b13600080fd5b830160208101925035905067ffffffffffffffff811115610b3657610b36600080fd5b3681900382131561095f5761095f600080fd5b82818337506000910152565b818352602083019250610b69828483610b49565b50601f01601f19160190565b80151561081f565b80356102f881610b75565b5060006102f86020830183610b7d565b67ffffffffffffffff811661081f565b80356102f881610b98565b5060006102f86020830183610ba8565b67ffffffffffffffff811661085f565b60006101408301610be48380610ab6565b610bee8582610ac6565b50610bfc6020840184610acf565b610c0960208601826108a3565b50610c176040840184610acf565b610c2460408601826108a3565b50610c326060840184610acf565b610c3f60608601826108a3565b50610c4d6080840184610adf565b610c5a6080860182610aef565b50610c6860a0840184610acf565b610c7560a08601826108a3565b50610c8360c0840184610af8565b85830360c0870152610c96838284610b55565b92505050610ca760e0840184610adf565b610cb460e0860182610aef565b50610cc3610100840184610b88565b610cd161010086018261085b565b50610ce0610120840184610bb3565b610cee610120860182610bc3565b509392505050565b60006108548383610bd3565b6000823561013e1936849003018112610d1d57610d1d600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d76578484038952610d548284610d02565b610d5e8582610cf6565b94505060208201602099909901989150600101610d3d565b5091979650505050505050565b60208082528101610d95818486610d26565b949350505050565b600067ffffffffffffffff82166102f8565b61085f81610d9d565b602081016102f88284610daf565b60408101610dd48285610aef565b61085460208301846108a356fea2646970667358221220c3cf3852209ad93e14f2c95a1ee81360a00fe52f5b9883259bae9ca4c33a0aa064736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b50610ddf8061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c806364c55a9d11610081578063c4d66de81161005b578063c4d66de8146101c8578063d547741f146101db578063ee546fd8146101ee57600080fd5b806364c55a9d1461017657806391d1485414610189578063a217fddf146101c057600080fd5b80632f2ff15d116100b25780632f2ff15d1461012757806336568abe1461013c578063508a50f41461014f57600080fd5b806301ffc9a7146100ce578063248a9ca3146100f7575b600080fd5b6100e16100dc3660046107fd565b610265565b6040516100ee919061082d565b60405180910390f35b61011a61010536600461084c565b60009081526020819052604090206001015490565b6040516100ee9190610871565b61013a6101353660046108a4565b6102fe565b005b61013a61014a3660046108a4565b610329565b61011a7ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59881565b61013a61018436600461092e565b61037a565b6100e16101973660046108a4565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61011a600081565b61013a6101d6366004610976565b610492565b61013a6101e93660046108a4565b610602565b61013a6101fc366004610976565b6001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806102f857507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461031981610627565b6103238383610634565b50505050565b6001600160a01b038116331461036b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61037582826106de565b505050565b60006103876001306109ab565b9050336001600160a01b038216146103ba5760405162461bcd60e51b81526004016103b190610a02565b60405180910390fd5b60008290036103db5760405162461bcd60e51b81526004016103b190610a44565b60005b600154811015610323576000600182815481106103fd576103fd610a54565b6000918252602090912001546040517f9f9976af0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691508190639f9976af906104549088908890600401610d4b565b600060405180830381600087803b15801561046e57600080fd5b505af1158015610482573d6000803e3d6000fd5b50505050508060010190506103de565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156104dd5750825b905060008267ffffffffffffffff1660011480156104fa5750303b155b905081158015610508575080155b1561053f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561057357845468ff00000000000000001916680100000000000000001785555b61057e600087610634565b506105a97ff16bb8781ef1311f8fe06747bcbe481e695502acdcb0cb8c03aa03899e39a59887610634565b5083156105fa57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906105f190600190610d80565b60405180910390a15b505050505050565b60008281526020819052604090206001015461061d81610627565b61032383836106de565b6106318133610761565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166106d6576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561068e3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f8565b5060006102f8565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16156106d6576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016102f8565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166107bf5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016103b1929190610d8e565b5050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461063157600080fd5b80356102f8816107c3565b60006020828403121561081257610812600080fd5b61081c83836107f2565b9392505050565b8015155b82525050565b602081016102f88284610823565b806107e7565b80356102f88161083b565b60006020828403121561086157610861600080fd5b61081c8383610841565b80610827565b602081016102f8828461086b565b60006001600160a01b0382166102f8565b6107e78161087f565b80356102f881610890565b600080604083850312156108ba576108ba600080fd5b6108c48484610841565b91506108d38460208501610899565b90509250929050565b60008083601f8401126108f1576108f1600080fd5b50813567ffffffffffffffff81111561090c5761090c600080fd5b60208301915083602082028301111561092757610927600080fd5b9250929050565b6000806020838503121561094457610944600080fd5b823567ffffffffffffffff81111561095e5761095e600080fd5b61096a858286016108dc565b92509250509250929050565b60006020828403121561098b5761098b600080fd5b61081c8383610899565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b039182169190811690828203908111156102f8576102f8610995565b60088152602081017f4e6f742073656c66000000000000000000000000000000000000000000000000815290505b60200190565b602080825281016102f8816109ce565b601a8152602081017f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000815290506109fc565b602080825281016102f881610a12565b634e487b7160e01b600052603260045260246000fd5b60ff81166107e7565b80356102f881610a6a565b5060006102f86020830183610a73565b60ff8116610827565b5060006102f86020830183610841565b5060006102f86020830183610899565b6108278161087f565b6000808335601e1936859003018112610adb57610adb600080fd5b830160208101925035905067ffffffffffffffff811115610afe57610afe600080fd5b3681900382131561092757610927600080fd5b82818337506000910152565b818352602083019250610b31828483610b11565b50601f01601f19160190565b8015156107e7565b80356102f881610b3d565b5060006102f86020830183610b45565b67ffffffffffffffff81166107e7565b80356102f881610b60565b5060006102f86020830183610b70565b67ffffffffffffffff8116610827565b60006101408301610bac8380610a7e565b610bb68582610a8e565b50610bc46020840184610a97565b610bd1602086018261086b565b50610bdf6040840184610a97565b610bec604086018261086b565b50610bfa6060840184610a97565b610c07606086018261086b565b50610c156080840184610aa7565b610c226080860182610ab7565b50610c3060a0840184610a97565b610c3d60a086018261086b565b50610c4b60c0840184610ac0565b85830360c0870152610c5e838284610b1d565b92505050610c6f60e0840184610aa7565b610c7c60e0860182610ab7565b50610c8b610100840184610b50565b610c99610100860182610823565b50610ca8610120840184610b7b565b610cb6610120860182610b8b565b509392505050565b600061081c8383610b9b565b6000823561013e1936849003018112610ce557610ce5600080fd5b90910192915050565b818352602083019250600083602084028101838060005b87811015610d3e578484038952610d1c8284610cca565b610d268582610cbe565b94505060208201602099909901989150600101610d05565b5091979650505050505050565b60208082528101610d5d818486610cee565b949350505050565b600067ffffffffffffffff82166102f8565b61082781610d65565b602081016102f88284610d77565b60408101610d9c8285610ab7565b61081c602083018461086b56fea2646970667358221220000c7add8ef77f2ce3e54738e1a6216052e3c7d3dfd30f31adc394e073238b4d64736f6c634300081c0033", } // TransactionPostProcessorABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenBase/ZenBase.go b/contracts/generated/ZenBase/ZenBase.go index 41a2034672..d45081b8cf 100644 --- a/contracts/generated/ZenBase/ZenBase.go +++ b/contracts/generated/ZenBase/ZenBase.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // ZenBaseMetaData contains all meta data concerning the ZenBase contract. var ZenBaseMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506040516110e73803806110e783398101604081905261002f91610196565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b815250816003908161007791906102b8565b50600461008482826102b8565b5050506001600160a01b0381166100ba576000604051631e4fbdf760e01b81526004016100b19190610386565b60405180910390fd5b6100c38161010f565b506001600160a01b0381166100ea5760405162461bcd60e51b81526004016100b190610394565b600680546001600160a01b0319166001600160a01b03929092169190911790556103dc565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b61017d81610161565b811461018857600080fd5b50565b805161016e81610174565b6000602082840312156101ab576101ab600080fd5b6101b5838361018b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806101fc57607f821691505b60208210810361020e5761020e6101d2565b50919050565b600061016e6102208381565b90565b61022c83610214565b815460001960089490940293841b1916921b91909117905550565b6000610254818484610223565b505050565b818110156102745761026c600082610247565b600101610259565b5050565b601f821115610254576000818152602090206020601f8501048101602085101561029f5750805b6102b16020601f860104830182610259565b5050505050565b81516001600160401b038111156102d1576102d16101bc565b6102db82546101e8565b6102e6828285610278565b506020601f82116001811461031b57600083156103035750848201515b600019600885021c19811660028502178555506102b1565b600084815260208120601f198516915b8281101561034b578785015182556020948501946001909201910161032b565b50848210156103685783870151600019601f87166008021c191681555b50505050600202600101905550565b61038081610161565b82525050565b6020810161016e8284610377565b6020808252810161016e81602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610cfc806103eb6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f9919061090c565b60405180910390f35b61011561011036600461095e565b6102ad565b6040516100f991906109a0565b6002545b6040516100f991906109b4565b6101156101413660046109c2565b6102c7565b60126040516100f99190610a14565b610126610163366004610a22565b6001600160a01b031660009081526020819052604090205490565b6101866102ed565b005b6005546001600160a01b03166040516100f99190610a4a565b6100ec610301565b6101866101b7366004610aaa565b610310565b6101156101ca36600461095e565b61042b565b6101266101dd366004610af2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b610186610216366004610a22565b610439565b60606003805461022a90610b37565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610b37565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb818585610490565b60019150505b92915050565b6000336102d585828561049d565b6102e0858585610521565b60019150505b9392505050565b6102f5610599565b6102ff60006105df565b565b60606004805461022a90610b37565b6006546001600160a01b031633146103435760405162461bcd60e51b815260040161033a90610b63565b60405180910390fd5b60008190036103645760405162461bcd60e51b815260040161033a90610bc4565b60005b81811015610426576103af83838381811061038457610384610bff565b90506020028101906103969190610c15565b6103a89061010081019060e001610a22565b6001610649565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d18383838181106103e2576103e2610bff565b90506020028101906103f49190610c15565b6104069061010081019060e001610a22565b6001604051610416929190610c52565b60405180910390a1600101610367565b505050565b6000336102bb818585610521565b610441610599565b6001600160a01b0381166104845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b61048d816105df565b50565b6104268383836001610683565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461051b578181101561050c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b61051b84848484036000610683565b50505050565b6001600160a01b0383166105645760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b03821661058e57600060405163ec442f0560e01b815260040161033a9190610a4a565b610426838383610788565b6005546001600160a01b031633146102ff57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661067357600060405163ec442f0560e01b815260040161033a9190610a4a565b61067f60008383610788565b5050565b6001600160a01b0384166106c65760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b0383166107095760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033a9190610a4a565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561051b57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161077a91906109b4565b60405180910390a350505050565b6001600160a01b0383166107b35780600260008282546107a89190610cb3565b9091555061082b9050565b6001600160a01b0383166000908152602081905260409020548181101561080c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033a93929190610c6d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661084757600280548290039055610866565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516108a991906109b4565b60405180910390a3505050565b60005b838110156108d15781810151838201526020016108b9565b50506000910152565b60006108e4825190565b8084526020840193506108fb8185602086016108b6565b601f01601f19169290920192915050565b602080825281016102e681846108da565b60006001600160a01b0382166102c1565b6109378161091d565b811461048d57600080fd5b80356102c18161092e565b80610937565b80356102c18161094d565b6000806040838503121561097457610974600080fd5b61097e8484610942565b915061098d8460208501610953565b90509250929050565b8015155b82525050565b602081016102c18284610996565b8061099a565b602081016102c182846109ae565b6000806000606084860312156109da576109da600080fd5b6109e48585610942565b92506109f38560208601610942565b9150610a028560408601610953565b90509250925092565b60ff811661099a565b602081016102c18284610a0b565b600060208284031215610a3757610a37600080fd5b6102e68383610942565b61099a8161091d565b602081016102c18284610a41565b60008083601f840112610a6d57610a6d600080fd5b50813567ffffffffffffffff811115610a8857610a88600080fd5b602083019150836020820283011115610aa357610aa3600080fd5b9250929050565b60008060208385031215610ac057610ac0600080fd5b823567ffffffffffffffff811115610ada57610ada600080fd5b610ae685828601610a58565b92509250509250929050565b60008060408385031215610b0857610b08600080fd5b610b128484610942565b915061098d8460208501610942565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610b4b57607f821691505b602082108103610b5d57610b5d610b21565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610c3057610c30600080fd5b9190910192915050565b60006102c1610c468381565b90565b61099a81610c3a565b60408101610c608285610a41565b6102e66020830184610c49565b60608101610c7b8286610a41565b610c8860208301856109ae565b610c9560408301846109ae565b949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102c1576102c1610c9d56fea2646970667358221220f7b04cad41f1453ff919861d5ed5be8c01107adbd7a57bb76e5fce821d5bb64664736f6c634300081c0033", + Bin: "0x608060405234801561001057600080fd5b5060405161104a38038061104a83398101604081905261002f91610196565b33604051806040016040528060038152602001622d32b760e91b815250604051806040016040528060038152602001622d22a760e91b815250816003908161007791906102b8565b50600461008482826102b8565b5050506001600160a01b0381166100ba576000604051631e4fbdf760e01b81526004016100b19190610386565b60405180910390fd5b6100c38161010f565b506001600160a01b0381166100ea5760405162461bcd60e51b81526004016100b190610394565b600680546001600160a01b0319166001600160a01b03929092169190911790556103dc565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160a01b0382165b92915050565b61017d81610161565b811461018857600080fd5b50565b805161016e81610174565b6000602082840312156101ab576101ab600080fd5b6101b5838361018b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b6002810460018216806101fc57607f821691505b60208210810361020e5761020e6101d2565b50919050565b600061016e6102208381565b90565b61022c83610214565b815460001960089490940293841b1916921b91909117905550565b6000610254818484610223565b505050565b818110156102745761026c600082610247565b600101610259565b5050565b601f821115610254576000818152602090206020601f8501048101602085101561029f5750805b6102b16020601f860104830182610259565b5050505050565b81516001600160401b038111156102d1576102d16101bc565b6102db82546101e8565b6102e6828285610278565b506020601f82116001811461031b57600083156103035750848201515b600019600885021c19811660028502178555506102b1565b600084815260208120601f198516915b8281101561034b578785015182556020948501946001909201910161032b565b50848210156103685783870151600019601f87166008021c191681555b50505050600202600101905550565b61038081610161565b82525050565b6020810161016e8284610377565b6020808252810161016e81602481527f496e76616c6964207472616e73616374696f6e20616e616c797a6572206164646020820152637265737360e01b604082015260600190565b610c5f806103eb6000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c8063715018a61161008c5780639f9976af116100665780639f9976af146101a9578063a9059cbb146101bc578063dd62ed3e146101cf578063f2fde38b1461020857600080fd5b8063715018a61461017e5780638da5cb5b1461018857806395d89b41146101a157600080fd5b806323b872dd116100bd57806323b872dd14610133578063313ce5671461014657806370a082311461015557600080fd5b806306fdde03146100e4578063095ea7b31461010257806318160ddd14610122575b600080fd5b6100ec61021b565b6040516100f9919061089b565b60405180910390f35b6101156101103660046108f4565b6102ad565b6040516100f99190610936565b6002545b6040516100f9919061094a565b610115610141366004610958565b6102c7565b60126040516100f991906109aa565b6101266101633660046109b8565b6001600160a01b031660009081526020819052604090205490565b6101866102eb565b005b6005546001600160a01b03166040516100f991906109e0565b6100ec6102ff565b6101866101b7366004610a40565b61030e565b6101156101ca3660046108f4565b6103ba565b6101266101dd366004610a88565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6101866102163660046109b8565b6103c8565b60606003805461022a90610acd565b80601f016020809104026020016040519081016040528092919081815260200182805461025690610acd565b80156102a35780601f10610278576101008083540402835291602001916102a3565b820191906000526020600020905b81548152906001019060200180831161028657829003601f168201915b5050505050905090565b6000336102bb81858561041f565b60019150505b92915050565b6000336102d585828561042c565b6102e08585856104b0565b506001949350505050565b6102f3610528565b6102fd600061056e565b565b60606004805461022a90610acd565b6006546001600160a01b031633146103415760405162461bcd60e51b815260040161033890610af9565b60405180910390fd5b60008190036103625760405162461bcd60e51b815260040161033890610b5a565b60005b818110156103b5576103ad83838381811061038257610382610b95565b90506020028101906103949190610bab565b6103a69061010081019060e0016109b8565b60016105d8565b600101610365565b505050565b6000336102bb8185856104b0565b6103d0610528565b6001600160a01b0381166104135760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161033891906109e0565b61041c8161056e565b50565b6103b58383836001610612565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146104aa578181101561049b578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161033893929190610bd0565b6104aa84848484036000610612565b50505050565b6001600160a01b0383166104f35760006040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260040161033891906109e0565b6001600160a01b03821661051d57600060405163ec442f0560e01b815260040161033891906109e0565b6103b5838383610717565b6005546001600160a01b031633146102fd57336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161033891906109e0565b600580546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661060257600060405163ec442f0560e01b815260040161033891906109e0565b61060e60008383610717565b5050565b6001600160a01b0384166106555760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161033891906109e0565b6001600160a01b0383166106985760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161033891906109e0565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156104aa57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610709919061094a565b60405180910390a350505050565b6001600160a01b0383166107425780600260008282546107379190610c16565b909155506107ba9050565b6001600160a01b0383166000908152602081905260409020548181101561079b578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161033893929190610bd0565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166107d6576002805482900390556107f5565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610838919061094a565b60405180910390a3505050565b60005b83811015610860578181015183820152602001610848565b50506000910152565b6000610873825190565b80845260208401935061088a818560208601610845565b601f01601f19169290920192915050565b602080825281016108ac8184610869565b9392505050565b60006001600160a01b0382166102c1565b6108cd816108b3565b811461041c57600080fd5b80356102c1816108c4565b806108cd565b80356102c1816108e3565b6000806040838503121561090a5761090a600080fd5b61091484846108d8565b915061092384602085016108e9565b90509250929050565b8015155b82525050565b602081016102c1828461092c565b80610930565b602081016102c18284610944565b60008060006060848603121561097057610970600080fd5b61097a85856108d8565b925061098985602086016108d8565b915061099885604086016108e9565b90509250925092565b60ff8116610930565b602081016102c182846109a1565b6000602082840312156109cd576109cd600080fd5b6108ac83836108d8565b610930816108b3565b602081016102c182846109d7565b60008083601f840112610a0357610a03600080fd5b50813567ffffffffffffffff811115610a1e57610a1e600080fd5b602083019150836020820283011115610a3957610a39600080fd5b9250929050565b60008060208385031215610a5657610a56600080fd5b823567ffffffffffffffff811115610a7057610a70600080fd5b610a7c858286016109ee565b92509250509250929050565b60008060408385031215610a9e57610a9e600080fd5b610aa884846108d8565b915061092384602085016108d8565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610ae157607f821691505b602082108103610af357610af3610ab7565b50919050565b602080825281016102c181602c81527f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e60208201527f6174656420616464726573730000000000000000000000000000000000000000604082015260600190565b602080825281016102c181601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e1936849003018112610bc657610bc6600080fd5b9190910192915050565b60608101610bde82866109d7565b610beb6020830185610944565b610bf86040830184610944565b949350505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102c1576102c1610c0056fea26469706673582212200b22fc3a1593fad9c93e9b34f2929a2ca7e82bde5ec06ab385c9135ceb15c3a364736f6c634300081c0033", } // ZenBaseABI is the input ABI used to generate the binding from. diff --git a/contracts/generated/ZenTestnet/ZenTestnet.go b/contracts/generated/ZenTestnet/ZenTestnet.go index 29a2a5f325..14e2e56786 100644 --- a/contracts/generated/ZenTestnet/ZenTestnet.go +++ b/contracts/generated/ZenTestnet/ZenTestnet.go @@ -46,7 +46,7 @@ type StructsTransaction struct { // ZenTestnetMetaData contains all meta data concerning the ZenTestnet contract. var ZenTestnetMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"TransactionProcessed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"transactionPostProcessor\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"txType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"successful\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"gasUsed\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.Transaction[]\",\"name\":\"transactions\",\"type\":\"tuple[]\"}],\"name\":\"onBlockEnd\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6113b5806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610dd0565b60405180910390f35b61012061011b366004610e22565b61038a565b6040516101049190610e64565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e78565b61012061016b366004610e86565b6103a4565b60126040516101049190610ed8565b61015061018d366004610ee6565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103ca565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610f0e565b6100f76103de565b6101cf61021f366004610f6e565b61042f565b610120610232366004610e22565b61054a565b6101cf610245366004610ee6565b610558565b610150610258366004610fb6565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610ee6565b61075c565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b80601f016020809104026020016040519081016040528092919081815260200182805461033290610ffb565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b6000336103988185856107b3565b60019150505b92915050565b6000336103b28582856107c0565b6103bd858585610863565b60019150505b9392505050565b6103d26108db565b6103dc600061094f565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610ffb565b6000546001600160a01b031633146104625760405162461bcd60e51b815260040161045990611081565b60405180910390fd5b60008190036104835760405162461bcd60e51b815260040161045990611091565b60005b81811015610545576104ce8383838181106104a3576104a36110cc565b90506020028101906104b591906110e2565b6104c79061010081019060e001610ee6565b60016109cd565b7fe848a9a1096c6a1986f56a70fb7fb3250e28b1f56d41fa97ac643492c6c853d1838383818110610501576105016110cc565b905060200281019061051391906110e2565b6105259061010081019060e001610ee6565b600160405161053592919061111f565b60405180910390a1600101610486565b505050565b600033610398818585610863565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105a35750825b905060008267ffffffffffffffff1660011480156105c05750303b155b9050811580156105ce575080155b15610605576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561063957845468ff00000000000000001916680100000000000000001785555b6001600160a01b03861661065f5760405162461bcd60e51b815260040161045990611192565b6106d36040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610a07565b6106dc33610a19565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038816179055831561075457845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061074b906001906111bd565b60405180910390a15b505050505050565b6107646108db565b6001600160a01b0381166107a75760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6107b08161094f565b50565b6105458383836001610a2a565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093861683529290522054600019811461085d578181101561084e578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b61085d84848484036000610a2a565b50505050565b6001600160a01b0383166108a65760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b0382166108d057600060405163ec442f0560e01b81526004016104599190610f0e565b610545838383610b54565b3361090d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103dc57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0382166109f757600060405163ec442f0560e01b81526004016104599190610f0e565b610a0360008383610b54565b5050565b610a0f610ca8565b610a038282610d0f565b610a21610ca8565b6107b081610d72565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a8e5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b038416610ad15760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104599190610f0e565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610b4d57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610b449190610e78565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610ba25781816002016000828254610b979190611211565b90915550610c1a9050565b6001600160a01b03841660009081526020829052604090205482811015610bfb578481846040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610459939291906111cb565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610c38576002810180548390039055610c57565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c9a9190610e78565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103dc576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d17610ca8565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610d6384826112bf565b506004810161085d83826112bf565b610764610ca8565b60005b83811015610d95578181015183820152602001610d7d565b50506000910152565b6000610da8825190565b808452602084019350610dbf818560208601610d7a565b601f01601f19169290920192915050565b602080825281016103c38184610d9e565b60006001600160a01b03821661039e565b610dfb81610de1565b81146107b057600080fd5b803561039e81610df2565b80610dfb565b803561039e81610e11565b60008060408385031215610e3857610e38600080fd5b610e428484610e06565b9150610e518460208501610e17565b90509250929050565b8015155b82525050565b6020810161039e8284610e5a565b80610e5e565b6020810161039e8284610e72565b600080600060608486031215610e9e57610e9e600080fd5b610ea88585610e06565b9250610eb78560208601610e06565b9150610ec68560408601610e17565b90509250925092565b60ff8116610e5e565b6020810161039e8284610ecf565b600060208284031215610efb57610efb600080fd5b6103c38383610e06565b610e5e81610de1565b6020810161039e8284610f05565b60008083601f840112610f3157610f31600080fd5b50813567ffffffffffffffff811115610f4c57610f4c600080fd5b602083019150836020820283011115610f6757610f67600080fd5b9250929050565b60008060208385031215610f8457610f84600080fd5b823567ffffffffffffffff811115610f9e57610f9e600080fd5b610faa85828601610f1c565b92509250509250929050565b60008060408385031215610fcc57610fcc600080fd5b610fd68484610e06565b9150610e518460208501610e06565b634e487b7160e01b600052602260045260246000fd5b60028104600182168061100f57607f821691505b60208210810361102157611021610fe5565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e81611027565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e19368490030181126110fd576110fd600080fd5b9190910192915050565b600061039e6111138381565b90565b610e5e81611107565b6040810161112d8285610f05565b6103c36020830184611116565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f72657373000000000000000000000000000000000000000000000000000000006020820152905061107b565b6020808252810161039e8161113a565b600067ffffffffffffffff821661039e565b610e5e816111a2565b6020810161039e82846111b4565b606081016111d98286610f05565b6111e66020830185610e72565b6111f36040830184610e72565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039e5761039e6111fb565b634e487b7160e01b600052604160045260246000fd5b61124383611107565b815460001960089490940293841b1916921b91909117905550565b600061054581848461123a565b81811015610a035761127e60008261125e565b60010161126b565b601f821115610545576000818152602090206020601f850104810160208510156112ad5750805b610b4d6020601f86010483018261126b565b815167ffffffffffffffff8111156112d9576112d9611224565b6112e38254610ffb565b6112ee828285611286565b506020601f821160018114611323576000831561130b5750848201515b600019600885021c1981166002850217855550610b4d565b600084815260208120601f198516915b828110156113535787850151825560209485019460019092019101611333565b50848210156113705783870151600019601f87166008021c191681555b5050505060020260010190555056fea264697066735822122021c1edec5751580cda4d7c9c56cddd69057e1d7032b01be07c5b6f4124dfb25764736f6c634300081c0033", + Bin: "0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61132d806100d96000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a9059cbb11610066578063a9059cbb14610224578063c4d66de814610237578063dd62ed3e1461024a578063f2fde38b146102a257600080fd5b80638da5cb5b146101d157806395d89b41146102095780639f9976af1461021157600080fd5b806323b872dd116100c857806323b872dd1461015d578063313ce5671461017057806370a082311461017f578063715018a6146101c757600080fd5b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461012d575b600080fd5b6100f76102b5565b6040516101049190610d5f565b60405180910390f35b61012061011b366004610db8565b61038a565b6040516101049190610dfa565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516101049190610e0e565b61012061016b366004610e1c565b6103a4565b60126040516101049190610e6e565b61015061018d366004610e7c565b6001600160a01b031660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00602052604090205490565b6101cf6103c8565b005b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166040516101049190610ea4565b6100f76103dc565b6101cf61021f366004610f04565b61042d565b610120610232366004610db8565b6104d9565b6101cf610245366004610e7c565b6104e7565b610150610258366004610f4c565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6101cf6102b0366004610e7c565b6106eb565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0380546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610f91565b80601f016020809104026020016040519081016040528092919081815260200182805461033290610f91565b801561037f5780601f106103545761010080835404028352916020019161037f565b820191906000526020600020905b81548152906001019060200180831161036257829003601f168201915b505050505091505090565b600033610398818585610742565b60019150505b92915050565b6000336103b285828561074f565b6103bd8585856107f2565b506001949350505050565b6103d061086a565b6103da60006108de565b565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009161030690610f91565b6000546001600160a01b031633146104605760405162461bcd60e51b815260040161045790611017565b60405180910390fd5b60008190036104815760405162461bcd60e51b815260040161045790611027565b60005b818110156104d4576104cc8383838181106104a1576104a1611062565b90506020028101906104b39190611078565b6104c59061010081019060e001610e7c565b600161095c565b600101610484565b505050565b6000336103988185856107f2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156105325750825b905060008267ffffffffffffffff16600114801561054f5750303b155b90508115801561055d575080155b15610594576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105c857845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166105ee5760405162461bcd60e51b8152600401610457906110f5565b6106626040518060400160405280600381526020017f5a656e00000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f5a454e0000000000000000000000000000000000000000000000000000000000815250610996565b61066b336109a8565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156106e357845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906106da90600190611129565b60405180910390a15b505050505050565b6106f361086a565b6001600160a01b0381166107365760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016104579190610ea4565b61073f816108de565b50565b6104d483838360016109b9565b6001600160a01b0383811660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace01602090815260408083209386168352929052205460001981146107ec57818110156107dd578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161045793929190611137565b6107ec848484840360006109b9565b50505050565b6001600160a01b0383166108355760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104579190610ea4565b6001600160a01b03821661085f57600060405163ec442f0560e01b81526004016104579190610ea4565b6104d4838383610ae3565b3361089c7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103da57336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016104579190610ea4565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b03821661098657600060405163ec442f0560e01b81526004016104579190610ea4565b61099260008383610ae3565b5050565b61099e610c37565b6109928282610c9e565b6109b0610c37565b61073f81610d01565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516610a1d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104579190610ea4565b6001600160a01b038416610a605760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104579190610ea4565b6001600160a01b03808616600090815260018301602090815260408083209388168352929052208390558115610adc57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610ad39190610e0e565b60405180910390a35b5050505050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038416610b315781816002016000828254610b26919061117d565b90915550610ba99050565b6001600160a01b03841660009081526020829052604090205482811015610b8a578481846040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161045793929190611137565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316610bc7576002810180548390039055610be6565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610c299190610e0e565b60405180910390a350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166103da576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca6610c37565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace03610cf28482611237565b50600481016107ec8382611237565b6106f3610c37565b60005b83811015610d24578181015183820152602001610d0c565b50506000910152565b6000610d37825190565b808452602084019350610d4e818560208601610d09565b601f01601f19169290920192915050565b60208082528101610d708184610d2d565b9392505050565b60006001600160a01b03821661039e565b610d9181610d77565b811461073f57600080fd5b803561039e81610d88565b80610d91565b803561039e81610da7565b60008060408385031215610dce57610dce600080fd5b610dd88484610d9c565b9150610de78460208501610dad565b90509250929050565b8015155b82525050565b6020810161039e8284610df0565b80610df4565b6020810161039e8284610e08565b600080600060608486031215610e3457610e34600080fd5b610e3e8585610d9c565b9250610e4d8560208601610d9c565b9150610e5c8560408601610dad565b90509250925092565b60ff8116610df4565b6020810161039e8284610e65565b600060208284031215610e9157610e91600080fd5b610d708383610d9c565b610df481610d77565b6020810161039e8284610e9b565b60008083601f840112610ec757610ec7600080fd5b50813567ffffffffffffffff811115610ee257610ee2600080fd5b602083019150836020820283011115610efd57610efd600080fd5b9250929050565b60008060208385031215610f1a57610f1a600080fd5b823567ffffffffffffffff811115610f3457610f34600080fd5b610f4085828601610eb2565b92509250509250929050565b60008060408385031215610f6257610f62600080fd5b610f6c8484610d9c565b9150610de78460208501610d9c565b634e487b7160e01b600052602260045260246000fd5b600281046001821680610fa557607f821691505b602082108103610fb757610fb7610f7b565b50919050565b602c8152602081017f43616c6c65723a2063616c6c6572206973206e6f74207468652064657369676e81527f6174656420616464726573730000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161039e81610fbd565b6020808252810161039e81601a81527f4e6f207472616e73616374696f6e7320746f20636f6e76657274000000000000602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000823561013e193684900301811261109357611093600080fd5b9190910192915050565b60248152602081017f496e76616c6964207472616e73616374696f6e20616e616c797a65722061646481527f726573730000000000000000000000000000000000000000000000000000000060208201529050611011565b6020808252810161039e8161109d565b600061039e82611113565b90565b67ffffffffffffffff1690565b610df481611105565b6020810161039e8284611120565b606081016111458286610e9b565b6111526020830185610e08565b61115f6040830184610e08565b949350505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561039e5761039e611167565b634e487b7160e01b600052604160045260246000fd5b600061039e6111108381565b6111bb836111a6565b815460001960089490940293841b1916921b91909117905550565b60006104d48184846111b2565b81811015610992576111f66000826111d6565b6001016111e3565b601f8211156104d4576000818152602090206020601f850104810160208510156112255750805b610adc6020601f8601048301826111e3565b815167ffffffffffffffff81111561125157611251611190565b61125b8254610f91565b6112668282856111fe565b506020601f82116001811461129b57600083156112835750848201515b600019600885021c1981166002850217855550610adc565b600084815260208120601f198516915b828110156112cb57878501518255602094850194600190920191016112ab565b50848210156112e85783870151600019601f87166008021c191681555b5050505060020260010190555056fea2646970667358221220d3a3770d9c18415c040cd5e27518d888372c17c40d07a8cc0d3063bc6943861064736f6c634300081c0033", } // ZenTestnetABI is the input ABI used to generate the binding from. diff --git a/contracts/src/system/TransactionPostProcessor.sol b/contracts/src/system/TransactionPostProcessor.sol index c271f68788..89f9a0ed4b 100644 --- a/contracts/src/system/TransactionPostProcessor.sol +++ b/contracts/src/system/TransactionPostProcessor.sol @@ -42,7 +42,7 @@ contract TransactionPostProcessor is Initializable, AccessControl{ revert("No transactions to convert"); } - emit TransactionsConverted(transactions.length); +// emit TransactionsConverted(transactions.length); for (uint256 i = 0; i < onBlockEndListeners.length; ++i) { OnBlockEndCallback callback = onBlockEndListeners[i]; diff --git a/contracts/src/zen/ZenBase.sol b/contracts/src/zen/ZenBase.sol index 99f799c1b1..ba73cec5f1 100644 --- a/contracts/src/zen/ZenBase.sol +++ b/contracts/src/zen/ZenBase.sol @@ -52,7 +52,7 @@ contract ZenBase is OnBlockEndCallback, ERC20, Ownable { for (uint256 i=0; i 0 { - insert := "insert into tx (hash, content, to_address, type, sender_address, idx, batch_height, is_synthetic) values " + repeat("(?,?,?,?,?,?,?,?)", ",", len(transactions)) - - args := make([]any, 0) - for i, transaction := range transactions { - txBytes, err := rlp.EncodeToBytes(transaction.Tx) - if err != nil { - return fmt.Errorf("failed to encode block receipts. Cause: %w", err) - } - - args = append(args, transaction.Tx.Hash()) // tx_hash - args = append(args, txBytes) // content - args = append(args, toContractIds[i]) // To - args = append(args, transaction.Tx.Type()) // Type - args = append(args, senderIds[i]) // sender_address - args = append(args, fromIdx+i) // idx - args = append(args, height) // the batch height which contained it - args = append(args, isSynthetic) // is_synthetic if the transaction is a synthetic (internally derived transaction) - } - _, err := dbtx.ExecContext(ctx, insert, args...) + insert := "insert into tx (hash, content, to_address, type, sender_address, idx, batch_height, is_synthetic) values " + repeat("(?,?,?,?,?,?,?,?)", ",", len(transactions)) + + args := make([]any, 0) + for i, transaction := range transactions { + txBytes, err := rlp.EncodeToBytes(transaction.Tx) if err != nil { - return err + return fmt.Errorf("failed to encode block receipts. Cause: %w", err) } + + args = append(args, transaction.Tx.Hash().Bytes()) // tx_hash + args = append(args, txBytes) // content + args = append(args, toContractIds[i]) // To + args = append(args, transaction.Tx.Type()) // Type + args = append(args, senderIds[i]) // sender_address + args = append(args, fromIdx+i) // idx + args = append(args, height) // the batch height which contained it + args = append(args, isSynthetic) // is_synthetic if the transaction is a synthetic (internally derived transaction) + } + _, err := dbtx.ExecContext(ctx, insert, args...) + if err != nil { + return err } + return nil } diff --git a/go/enclave/storage/enclavedb/events.go b/go/enclave/storage/enclavedb/events.go index ae665703dd..fde0c96778 100644 --- a/go/enclave/storage/enclavedb/events.go +++ b/go/enclave/storage/enclavedb/events.go @@ -32,7 +32,7 @@ const ( " left join externally_owned_account eoa1 on t1.rel_address=eoa1.id " + "left join event_topic t2 on e.topic2=t2.id and et.id=t2.event_type " + " left join externally_owned_account eoa2 on t2.rel_address=eoa2.id " + - "left join event_topic t3 on e.topic3=t3.id and et.id=t1.event_type " + + "left join event_topic t3 on e.topic3=t3.id and et.id=t3.event_type " + " left join externally_owned_account eoa3 on t3.rel_address=eoa3.id " + "where b.is_canonical=true " ) @@ -319,7 +319,7 @@ func loadReceiptsAndEventLogs(ctx context.Context, db *sql.DB, requestingAccount if requestingAccount != nil { // Add log visibility rules - logsVisibQuery, logsVisibParams := logsVisibilityQuery(requestingAccount) + logsVisibQuery, logsVisibParams := logsVisibilityQuery(requestingAccount, withReceipts) query += logsVisibQuery queryParams = append(queryParams, logsVisibParams...) @@ -461,15 +461,19 @@ func receiptsVisibilityQuery(requestingAccount *gethcommon.Address) (string, []a } // this function encodes the event log visibility rules -func logsVisibilityQuery(requestingAccount *gethcommon.Address) (string, []any) { +func logsVisibilityQuery(requestingAccount *gethcommon.Address, withReceipts bool) (string, []any) { acc := requestingAccount.Bytes() visibParams := make([]any, 0) visibQuery := "AND (" - // this condition only affects queries that return receipts that have no events logs - visibQuery += " (e.id is NULL) " + if withReceipts { + // this condition only affects queries that return receipts that have no events logs + visibQuery += " (e.id is NULL) " + } else { + visibQuery += " (1=0) " + } // everyone can query config_public events visibQuery += " OR (et.config_public=true) " diff --git a/go/enclave/storage/events_storage.go b/go/enclave/storage/events_storage.go index 8d778bb484..b74b45cfea 100644 --- a/go/enclave/storage/events_storage.go +++ b/go/enclave/storage/events_storage.go @@ -100,14 +100,13 @@ func (es *eventsStorage) storeReceipt(ctx context.Context, dbTX *sql.Tx, batch * } func (es *eventsStorage) storeEventLog(ctx context.Context, dbTX *sql.Tx, receiptId uint64, l *types.Log) error { - eventSig := l.Topics[0] - contract, err := es.readContract(ctx, dbTX, l.Address) if err != nil { // the contract should already have been stored when it was created return fmt.Errorf("could not read contract address. %s. Cause: %w", l.Address, err) } + eventSig := l.Topics[0] eventType, err := es.readEventType(ctx, dbTX, l.Address, eventSig) if errors.Is(err, errutil.ErrNotFound) { // this is the first type an event of this type is emitted, so we must store it diff --git a/go/enclave/storage/storage.go b/go/enclave/storage/storage.go index 22402aeebf..03e89b40d5 100644 --- a/go/enclave/storage/storage.go +++ b/go/enclave/storage/storage.go @@ -657,14 +657,14 @@ func (s *storageImpl) StoreExecutedBatch(ctx context.Context, batch *core.Batch, } // store the synthetic transactions - transactionsWithSenders := results.SyntheticTransactions().ToTransactionsWithSenders() + syntheticTxs := results.SyntheticTransactions().ToTransactionsWithSenders() - senders, toContracts, err := s.handleTxSendersAndReceivers(ctx, transactionsWithSenders, dbTx) + senders, toContracts, err := s.handleTxSendersAndReceivers(ctx, syntheticTxs, dbTx) if err != nil { return fmt.Errorf("could not handle synthetic txs senders and receivers. Cause: %w", err) } - if err := enclavedb.WriteTransactions(ctx, dbTx, transactionsWithSenders, batch.Header.Number.Uint64(), true, senders, toContracts, len(batch.Transactions)); err != nil { + if err := enclavedb.WriteTransactions(ctx, dbTx, syntheticTxs, batch.Header.Number.Uint64(), true, senders, toContracts, len(batch.Transactions)); err != nil { return fmt.Errorf("could not write synthetic txs. Cause: %w", err) } diff --git a/go/enclave/system/hooks.go b/go/enclave/system/hooks.go index 3156d7a0db..dbb6e0eae3 100644 --- a/go/enclave/system/hooks.go +++ b/go/enclave/system/hooks.go @@ -200,6 +200,7 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(_ context.Context, tx := txExecResult.TxWithSender.Tx receipt := txExecResult.Receipt synTx := TransactionPostProcessor.StructsTransaction{ + From: *txExecResult.TxWithSender.Sender, Nonce: big.NewInt(int64(txExecResult.TxWithSender.Tx.Nonce())), GasPrice: tx.GasPrice(), GasLimit: big.NewInt(int64(tx.Gas())), @@ -214,15 +215,8 @@ func (s *systemContractCallbacks) CreateOnBatchEndTransaction(_ context.Context, synTx.To = gethcommon.Address{} // Zero address - contract deployment } - sender, err := core.GetExternalTxSigner(tx) - if err != nil { - s.logger.Error("CreateOnBatchEndTransaction: Failed to recover sender address", "error", err, "transactionHash", tx.Hash().Hex()) - return nil, fmt.Errorf("failed to recover sender address: %w", err) - } - synTx.From = sender - synTxs = append(synTxs, synTx) - s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", log.TxKey, tx.Hash(), "sender", sender.Hex()) + s.logger.Debug("CreateOnBatchEndTransaction: Encoded transaction", log.TxKey, tx.Hash(), "sender", synTx.From) } data, err := transactionPostProcessorABI.Pack("onBlock", synTxs)