From fa3208c6eae9c0df56b5412e0a32e6e3095befdd Mon Sep 17 00:00:00 2001 From: 0x6e616d Date: Tue, 1 Oct 2024 14:22:15 +0700 Subject: [PATCH] fix(portal-contract): wrong 'from' when depositing from the contract through Portal.onApprove function --- op-bindings/bindingspreview/optimismportal2.go | 2 +- op-bindings/bindingspreview/optimismportal2_more.go | 2 +- .../contracts-bedrock/src/L1/OptimismPortal2.sol | 10 ++++------ 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/op-bindings/bindingspreview/optimismportal2.go b/op-bindings/bindingspreview/optimismportal2.go index ffd74ea77..1e110ea97 100644 --- a/op-bindings/bindingspreview/optimismportal2.go +++ b/op-bindings/bindingspreview/optimismportal2.go @@ -49,7 +49,7 @@ type TypesWithdrawalTransaction struct { // OptimismPortal2MetaData contains all meta data concerning the OptimismPortal2 contract. var OptimismPortal2MetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proofMaturityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_disputeGameFinalityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"blacklistDisputeGame\",\"inputs\":[{\"name\":\"_disputeGame\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkWithdrawal\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disputeGameBlacklist\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFinalityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransactionExternalProof\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_initialRespectedGameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"nativeTokenAddress\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numProofSubmitters\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"onApprove\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofMaturityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitters\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_disputeGameIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"disputeGameProxy\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameType\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameTypeUpdatedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setRespectedGameType\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"supportsInterface\",\"inputs\":[{\"name\":\"interfaceId\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DisputeGameBlacklisted\",\"inputs\":[{\"name\":\"disputeGame\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"contractIDisputeGame\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RespectedGameTypeSet\",\"inputs\":[{\"name\":\"newGameType\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"GameType\"},{\"name\":\"updatedAt\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"Timestamp\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProvenExtension1\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"proofSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ContentLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyItem\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDataRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidHeader\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedList\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnexpectedString\",\"inputs\":[]}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620061ff380380620061ff8339810160408190526200003491620002f2565b608082905260a08190526200004d600080808062000055565b505062000317565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200022460201b6200244a1760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b603880546001600160a01b03199081166001600160a01b03888116919091179092556037805490911686831617905560358054610100600160a81b0319166101008684160217905560325416620001cc576032805461dead6001600160a01b0319909116179055603b80546001600160601b031916640100000000426001600160401b03160263ffffffff19161763ffffffff84161790555b620001d662000233565b80156200021d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000106565b600154600160c01b90046001600160401b0316600003620002f05760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b600080604083850312156200030657600080fd5b505080516020909101519092909150565b60805160a051615eb46200034b600039600081816105800152611d5401526000818161071701526119920152615eb46000f3fe6080604052600436106101d15760003560e01c80637d6be8dc116100f7578063a14238e711610095578063bb2c727e11610064578063bb2c727e14610661578063bf653a5c14610708578063cff0ab961461073b578063f2b4e617146107dc57600080fd5b8063a14238e7146105d1578063a35d99df14610601578063a3860f4814610621578063b9e559581461064157600080fd5b80638c3152e9116100d15780638c3152e9146105315780638e819e5414610551578063952b2797146105715780639bf62d82146105a457600080fd5b80637d6be8dc146104f15780637fc48504146105115780638b4c40b01461036d57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461042b57806354fd4d50146104665780635c975abb146104bc57806371c1566e146104d157600080fd5b806345884d32146103845780634870496f146103b45780634d0047ee146103d45780634fd0434c146103e957600080fd5b80633c9f397c116101ab5780633c9f397c146102fb5780634273ca161461032d57806343ca1c501461034d578063452a93201461036f57600080fd5b806301ffc9a71461024257806333d7e2bd1461027757806335e80ab3146102c957600080fd5b3661023d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561024e57600080fd5b5061026261025d36600461505c565b610809565b60405190151581526020015b60405180910390f35b34801561028357600080fd5b506037546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026e565b3480156102d557600080fd5b506035546102a490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561030757600080fd5b50603b546103189063ffffffff1681565b60405163ffffffff909116815260200161026e565b34801561033957600080fd5b50610262610348366004615109565b6108a2565b34801561035957600080fd5b5061036d610368366004615337565b610933565b005b34801561037b57600080fd5b506102a4610e31565b34801561039057600080fd5b5061026261039f366004615389565b603a6020526000908152604090205460ff1681565b3480156103c057600080fd5b5061036d6103cf3660046153a6565b610ec9565b3480156103e057600080fd5b506102a46115da565b3480156103f557600080fd5b50603b5461041290640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161026e565b34801561043757600080fd5b50610458610446366004615482565b6000908152603c602052604090205490565b60405190815260200161026e565b34801561047257600080fd5b506104af6040518060400160405280600681526020017f332e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161026e9190615511565b3480156104c857600080fd5b506102626115e4565b3480156104dd57600080fd5b5061036d6104ec366004615524565b611677565b3480156104fd57600080fd5b5061036d61050c366004615389565b611f01565b34801561051d57600080fd5b5061036d61052c36600461555b565b611fe4565b34801561053d57600080fd5b5061036d61054c366004615578565b6120d0565b34801561055d57600080fd5b5061036d61056c3660046155b5565b61211c565b34801561057d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b3480156105b057600080fd5b506032546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105dd57600080fd5b506102626105ec366004615482565b60336020526000908152604090205460ff1681565b34801561060d57600080fd5b5061041261061c366004615627565b6123d1565b34801561062d57600080fd5b506102a461063c366004615644565b6123ea565b34801561064d57600080fd5b5061036d61065c366004615674565b61242f565b34801561066d57600080fd5b506106d361067c366004615524565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161026e565b34801561071457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b34801561074757600080fd5b506001546107a3906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161026e565b3480156107e857600080fd5b506038546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061089c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000806000803660006108b58888612466565b945094509450945094506108c761251c565b73ffffffffffffffffffffffffffffffffffffffff163303610920576109128b868b8763ffffffff881673ffffffffffffffffffffffffffffffffffffffff8416158888600161258c565b60019550505050505061092a565b6000955050505050505b95945050505050565b61093b6115e4565b15610972576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610234565b6000610a2683612884565b9050610a328183611677565b600081815260336020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610a7161251c565b90508073ffffffffffffffffffffffffffffffffffffffff16846040015173ffffffffffffffffffffffffffffffffffffffff1603610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a401610234565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055606084015115610c8b5760a08401515115610c6057604080850151606086015191517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af1158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a9190615703565b50610c8b565b60408401516060850151610c8b9173ffffffffffffffffffffffffffffffffffffffff8416916128d1565b60008460a0015151600014610cba57610cb38560400151866080015160008860a001516129aa565b9050610cbe565b5060015b60a08501515115801590610cd55750606085015115155b15610d7b5760408581015190517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529083169063095ea7b3906044016020604051808303816000875af1158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190615703565b505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405183907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ddd90841515815260200190565b60405180910390a280158015610df35750326001145b15610e2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615720565b905090565b610ed16115e4565b15610f08576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610234565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f919061573d565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061578a565b603b5490915063ffffffff848116911614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b611189611184368890038801886157a3565b612a08565b8114611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610234565b600061122289612884565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615838565b60028111156112a6576112a6615809565b03611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d65730000000000006064820152608401610234565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506113fc9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906113f2898b615859565b8b60400135612a47565b611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610234565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000610ec461251c565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615703565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c69737465640000000000000000000000000000006064820152608401610234565b816020015167ffffffffffffffff16600003611840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a401610234565b60006118c18273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b491906158dd565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426119cb9190615929565b11611a58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d6174757265642079657400000000000000000000006064820152608401610234565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190615838565b6002811115611ada57611ada615809565b14611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c696461746564000000000000000000006064820152608401610234565b603b5463ffffffff1663ffffffff16611bf18373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190615940565b63ffffffff1690565b63ffffffff1614611c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b603b5467ffffffffffffffff64010000000090910481169082161015611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000611dc18373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d6000803e3d6000fd5b611dd59067ffffffffffffffff1642615929565b11611e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d676170000000000000000000000000000000000000000000006064820152608401610234565b60008581526033602052604090205460ff1615610e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610234565b611f09610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000818152603a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b611fec610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612050576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff83167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090911681176401000000004267ffffffffffffffff90811682029290921793849055604051930416917f049fe9dd413cdf037cce27011cc1790c753118272f3630e6e8bdfa5e8208176090600090a350565b565b6120d86115e4565b1561210f576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121198133610933565b50565b600054610100900460ff161580801561213c5750600054600160ff909116105b806121565750303b158015612156575060005460ff166001145b6121e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610234565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561224057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416612360576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b612368612a6b565b8015610e2a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006123de82601061595d565b61089c9061520861598d565b603c602052816000526040600020818154811061240657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b6124413388888888888888600061258c565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008080368160388610156124d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c6964206f6e417070726f76652064617461000000000000000000006044820152606401610234565b505050833560601c94601485013594603481013560e01c94603890910193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8019150565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa158015610ea0573d6000803e3d6000fd5b8460005a9050600061259c61251c565b905089156125c6576125c673ffffffffffffffffffffffffffffffffffffffff82168d308d612b7e565b86156126725773ffffffffffffffffffffffffffffffffffffffff8b161561267257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610234565b61267b856123d1565b67ffffffffffffffff168867ffffffffffffffff16101561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610234565b6201d4c085111561278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610234565b600073ffffffffffffffffffffffffffffffffffffffff8d1632148015906127b1575084155b6127bb578c6127d3565b7311110000000000000000000000000000000011118d015b905060008b8b8b8b8b8b6040516020016127f2969594939291906159b9565b604051602081830303815290604052905060008d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516128629190615511565b60405180910390a45050506128778282612be2565b5050505050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976128b4979096959101615a12565b604051602081830303815290604052805190602001209050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526129a59084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612eb9565b505050565b60008060006129ba866000612fc5565b9050806129f0576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016128b4949392919093845260208401929092526040830152606082015260800190565b600080612a5386612fe3565b9050612a6181868686613015565b9695505050505050565b600054610100900460ff16612b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610234565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036120ce5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612bdc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612923565b50505050565b600154600090612c18907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615929565b90506000612c2461303c565b90506000816020015160ff16826000015163ffffffff16612c459190615a98565b90508215612d7c57600154600090612c7c908390700100000000000000000000000000000000900467ffffffffffffffff16615b00565b90506000836040015160ff1683612c939190615b74565b600154612cb39084906fffffffffffffffffffffffffffffffff16615b74565b612cbd9190615a98565b600154909150600090612d0e90612ce79084906fffffffffffffffffffffffffffffffff16615c30565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166130fd565b90506001861115612d3d57612d3a612ce782876040015160ff1660018a612d359190615929565b61311c565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612daf908490700100000000000000000000000000000000900467ffffffffffffffff1661598d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612e3c576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612e68906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615ca4565b90506000612e7a48633b9aca00613171565b612e849083615ce1565b905060005a612e939088615929565b905080821115612eaf57612eaf612eaa8284615929565b613188565b5050505050505050565b6000612f1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131b19092919063ffffffff16565b8051909150156129a55780806020019051810190612f399190615703565b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610234565b600080603f83619c4001026040850201603f5a021015949350505050565b60608180519060200120604051602001612fff91815260200190565b6040516020818303038152906040529050919050565b600061092a846130268786866131c0565b8051602091820120825192909101919091201490565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615d0b565b600061311261310c8585613c3e565b83613c4e565b90505b9392505050565b6000670de0b6b3a764000061315d6131348583615a98565b61314690670de0b6b3a7640000615b00565b61315885670de0b6b3a7640000615b74565b613c5d565b6131679086615b74565b6131129190615a98565b6000818310156131815781613115565b5090919050565b6000805a90505b825a61319b9083615929565b10156129a5576131aa82615dc7565b915061318f565b60606131128484600085613c8e565b6060600084511161322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610234565b600061323884613e24565b9050600061324586613f10565b905060008460405160200161325c91815260200190565b60405160208183030381529060405290506000805b8451811015613bb557600085828151811061328e5761328e615dff565b602002602001015190508451831115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610234565b826000036133e257805180516020918201206040516133779261335192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6133dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610234565b613539565b805151602011613498578051805160209182012060405161340c9261335192910190815260200190565b6133dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610234565b805184516020808701919091208251919092012014613539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610234565b61354560106001615e2e565b8160200151510361372157845183036136b95761357f816020015160108151811061357257613572615dff565b6020026020010151613f73565b96506000875111613612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610234565b600186516136209190615929565b82146136ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610234565b505050505050613115565b60008584815181106136cd576136cd615dff565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106136f8576136f8615dff565b6020026020010151905061370b81614027565b9550613718600186615e2e565b94505050613ba2565b600281602001515103613b1a5760006137398261404c565b905060008160008151811061375057613750615dff565b016020015160f81c90506000613767600283615e46565b613772906002615e68565b90506000613783848360ff16614070565b905060006137918a89614070565b9050600061379f83836140a6565b905080835114613831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610234565b60ff851660021480613846575060ff85166003145b15613a3557808251146138db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610234565b6138f5876020015160018151811061357257613572615dff565b9c5060008d5111613988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610234565b60018c516139969190615929565b8814613a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610234565b505050505050505050505050613115565b60ff85161580613a48575060ff85166001145b15613a8757613a748760200151600181518110613a6757613a67615dff565b6020026020010151614027565b9950613a80818a615e2e565b9850613b0f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610234565b505050505050613ba2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610234565b5080613bad81615dc7565b915050613271565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610234565b6000818312156131815781613115565b60008183126131815781613115565b6000613115670de0b6b3a764000083613c758661415a565b613c7f9190615b74565b613c899190615a98565b61439e565b606082471015613d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610234565b73ffffffffffffffffffffffffffffffffffffffff85163b613d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610234565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613dc79190615e8b565b60006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b5091509150613e198282866145dd565b979650505050505050565b80516060908067ffffffffffffffff811115613e4257613e4261517c565b604051908082528060200260200182016040528015613e8757816020015b6040805180820190915260608082526020820152815260200190600190039081613e605790505b50915060005b81811015613f09576040518060400160405280858381518110613eb257613eb2615dff565b60200260200101518152602001613ee1868481518110613ed457613ed4615dff565b6020026020010151614630565b815250838281518110613ef657613ef6615dff565b6020908102919091010152600101613e8d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613f68578060011b82018184015160001a8060041c8253600f811660018301535050600101613f3a565b509295945050505050565b60606000806000613f8385614643565b919450925090506000816001811115613f9e57613f9e615809565b14613fd5576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fdf8284615e2e565b855114614018576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092a85602001518484614ae1565b606060208260000151106140435761403e82613f73565b61089c565b61089c82614b75565b606061089c61406b836020015160008151811061357257613572615dff565b613f10565b60608251821061408f575060408051602081019091526000815261089c565b61311583838486516140a19190615929565b614b8b565b60008082518451106140b95782516140bc565b83515b90505b808210801561414357508282815181106140db576140db615dff565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411a5761411a615dff565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614153578160010191506140bf565b5092915050565b60008082136141c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b600060606141d284614d63565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136143cf57506000919050565b680755bf798b4a1bf1e58212614441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610234565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606083156145ec575081613115565b8251156145fc5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102349190615511565b606061089c61463e83614e39565b614ea6565b60008060008360000151600003614686576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f81116146ab576000600160009450945094505050614ada565b60b781116147c15760006146c0608083615929565b9050808760000151116146ff576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561477757507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b156147ae576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614ada915050565b60bf811161491f5760006147d660b783615929565b905080876000015111614815576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614877576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116148bf576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148c98184615e2e565b895111614902576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61490d836001615e2e565b9750955060009450614ada9350505050565b60f7811161498457600061493460c083615929565b905080876000015111614973576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614ada915050565b600061499160f783615929565b9050808760000151116149d0576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a32576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a7a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a848184615e2e565b895111614abd576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ac8836001615e2e565b9750955060019450614ada9350505050565b9193909250565b60608167ffffffffffffffff811115614afc57614afc61517c565b6040519080825280601f01601f191660200182016040528015614b26576020820181803683370190505b5090508115613115576000614b3b8486615e2e565b90506020820160005b84811015614b5c578281015182820152602001614b44565b84811115614b6b576000858301525b5050509392505050565b606061089c826020015160008460000151614ae1565b60608182601f011015614bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b828284011015614c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b81830184511015614cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610234565b606082158015614cf25760405191506000825260208201604052614d5a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614d2b578051835260209283019201614d13565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000808211614dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201528151600003614e88576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614eb685614643565b919450925090506001816001811115614ed157614ed1615809565b14614f08576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614f148385615e2e565b14614f4b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614f625790505093506000835b865181101561505057600080614fd56040518060400160405280858c60000151614fb99190615929565b8152602001858c60200151614fce9190615e2e565b9052614643565b509150915060405180604001604052808383614ff19190615e2e565b8152602001848b602001516150069190615e2e565b81525088858151811061501b5761501b615dff565b6020908102919091010152615031600185615e2e565b935061503d8183615e2e565b6150479084615e2e565b92505050614f8f565b50845250919392505050565b60006020828403121561506e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461311557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461211957600080fd5b60008083601f8401126150d257600080fd5b50813567ffffffffffffffff8111156150ea57600080fd5b60208301915083602082850101111561510257600080fd5b9250929050565b60008060008060006080868803121561512157600080fd5b853561512c8161509e565b9450602086013561513c8161509e565b935060408601359250606086013567ffffffffffffffff81111561515f57600080fd5b61516b888289016150c0565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156151f2576151f261517c565b604052919050565b600082601f83011261520b57600080fd5b813567ffffffffffffffff8111156152255761522561517c565b61525660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016151ab565b81815284602083860101111561526b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561529a57600080fd5b60405160c0810167ffffffffffffffff82821081831117156152be576152be61517c565b8160405282935084358352602085013591506152d98261509e565b816020840152604085013591506152ef8261509e565b816040840152606085013560608401526080850135608084015260a085013591508082111561531d57600080fd5b5061532a858286016151fa565b60a0830152505092915050565b6000806040838503121561534a57600080fd5b823567ffffffffffffffff81111561536157600080fd5b61536d85828601615288565b925050602083013561537e8161509e565b809150509250929050565b60006020828403121561539b57600080fd5b81356131158161509e565b600080600080600085870360e08112156153bf57600080fd5b863567ffffffffffffffff808211156153d757600080fd5b6153e38a838b01615288565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561541c57600080fd5b60408901955060c089013592508083111561543657600080fd5b828901925089601f84011261544a57600080fd5b823591508082111561545b57600080fd5b508860208260051b840101111561547157600080fd5b959894975092955050506020019190565b60006020828403121561549457600080fd5b5035919050565b60005b838110156154b657818101518382015260200161549e565b83811115612bdc5750506000910152565b600081518084526154df81602086016020860161549b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061311560208301846154c7565b6000806040838503121561553757600080fd5b82359150602083013561537e8161509e565b63ffffffff8116811461211957600080fd5b60006020828403121561556d57600080fd5b813561311581615549565b60006020828403121561558a57600080fd5b813567ffffffffffffffff8111156155a157600080fd5b6155ad84828501615288565b949350505050565b600080600080608085870312156155cb57600080fd5b84356155d68161509e565b935060208501356155e68161509e565b925060408501356155f68161509e565b9150606085013561560681615549565b939692955090935050565b67ffffffffffffffff8116811461211957600080fd5b60006020828403121561563957600080fd5b813561311581615611565b6000806040838503121561565757600080fd5b50508035926020909101359150565b801515811461211957600080fd5b600080600080600080600060c0888a03121561568f57600080fd5b873561569a8161509e565b9650602088013595506040880135945060608801356156b881615611565b935060808801356156c881615666565b925060a088013567ffffffffffffffff8111156156e457600080fd5b6156f08a828b016150c0565b989b979a50959850939692959293505050565b60006020828403121561571557600080fd5b815161311581615666565b60006020828403121561573257600080fd5b81516131158161509e565b60008060006060848603121561575257600080fd5b835161575d81615549565b602085015190935061576e81615611565b604085015190925061577f8161509e565b809150509250925092565b60006020828403121561579c57600080fd5b5051919050565b6000608082840312156157b557600080fd5b6040516080810181811067ffffffffffffffff821117156157d8576157d861517c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561584a57600080fd5b81516003811061311557600080fd5b600067ffffffffffffffff808411156158745761587461517c565b8360051b60206158858183016151ab565b86815291850191818101903684111561589d57600080fd5b865b848110156158d1578035868111156158b75760008081fd5b6158c336828b016151fa565b84525091830191830161589f565b50979650505050505050565b6000602082840312156158ef57600080fd5b815161311581615611565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561593b5761593b6158fa565b500390565b60006020828403121561595257600080fd5b815161311581615549565b600067ffffffffffffffff80831681851681830481118215151615615984576159846158fa565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159b0576159b06158fa565b01949350505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a5d60c08301846154c7565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615aa757615aa7615a69565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615afb57615afb6158fa565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b3a57615b3a6158fa565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b6e57615b6e6158fa565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bb557615bb56158fa565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615bf057615bf06158fa565b60008712925087820587128484161615615c0c57615c0c6158fa565b87850587128184161615615c2257615c226158fa565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c6a57615c6a6158fa565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c9e57615c9e6158fa565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cdc57615cdc6158fa565b500290565b600082615cf057615cf0615a69565b500490565b805160ff81168114615d0657600080fd5b919050565b600060c08284031215615d1d57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d4057615d4061517c565b6040528251615d4e81615549565b8152615d5c60208401615cf5565b6020820152615d6d60408401615cf5565b60408201526060830151615d8081615549565b60608201526080830151615d9381615549565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615dbb57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615df857615df86158fa565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615e4157615e416158fa565b500190565b600060ff831680615e5957615e59615a69565b8060ff84160691505092915050565b600060ff821660ff841680821015615e8257615e826158fa565b90039392505050565b60008251615e9d81846020870161549b565b919091019291505056fea164736f6c634300080f000a", + Bin: "0x60c06040523480156200001157600080fd5b50604051620061ef380380620061ef8339810160408190526200003491620002f2565b608082905260a08190526200004d600080808062000055565b505062000317565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200022460201b620024461760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b603880546001600160a01b03199081166001600160a01b03888116919091179092556037805490911686831617905560358054610100600160a81b0319166101008684160217905560325416620001cc576032805461dead6001600160a01b0319909116179055603b80546001600160601b031916640100000000426001600160401b03160263ffffffff19161763ffffffff84161790555b620001d662000233565b80156200021d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000106565b600154600160c01b90046001600160401b0316600003620002f05760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b600080604083850312156200030657600080fd5b505080516020909101519092909150565b60805160a051615ea46200034b600039600081816105800152611d5201526000818161071701526119900152615ea46000f3fe6080604052600436106101d15760003560e01c80637d6be8dc116100f7578063a14238e711610095578063bb2c727e11610064578063bb2c727e14610661578063bf653a5c14610708578063cff0ab961461073b578063f2b4e617146107dc57600080fd5b8063a14238e7146105d1578063a35d99df14610601578063a3860f4814610621578063b9e559581461064157600080fd5b80638c3152e9116100d15780638c3152e9146105315780638e819e5414610551578063952b2797146105715780639bf62d82146105a457600080fd5b80637d6be8dc146104f15780637fc48504146105115780638b4c40b01461036d57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461042b57806354fd4d50146104665780635c975abb146104bc57806371c1566e146104d157600080fd5b806345884d32146103845780634870496f146103b45780634d0047ee146103d45780634fd0434c146103e957600080fd5b80633c9f397c116101ab5780633c9f397c146102fb5780634273ca161461032d57806343ca1c501461034d578063452a93201461036f57600080fd5b806301ffc9a71461024257806333d7e2bd1461027757806335e80ab3146102c957600080fd5b3661023d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561024e57600080fd5b5061026261025d36600461504c565b610809565b60405190151581526020015b60405180910390f35b34801561028357600080fd5b506037546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026e565b3480156102d557600080fd5b506035546102a490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561030757600080fd5b50603b546103189063ffffffff1681565b60405163ffffffff909116815260200161026e565b34801561033957600080fd5b506102626103483660046150f9565b6108a2565b34801561035957600080fd5b5061036d610368366004615327565b610931565b005b34801561037b57600080fd5b506102a4610e2f565b34801561039057600080fd5b5061026261039f366004615379565b603a6020526000908152604090205460ff1681565b3480156103c057600080fd5b5061036d6103cf366004615396565b610ec7565b3480156103e057600080fd5b506102a46115d8565b3480156103f557600080fd5b50603b5461041290640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161026e565b34801561043757600080fd5b50610458610446366004615472565b6000908152603c602052604090205490565b60405190815260200161026e565b34801561047257600080fd5b506104af6040518060400160405280600681526020017f332e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161026e9190615501565b3480156104c857600080fd5b506102626115e2565b3480156104dd57600080fd5b5061036d6104ec366004615514565b611675565b3480156104fd57600080fd5b5061036d61050c366004615379565b611eff565b34801561051d57600080fd5b5061036d61052c36600461554b565b611fe2565b34801561053d57600080fd5b5061036d61054c366004615568565b6120ce565b34801561055d57600080fd5b5061036d61056c3660046155a5565b61211a565b34801561057d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b3480156105b057600080fd5b506032546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105dd57600080fd5b506102626105ec366004615472565b60336020526000908152604090205460ff1681565b34801561060d57600080fd5b5061041261061c366004615617565b6123cf565b34801561062d57600080fd5b506102a461063c366004615634565b6123e8565b34801561064d57600080fd5b5061036d61065c366004615664565b61242d565b34801561066d57600080fd5b506106d361067c366004615514565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161026e565b34801561071457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b34801561074757600080fd5b506001546107a3906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161026e565b3480156107e857600080fd5b506038546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061089c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000806000803660006108b58888612462565b945094509450945094506108c7612518565b73ffffffffffffffffffffffffffffffffffffffff16330361091e576109108b868b8763ffffffff881673ffffffffffffffffffffffffffffffffffffffff8416158888612588565b600195505050505050610928565b6000955050505050505b95945050505050565b6109396115e2565b15610970576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610a19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610234565b6000610a2483612874565b9050610a308183611675565b600081815260336020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610a6f612518565b90508073ffffffffffffffffffffffffffffffffffffffff16846040015173ffffffffffffffffffffffffffffffffffffffff1603610b56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a401610234565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055606084015115610c895760a08401515115610c5e57604080850151606086015191517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906156f3565b50610c89565b60408401516060850151610c899173ffffffffffffffffffffffffffffffffffffffff8416916128c1565b60008460a0015151600014610cb857610cb18560400151866080015160008860a0015161299a565b9050610cbc565b5060015b60a08501515115801590610cd35750606085015115155b15610d795760408581015190517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529083169063095ea7b3906044016020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7791906156f3565b505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405183907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ddb90841515815260200190565b60405180910390a280158015610df15750326001145b15610e28576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190615710565b905090565b610ecf6115e2565b15610f06576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610234565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d919061572d565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d3919061577a565b603b5490915063ffffffff848116911614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b61118761118236889003880188615793565b6129f8565b8114611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610234565b600061122089612874565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190615828565b60028111156112a4576112a46157f9565b03611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d65730000000000006064820152608401610234565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506113fa9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906113f0898b615849565b8b60400135612a37565b611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610234565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000610ec2612518565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec291906156f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c69737465640000000000000000000000000000006064820152608401610234565b816020015167ffffffffffffffff1660000361183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a401610234565b60006118bf8273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b291906158cd565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff161161198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426119c99190615919565b11611a56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d6174757265642079657400000000000000000000006064820152608401610234565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac79190615828565b6002811115611ad857611ad86157f9565b14611b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c696461746564000000000000000000006064820152608401610234565b603b5463ffffffff1663ffffffff16611bef8373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190615930565b63ffffffff1690565b63ffffffff1614611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b603b5467ffffffffffffffff64010000000090910481169082161015611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000611dbf8373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188e573d6000803e3d6000fd5b611dd39067ffffffffffffffff1642615919565b11611e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d676170000000000000000000000000000000000000000000006064820152608401610234565b60008581526033602052604090205460ff1615610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610234565b611f07610e2f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000818152603a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b611fea610e2f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff83167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090911681176401000000004267ffffffffffffffff90811682029290921793849055604051930416917f049fe9dd413cdf037cce27011cc1790c753118272f3630e6e8bdfa5e8208176090600090a350565b565b6120d66115e2565b1561210d576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121178133610931565b50565b600054610100900460ff161580801561213a5750600054600160ff909116105b806121545750303b158015612154575060005460ff166001145b6121e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610234565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561223e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100868416021790556032541661235e576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b612366612a5b565b8015610e2857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006123dc82601061594d565b61089c9061520861597d565b603c602052816000526040600020818154811061240457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b61243d3388888888888888612588565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008080368160388610156124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c6964206f6e417070726f76652064617461000000000000000000006044820152606401610234565b505050833560601c94601485013594603481013560e01c94603890910193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8019150565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa158015610e9e573d6000803e3d6000fd5b8360005a90506000612598612518565b905088156125c2576125c273ffffffffffffffffffffffffffffffffffffffff82168c308c612b6e565b851561266e5773ffffffffffffffffffffffffffffffffffffffff8a161561266e57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610234565b612677846123cf565b67ffffffffffffffff168767ffffffffffffffff16101561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610234565b6201d4c0841115612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610234565b60003273ffffffffffffffffffffffffffffffffffffffff8d16036127ac578b6127c4565b7311110000000000000000000000000000000011118c015b905060008a8a8a8a8a8a6040516020016127e3969594939291906159a9565b604051602081830303815290604052905060008c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516128539190615501565b60405180910390a45050506128688282612bd2565b50505050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976128a4979096959101615a02565b604051602081830303815290604052805190602001209050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526129959084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ea9565b505050565b60008060006129aa866000612fb5565b9050806129e0576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016128a4949392919093845260208401929092526040830152606082015260800190565b600080612a4386612fd3565b9050612a5181868686613005565b9695505050505050565b600054610100900460ff16612af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610234565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036120cc5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612bcc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612913565b50505050565b600154600090612c08907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615919565b90506000612c1461302c565b90506000816020015160ff16826000015163ffffffff16612c359190615a88565b90508215612d6c57600154600090612c6c908390700100000000000000000000000000000000900467ffffffffffffffff16615af0565b90506000836040015160ff1683612c839190615b64565b600154612ca39084906fffffffffffffffffffffffffffffffff16615b64565b612cad9190615a88565b600154909150600090612cfe90612cd79084906fffffffffffffffffffffffffffffffff16615c20565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166130ed565b90506001861115612d2d57612d2a612cd782876040015160ff1660018a612d259190615919565b61310c565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612d9f908490700100000000000000000000000000000000900467ffffffffffffffff1661597d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612e2c576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612e58906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615c94565b90506000612e6a48633b9aca00613161565b612e749083615cd1565b905060005a612e839088615919565b905080821115612e9f57612e9f612e9a8284615919565b613178565b5050505050505050565b6000612f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131a19092919063ffffffff16565b8051909150156129955780806020019051810190612f2991906156f3565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610234565b600080603f83619c4001026040850201603f5a021015949350505050565b60608180519060200120604051602001612fef91815260200190565b6040516020818303038152906040529050919050565b6000610928846130168786866131b0565b8051602091820120825192909101919091201490565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156130c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190615cfb565b60006131026130fc8585613c2e565b83613c3e565b90505b9392505050565b6000670de0b6b3a764000061314d6131248583615a88565b61313690670de0b6b3a7640000615af0565b61314885670de0b6b3a7640000615b64565b613c4d565b6131579086615b64565b6131029190615a88565b6000818310156131715781613105565b5090919050565b6000805a90505b825a61318b9083615919565b10156129955761319a82615db7565b915061317f565b60606131028484600085613c7e565b6060600084511161321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610234565b600061322884613e14565b9050600061323586613f00565b905060008460405160200161324c91815260200190565b60405160208183030381529060405290506000805b8451811015613ba557600085828151811061327e5761327e615def565b602002602001015190508451831115613319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610234565b826000036133d257805180516020918201206040516133679261334192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6133cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610234565b613529565b80515160201161348857805180516020918201206040516133fc9261334192910190815260200190565b6133cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610234565b805184516020808701919091208251919092012014613529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610234565b61353560106001615e1e565b8160200151510361371157845183036136a95761356f816020015160108151811061356257613562615def565b6020026020010151613f63565b96506000875111613602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610234565b600186516136109190615919565b821461369e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610234565b505050505050613105565b60008584815181106136bd576136bd615def565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106136e8576136e8615def565b602002602001015190506136fb81614017565b9550613708600186615e1e565b94505050613b92565b600281602001515103613b0a5760006137298261403c565b905060008160008151811061374057613740615def565b016020015160f81c90506000613757600283615e36565b613762906002615e58565b90506000613773848360ff16614060565b905060006137818a89614060565b9050600061378f8383614096565b905080835114613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610234565b60ff851660021480613836575060ff85166003145b15613a2557808251146138cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610234565b6138e5876020015160018151811061356257613562615def565b9c5060008d5111613978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610234565b60018c516139869190615919565b8814613a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610234565b505050505050505050505050613105565b60ff85161580613a38575060ff85166001145b15613a7757613a648760200151600181518110613a5757613a57615def565b6020026020010151614017565b9950613a70818a615e1e565b9850613aff565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610234565b505050505050613b92565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610234565b5080613b9d81615db7565b915050613261565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610234565b6000818312156131715781613105565b60008183126131715781613105565b6000613105670de0b6b3a764000083613c658661414a565b613c6f9190615b64565b613c799190615a88565b61438e565b606082471015613d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610234565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610234565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db79190615e7b565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e098282866145cd565b979650505050505050565b80516060908067ffffffffffffffff811115613e3257613e3261516c565b604051908082528060200260200182016040528015613e7757816020015b6040805180820190915260608082526020820152815260200190600190039081613e505790505b50915060005b81811015613ef9576040518060400160405280858381518110613ea257613ea2615def565b60200260200101518152602001613ed1868481518110613ec457613ec4615def565b6020026020010151614620565b815250838281518110613ee657613ee6615def565b6020908102919091010152600101613e7d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613f58578060011b82018184015160001a8060041c8253600f811660018301535050600101613f2a565b509295945050505050565b60606000806000613f7385614633565b919450925090506000816001811115613f8e57613f8e6157f9565b14613fc5576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fcf8284615e1e565b855114614008576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092885602001518484614ad1565b606060208260000151106140335761402e82613f63565b61089c565b61089c82614b65565b606061089c61405b836020015160008151811061356257613562615def565b613f00565b60608251821061407f575060408051602081019091526000815261089c565b61310583838486516140919190615919565b614b7b565b60008082518451106140a95782516140ac565b83515b90505b808210801561413357508282815181106140cb576140cb615def565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061410a5761410a615def565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614143578160010191506140af565b5092915050565b60008082136141b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b600060606141c284614d53565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136143bf57506000919050565b680755bf798b4a1bf1e58212614431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610234565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606083156145dc575081613105565b8251156145ec5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102349190615501565b606061089c61462e83614e29565b614e96565b60008060008360000151600003614676576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f811161469b576000600160009450945094505050614aca565b60b781116147b15760006146b0608083615919565b9050808760000151116146ef576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561476757507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b1561479e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614aca915050565b60bf811161490f5760006147c660b783615919565b905080876000015111614805576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614867576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116148af576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148b98184615e1e565b8951116148f2576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148fd836001615e1e565b9750955060009450614aca9350505050565b60f7811161497457600061492460c083615919565b905080876000015111614963576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614aca915050565b600061498160f783615919565b9050808760000151116149c0576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a22576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a6a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a748184615e1e565b895111614aad576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ab8836001615e1e565b9750955060019450614aca9350505050565b9193909250565b60608167ffffffffffffffff811115614aec57614aec61516c565b6040519080825280601f01601f191660200182016040528015614b16576020820181803683370190505b5090508115613105576000614b2b8486615e1e565b90506020820160005b84811015614b4c578281015182820152602001614b34565b84811115614b5b576000858301525b5050509392505050565b606061089c826020015160008460000151614ad1565b60608182601f011015614bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b828284011015614c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b81830184511015614cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610234565b606082158015614ce25760405191506000825260208201604052614d4a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614d1b578051835260209283019201614d03565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000808211614dbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201528151600003614e78576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614ea685614633565b919450925090506001816001811115614ec157614ec16157f9565b14614ef8576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614f048385615e1e565b14614f3b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614f525790505093506000835b865181101561504057600080614fc56040518060400160405280858c60000151614fa99190615919565b8152602001858c60200151614fbe9190615e1e565b9052614633565b509150915060405180604001604052808383614fe19190615e1e565b8152602001848b60200151614ff69190615e1e565b81525088858151811061500b5761500b615def565b6020908102919091010152615021600185615e1e565b935061502d8183615e1e565b6150379084615e1e565b92505050614f7f565b50845250919392505050565b60006020828403121561505e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461310557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461211757600080fd5b60008083601f8401126150c257600080fd5b50813567ffffffffffffffff8111156150da57600080fd5b6020830191508360208285010111156150f257600080fd5b9250929050565b60008060008060006080868803121561511157600080fd5b853561511c8161508e565b9450602086013561512c8161508e565b935060408601359250606086013567ffffffffffffffff81111561514f57600080fd5b61515b888289016150b0565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156151e2576151e261516c565b604052919050565b600082601f8301126151fb57600080fd5b813567ffffffffffffffff8111156152155761521561516c565b61524660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161519b565b81815284602083860101111561525b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561528a57600080fd5b60405160c0810167ffffffffffffffff82821081831117156152ae576152ae61516c565b8160405282935084358352602085013591506152c98261508e565b816020840152604085013591506152df8261508e565b816040840152606085013560608401526080850135608084015260a085013591508082111561530d57600080fd5b5061531a858286016151ea565b60a0830152505092915050565b6000806040838503121561533a57600080fd5b823567ffffffffffffffff81111561535157600080fd5b61535d85828601615278565b925050602083013561536e8161508e565b809150509250929050565b60006020828403121561538b57600080fd5b81356131058161508e565b600080600080600085870360e08112156153af57600080fd5b863567ffffffffffffffff808211156153c757600080fd5b6153d38a838b01615278565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561540c57600080fd5b60408901955060c089013592508083111561542657600080fd5b828901925089601f84011261543a57600080fd5b823591508082111561544b57600080fd5b508860208260051b840101111561546157600080fd5b959894975092955050506020019190565b60006020828403121561548457600080fd5b5035919050565b60005b838110156154a657818101518382015260200161548e565b83811115612bcc5750506000910152565b600081518084526154cf81602086016020860161548b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061310560208301846154b7565b6000806040838503121561552757600080fd5b82359150602083013561536e8161508e565b63ffffffff8116811461211757600080fd5b60006020828403121561555d57600080fd5b813561310581615539565b60006020828403121561557a57600080fd5b813567ffffffffffffffff81111561559157600080fd5b61559d84828501615278565b949350505050565b600080600080608085870312156155bb57600080fd5b84356155c68161508e565b935060208501356155d68161508e565b925060408501356155e68161508e565b915060608501356155f681615539565b939692955090935050565b67ffffffffffffffff8116811461211757600080fd5b60006020828403121561562957600080fd5b813561310581615601565b6000806040838503121561564757600080fd5b50508035926020909101359150565b801515811461211757600080fd5b600080600080600080600060c0888a03121561567f57600080fd5b873561568a8161508e565b9650602088013595506040880135945060608801356156a881615601565b935060808801356156b881615656565b925060a088013567ffffffffffffffff8111156156d457600080fd5b6156e08a828b016150b0565b989b979a50959850939692959293505050565b60006020828403121561570557600080fd5b815161310581615656565b60006020828403121561572257600080fd5b81516131058161508e565b60008060006060848603121561574257600080fd5b835161574d81615539565b602085015190935061575e81615601565b604085015190925061576f8161508e565b809150509250925092565b60006020828403121561578c57600080fd5b5051919050565b6000608082840312156157a557600080fd5b6040516080810181811067ffffffffffffffff821117156157c8576157c861516c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561583a57600080fd5b81516003811061310557600080fd5b600067ffffffffffffffff808411156158645761586461516c565b8360051b602061587581830161519b565b86815291850191818101903684111561588d57600080fd5b865b848110156158c1578035868111156158a75760008081fd5b6158b336828b016151ea565b84525091830191830161588f565b50979650505050505050565b6000602082840312156158df57600080fd5b815161310581615601565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561592b5761592b6158ea565b500390565b60006020828403121561594257600080fd5b815161310581615539565b600067ffffffffffffffff80831681851681830481118215151615615974576159746158ea565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159a0576159a06158ea565b01949350505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a4d60c08301846154b7565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9757615a97615a59565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615aeb57615aeb6158ea565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b2a57615b2a6158ea565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b5e57615b5e6158ea565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615ba557615ba56158ea565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615be057615be06158ea565b60008712925087820587128484161615615bfc57615bfc6158ea565b87850587128184161615615c1257615c126158ea565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c5a57615c5a6158ea565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c8e57615c8e6158ea565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ccc57615ccc6158ea565b500290565b600082615ce057615ce0615a59565b500490565b805160ff81168114615cf657600080fd5b919050565b600060c08284031215615d0d57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d3057615d3061516c565b6040528251615d3e81615539565b8152615d4c60208401615ce5565b6020820152615d5d60408401615ce5565b60408201526060830151615d7081615539565b60608201526080830151615d8381615539565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615dab57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615de857615de86158ea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615e3157615e316158ea565b500190565b600060ff831680615e4957615e49615a59565b8060ff84160691505092915050565b600060ff821660ff841680821015615e7257615e726158ea565b90039392505050565b60008251615e8d81846020870161548b565b919091019291505056fea164736f6c634300080f000a", } // OptimismPortal2ABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindingspreview/optimismportal2_more.go b/op-bindings/bindingspreview/optimismportal2_more.go index 59a1fa0e5..d9626ef3d 100644 --- a/op-bindings/bindingspreview/optimismportal2_more.go +++ b/op-bindings/bindingspreview/optimismportal2_more.go @@ -13,7 +13,7 @@ const OptimismPortal2StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contra var OptimismPortal2StorageLayout = new(solc.StorageLayout) -var OptimismPortal2DeployedBin = "0x6080604052600436106101d15760003560e01c80637d6be8dc116100f7578063a14238e711610095578063bb2c727e11610064578063bb2c727e14610661578063bf653a5c14610708578063cff0ab961461073b578063f2b4e617146107dc57600080fd5b8063a14238e7146105d1578063a35d99df14610601578063a3860f4814610621578063b9e559581461064157600080fd5b80638c3152e9116100d15780638c3152e9146105315780638e819e5414610551578063952b2797146105715780639bf62d82146105a457600080fd5b80637d6be8dc146104f15780637fc48504146105115780638b4c40b01461036d57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461042b57806354fd4d50146104665780635c975abb146104bc57806371c1566e146104d157600080fd5b806345884d32146103845780634870496f146103b45780634d0047ee146103d45780634fd0434c146103e957600080fd5b80633c9f397c116101ab5780633c9f397c146102fb5780634273ca161461032d57806343ca1c501461034d578063452a93201461036f57600080fd5b806301ffc9a71461024257806333d7e2bd1461027757806335e80ab3146102c957600080fd5b3661023d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561024e57600080fd5b5061026261025d36600461505c565b610809565b60405190151581526020015b60405180910390f35b34801561028357600080fd5b506037546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026e565b3480156102d557600080fd5b506035546102a490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561030757600080fd5b50603b546103189063ffffffff1681565b60405163ffffffff909116815260200161026e565b34801561033957600080fd5b50610262610348366004615109565b6108a2565b34801561035957600080fd5b5061036d610368366004615337565b610933565b005b34801561037b57600080fd5b506102a4610e31565b34801561039057600080fd5b5061026261039f366004615389565b603a6020526000908152604090205460ff1681565b3480156103c057600080fd5b5061036d6103cf3660046153a6565b610ec9565b3480156103e057600080fd5b506102a46115da565b3480156103f557600080fd5b50603b5461041290640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161026e565b34801561043757600080fd5b50610458610446366004615482565b6000908152603c602052604090205490565b60405190815260200161026e565b34801561047257600080fd5b506104af6040518060400160405280600681526020017f332e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161026e9190615511565b3480156104c857600080fd5b506102626115e4565b3480156104dd57600080fd5b5061036d6104ec366004615524565b611677565b3480156104fd57600080fd5b5061036d61050c366004615389565b611f01565b34801561051d57600080fd5b5061036d61052c36600461555b565b611fe4565b34801561053d57600080fd5b5061036d61054c366004615578565b6120d0565b34801561055d57600080fd5b5061036d61056c3660046155b5565b61211c565b34801561057d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b3480156105b057600080fd5b506032546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105dd57600080fd5b506102626105ec366004615482565b60336020526000908152604090205460ff1681565b34801561060d57600080fd5b5061041261061c366004615627565b6123d1565b34801561062d57600080fd5b506102a461063c366004615644565b6123ea565b34801561064d57600080fd5b5061036d61065c366004615674565b61242f565b34801561066d57600080fd5b506106d361067c366004615524565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161026e565b34801561071457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b34801561074757600080fd5b506001546107a3906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161026e565b3480156107e857600080fd5b506038546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061089c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000806000803660006108b58888612466565b945094509450945094506108c761251c565b73ffffffffffffffffffffffffffffffffffffffff163303610920576109128b868b8763ffffffff881673ffffffffffffffffffffffffffffffffffffffff8416158888600161258c565b60019550505050505061092a565b6000955050505050505b95945050505050565b61093b6115e4565b15610972576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610a1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610234565b6000610a2683612884565b9050610a328183611677565b600081815260336020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610a7161251c565b90508073ffffffffffffffffffffffffffffffffffffffff16846040015173ffffffffffffffffffffffffffffffffffffffff1603610b58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a401610234565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055606084015115610c8b5760a08401515115610c6057604080850151606086015191517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af1158015610c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5a9190615703565b50610c8b565b60408401516060850151610c8b9173ffffffffffffffffffffffffffffffffffffffff8416916128d1565b60008460a0015151600014610cba57610cb38560400151866080015160008860a001516129aa565b9050610cbe565b5060015b60a08501515115801590610cd55750606085015115155b15610d7b5760408581015190517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529083169063095ea7b3906044016020604051808303816000875af1158015610d55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d799190615703565b505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405183907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ddd90841515815260200190565b60405180910390a280158015610df35750326001145b15610e2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615720565b905090565b610ed16115e4565b15610f08576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610fc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610234565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f919061573d565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d5919061578a565b603b5490915063ffffffff848116911614611172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b611189611184368890038801886157a3565b612a08565b8114611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610234565b600061122289612884565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112959190615838565b60028111156112a6576112a6615809565b03611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d65730000000000006064820152608401610234565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506113fc9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906113f2898b615859565b8b60400135612a47565b611488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610234565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000610ec461251c565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615703565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561177c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c69737465640000000000000000000000000000006064820152608401610234565b816020015167ffffffffffffffff16600003611840576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a401610234565b60006118c18273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b491906158dd565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426119cb9190615929565b11611a58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d6174757265642079657400000000000000000000006064820152608401610234565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac99190615838565b6002811115611ada57611ada615809565b14611b67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c696461746564000000000000000000006064820152608401610234565b603b5463ffffffff1663ffffffff16611bf18373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be89190615940565b63ffffffff1690565b63ffffffff1614611c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b603b5467ffffffffffffffff64010000000090910481169082161015611d52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000611dc18373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611890573d6000803e3d6000fd5b611dd59067ffffffffffffffff1642615929565b11611e62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d676170000000000000000000000000000000000000000000006064820152608401610234565b60008581526033602052604090205460ff1615610e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610234565b611f09610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6d576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000818152603a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b611fec610e31565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612050576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff83167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090911681176401000000004267ffffffffffffffff90811682029290921793849055604051930416917f049fe9dd413cdf037cce27011cc1790c753118272f3630e6e8bdfa5e8208176090600090a350565b565b6120d86115e4565b1561210f576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121198133610933565b50565b600054610100900460ff161580801561213c5750600054600160ff909116105b806121565750303b158015612156575060005460ff166001145b6121e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610234565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561224057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416612360576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b612368612a6b565b8015610e2a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006123de82601061595d565b61089c9061520861598d565b603c602052816000526040600020818154811061240657600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b6124413388888888888888600061258c565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008080368160388610156124d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c6964206f6e417070726f76652064617461000000000000000000006044820152606401610234565b505050833560601c94601485013594603481013560e01c94603890910193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8019150565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa158015610ea0573d6000803e3d6000fd5b8460005a9050600061259c61251c565b905089156125c6576125c673ffffffffffffffffffffffffffffffffffffffff82168d308d612b7e565b86156126725773ffffffffffffffffffffffffffffffffffffffff8b161561267257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610234565b61267b856123d1565b67ffffffffffffffff168867ffffffffffffffff16101561271e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610234565b6201d4c085111561278b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610234565b600073ffffffffffffffffffffffffffffffffffffffff8d1632148015906127b1575084155b6127bb578c6127d3565b7311110000000000000000000000000000000011118d015b905060008b8b8b8b8b8b6040516020016127f2969594939291906159b9565b604051602081830303815290604052905060008d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516128629190615511565b60405180910390a45050506128778282612be2565b5050505050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976128b4979096959101615a12565b604051602081830303815290604052805190602001209050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526129a59084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612eb9565b505050565b60008060006129ba866000612fc5565b9050806129f0576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016128b4949392919093845260208401929092526040830152606082015260800190565b600080612a5386612fe3565b9050612a6181868686613015565b9695505050505050565b600054610100900460ff16612b02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610234565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036120ce5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612bdc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612923565b50505050565b600154600090612c18907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615929565b90506000612c2461303c565b90506000816020015160ff16826000015163ffffffff16612c459190615a98565b90508215612d7c57600154600090612c7c908390700100000000000000000000000000000000900467ffffffffffffffff16615b00565b90506000836040015160ff1683612c939190615b74565b600154612cb39084906fffffffffffffffffffffffffffffffff16615b74565b612cbd9190615a98565b600154909150600090612d0e90612ce79084906fffffffffffffffffffffffffffffffff16615c30565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166130fd565b90506001861115612d3d57612d3a612ce782876040015160ff1660018a612d359190615929565b61311c565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612daf908490700100000000000000000000000000000000900467ffffffffffffffff1661598d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612e3c576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612e68906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615ca4565b90506000612e7a48633b9aca00613171565b612e849083615ce1565b905060005a612e939088615929565b905080821115612eaf57612eaf612eaa8284615929565b613188565b5050505050505050565b6000612f1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131b19092919063ffffffff16565b8051909150156129a55780806020019051810190612f399190615703565b6129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610234565b600080603f83619c4001026040850201603f5a021015949350505050565b60608180519060200120604051602001612fff91815260200190565b6040516020818303038152906040529050919050565b600061092a846130268786866131c0565b8051602091820120825192909101919091201490565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156130d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec49190615d0b565b600061311261310c8585613c3e565b83613c4e565b90505b9392505050565b6000670de0b6b3a764000061315d6131348583615a98565b61314690670de0b6b3a7640000615b00565b61315885670de0b6b3a7640000615b74565b613c5d565b6131679086615b74565b6131129190615a98565b6000818310156131815781613115565b5090919050565b6000805a90505b825a61319b9083615929565b10156129a5576131aa82615dc7565b915061318f565b60606131128484600085613c8e565b6060600084511161322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610234565b600061323884613e24565b9050600061324586613f10565b905060008460405160200161325c91815260200190565b60405160208183030381529060405290506000805b8451811015613bb557600085828151811061328e5761328e615dff565b602002602001015190508451831115613329576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610234565b826000036133e257805180516020918201206040516133779261335192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6133dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610234565b613539565b805151602011613498578051805160209182012060405161340c9261335192910190815260200190565b6133dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610234565b805184516020808701919091208251919092012014613539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610234565b61354560106001615e2e565b8160200151510361372157845183036136b95761357f816020015160108151811061357257613572615dff565b6020026020010151613f73565b96506000875111613612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610234565b600186516136209190615929565b82146136ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610234565b505050505050613115565b60008584815181106136cd576136cd615dff565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106136f8576136f8615dff565b6020026020010151905061370b81614027565b9550613718600186615e2e565b94505050613ba2565b600281602001515103613b1a5760006137398261404c565b905060008160008151811061375057613750615dff565b016020015160f81c90506000613767600283615e46565b613772906002615e68565b90506000613783848360ff16614070565b905060006137918a89614070565b9050600061379f83836140a6565b905080835114613831576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610234565b60ff851660021480613846575060ff85166003145b15613a3557808251146138db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610234565b6138f5876020015160018151811061357257613572615dff565b9c5060008d5111613988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610234565b60018c516139969190615929565b8814613a24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610234565b505050505050505050505050613115565b60ff85161580613a48575060ff85166001145b15613a8757613a748760200151600181518110613a6757613a67615dff565b6020026020010151614027565b9950613a80818a615e2e565b9850613b0f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610234565b505050505050613ba2565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610234565b5080613bad81615dc7565b915050613271565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610234565b6000818312156131815781613115565b60008183126131815781613115565b6000613115670de0b6b3a764000083613c758661415a565b613c7f9190615b74565b613c899190615a98565b61439e565b606082471015613d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610234565b73ffffffffffffffffffffffffffffffffffffffff85163b613d9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610234565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613dc79190615e8b565b60006040518083038185875af1925050503d8060008114613e04576040519150601f19603f3d011682016040523d82523d6000602084013e613e09565b606091505b5091509150613e198282866145dd565b979650505050505050565b80516060908067ffffffffffffffff811115613e4257613e4261517c565b604051908082528060200260200182016040528015613e8757816020015b6040805180820190915260608082526020820152815260200190600190039081613e605790505b50915060005b81811015613f09576040518060400160405280858381518110613eb257613eb2615dff565b60200260200101518152602001613ee1868481518110613ed457613ed4615dff565b6020026020010151614630565b815250838281518110613ef657613ef6615dff565b6020908102919091010152600101613e8d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613f68578060011b82018184015160001a8060041c8253600f811660018301535050600101613f3a565b509295945050505050565b60606000806000613f8385614643565b919450925090506000816001811115613f9e57613f9e615809565b14613fd5576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fdf8284615e2e565b855114614018576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092a85602001518484614ae1565b606060208260000151106140435761403e82613f73565b61089c565b61089c82614b75565b606061089c61406b836020015160008151811061357257613572615dff565b613f10565b60608251821061408f575060408051602081019091526000815261089c565b61311583838486516140a19190615929565b614b8b565b60008082518451106140b95782516140bc565b83515b90505b808210801561414357508282815181106140db576140db615dff565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411a5761411a615dff565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614153578160010191506140bf565b5092915050565b60008082136141c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b600060606141d284614d63565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136143cf57506000919050565b680755bf798b4a1bf1e58212614441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610234565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606083156145ec575081613115565b8251156145fc5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102349190615511565b606061089c61463e83614e39565b614ea6565b60008060008360000151600003614686576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f81116146ab576000600160009450945094505050614ada565b60b781116147c15760006146c0608083615929565b9050808760000151116146ff576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561477757507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b156147ae576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614ada915050565b60bf811161491f5760006147d660b783615929565b905080876000015111614815576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614877576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116148bf576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148c98184615e2e565b895111614902576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61490d836001615e2e565b9750955060009450614ada9350505050565b60f7811161498457600061493460c083615929565b905080876000015111614973576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614ada915050565b600061499160f783615929565b9050808760000151116149d0576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a32576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a7a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a848184615e2e565b895111614abd576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ac8836001615e2e565b9750955060019450614ada9350505050565b9193909250565b60608167ffffffffffffffff811115614afc57614afc61517c565b6040519080825280601f01601f191660200182016040528015614b26576020820181803683370190505b5090508115613115576000614b3b8486615e2e565b90506020820160005b84811015614b5c578281015182820152602001614b44565b84811115614b6b576000858301525b5050509392505050565b606061089c826020015160008460000151614ae1565b60608182601f011015614bfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b828284011015614c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b81830184511015614cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610234565b606082158015614cf25760405191506000825260208201604052614d5a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614d2b578051835260209283019201614d13565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000808211614dce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201528151600003614e88576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614eb685614643565b919450925090506001816001811115614ed157614ed1615809565b14614f08576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614f148385615e2e565b14614f4b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614f625790505093506000835b865181101561505057600080614fd56040518060400160405280858c60000151614fb99190615929565b8152602001858c60200151614fce9190615e2e565b9052614643565b509150915060405180604001604052808383614ff19190615e2e565b8152602001848b602001516150069190615e2e565b81525088858151811061501b5761501b615dff565b6020908102919091010152615031600185615e2e565b935061503d8183615e2e565b6150479084615e2e565b92505050614f8f565b50845250919392505050565b60006020828403121561506e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461311557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461211957600080fd5b60008083601f8401126150d257600080fd5b50813567ffffffffffffffff8111156150ea57600080fd5b60208301915083602082850101111561510257600080fd5b9250929050565b60008060008060006080868803121561512157600080fd5b853561512c8161509e565b9450602086013561513c8161509e565b935060408601359250606086013567ffffffffffffffff81111561515f57600080fd5b61516b888289016150c0565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156151f2576151f261517c565b604052919050565b600082601f83011261520b57600080fd5b813567ffffffffffffffff8111156152255761522561517c565b61525660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016151ab565b81815284602083860101111561526b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561529a57600080fd5b60405160c0810167ffffffffffffffff82821081831117156152be576152be61517c565b8160405282935084358352602085013591506152d98261509e565b816020840152604085013591506152ef8261509e565b816040840152606085013560608401526080850135608084015260a085013591508082111561531d57600080fd5b5061532a858286016151fa565b60a0830152505092915050565b6000806040838503121561534a57600080fd5b823567ffffffffffffffff81111561536157600080fd5b61536d85828601615288565b925050602083013561537e8161509e565b809150509250929050565b60006020828403121561539b57600080fd5b81356131158161509e565b600080600080600085870360e08112156153bf57600080fd5b863567ffffffffffffffff808211156153d757600080fd5b6153e38a838b01615288565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561541c57600080fd5b60408901955060c089013592508083111561543657600080fd5b828901925089601f84011261544a57600080fd5b823591508082111561545b57600080fd5b508860208260051b840101111561547157600080fd5b959894975092955050506020019190565b60006020828403121561549457600080fd5b5035919050565b60005b838110156154b657818101518382015260200161549e565b83811115612bdc5750506000910152565b600081518084526154df81602086016020860161549b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061311560208301846154c7565b6000806040838503121561553757600080fd5b82359150602083013561537e8161509e565b63ffffffff8116811461211957600080fd5b60006020828403121561556d57600080fd5b813561311581615549565b60006020828403121561558a57600080fd5b813567ffffffffffffffff8111156155a157600080fd5b6155ad84828501615288565b949350505050565b600080600080608085870312156155cb57600080fd5b84356155d68161509e565b935060208501356155e68161509e565b925060408501356155f68161509e565b9150606085013561560681615549565b939692955090935050565b67ffffffffffffffff8116811461211957600080fd5b60006020828403121561563957600080fd5b813561311581615611565b6000806040838503121561565757600080fd5b50508035926020909101359150565b801515811461211957600080fd5b600080600080600080600060c0888a03121561568f57600080fd5b873561569a8161509e565b9650602088013595506040880135945060608801356156b881615611565b935060808801356156c881615666565b925060a088013567ffffffffffffffff8111156156e457600080fd5b6156f08a828b016150c0565b989b979a50959850939692959293505050565b60006020828403121561571557600080fd5b815161311581615666565b60006020828403121561573257600080fd5b81516131158161509e565b60008060006060848603121561575257600080fd5b835161575d81615549565b602085015190935061576e81615611565b604085015190925061577f8161509e565b809150509250925092565b60006020828403121561579c57600080fd5b5051919050565b6000608082840312156157b557600080fd5b6040516080810181811067ffffffffffffffff821117156157d8576157d861517c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561584a57600080fd5b81516003811061311557600080fd5b600067ffffffffffffffff808411156158745761587461517c565b8360051b60206158858183016151ab565b86815291850191818101903684111561589d57600080fd5b865b848110156158d1578035868111156158b75760008081fd5b6158c336828b016151fa565b84525091830191830161589f565b50979650505050505050565b6000602082840312156158ef57600080fd5b815161311581615611565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561593b5761593b6158fa565b500390565b60006020828403121561595257600080fd5b815161311581615549565b600067ffffffffffffffff80831681851681830481118215151615615984576159846158fa565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159b0576159b06158fa565b01949350505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a5d60c08301846154c7565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615aa757615aa7615a69565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615afb57615afb6158fa565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b3a57615b3a6158fa565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b6e57615b6e6158fa565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bb557615bb56158fa565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615bf057615bf06158fa565b60008712925087820587128484161615615c0c57615c0c6158fa565b87850587128184161615615c2257615c226158fa565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c6a57615c6a6158fa565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c9e57615c9e6158fa565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cdc57615cdc6158fa565b500290565b600082615cf057615cf0615a69565b500490565b805160ff81168114615d0657600080fd5b919050565b600060c08284031215615d1d57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d4057615d4061517c565b6040528251615d4e81615549565b8152615d5c60208401615cf5565b6020820152615d6d60408401615cf5565b60408201526060830151615d8081615549565b60608201526080830151615d9381615549565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615dbb57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615df857615df86158fa565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615e4157615e416158fa565b500190565b600060ff831680615e5957615e59615a69565b8060ff84160691505092915050565b600060ff821660ff841680821015615e8257615e826158fa565b90039392505050565b60008251615e9d81846020870161549b565b919091019291505056fea164736f6c634300080f000a" +var OptimismPortal2DeployedBin = "0x6080604052600436106101d15760003560e01c80637d6be8dc116100f7578063a14238e711610095578063bb2c727e11610064578063bb2c727e14610661578063bf653a5c14610708578063cff0ab961461073b578063f2b4e617146107dc57600080fd5b8063a14238e7146105d1578063a35d99df14610601578063a3860f4814610621578063b9e559581461064157600080fd5b80638c3152e9116100d15780638c3152e9146105315780638e819e5414610551578063952b2797146105715780639bf62d82146105a457600080fd5b80637d6be8dc146104f15780637fc48504146105115780638b4c40b01461036d57600080fd5b806345884d321161016f578063513747ab1161013e578063513747ab1461042b57806354fd4d50146104665780635c975abb146104bc57806371c1566e146104d157600080fd5b806345884d32146103845780634870496f146103b45780634d0047ee146103d45780634fd0434c146103e957600080fd5b80633c9f397c116101ab5780633c9f397c146102fb5780634273ca161461032d57806343ca1c501461034d578063452a93201461036f57600080fd5b806301ffc9a71461024257806333d7e2bd1461027757806335e80ab3146102c957600080fd5b3661023d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4f6e6c7920616c6c6f77206e617469766520746f6b656e00000000000000000060448201526064015b60405180910390fd5b600080fd5b34801561024e57600080fd5b5061026261025d36600461504c565b610809565b60405190151581526020015b60405180910390f35b34801561028357600080fd5b506037546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161026e565b3480156102d557600080fd5b506035546102a490610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561030757600080fd5b50603b546103189063ffffffff1681565b60405163ffffffff909116815260200161026e565b34801561033957600080fd5b506102626103483660046150f9565b6108a2565b34801561035957600080fd5b5061036d610368366004615327565b610931565b005b34801561037b57600080fd5b506102a4610e2f565b34801561039057600080fd5b5061026261039f366004615379565b603a6020526000908152604090205460ff1681565b3480156103c057600080fd5b5061036d6103cf366004615396565b610ec7565b3480156103e057600080fd5b506102a46115d8565b3480156103f557600080fd5b50603b5461041290640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161026e565b34801561043757600080fd5b50610458610446366004615472565b6000908152603c602052604090205490565b60405190815260200161026e565b34801561047257600080fd5b506104af6040518060400160405280600681526020017f332e31302e30000000000000000000000000000000000000000000000000000081525081565b60405161026e9190615501565b3480156104c857600080fd5b506102626115e2565b3480156104dd57600080fd5b5061036d6104ec366004615514565b611675565b3480156104fd57600080fd5b5061036d61050c366004615379565b611eff565b34801561051d57600080fd5b5061036d61052c36600461554b565b611fe2565b34801561053d57600080fd5b5061036d61054c366004615568565b6120ce565b34801561055d57600080fd5b5061036d61056c3660046155a5565b61211a565b34801561057d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b3480156105b057600080fd5b506032546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156105dd57600080fd5b506102626105ec366004615472565b60336020526000908152604090205460ff1681565b34801561060d57600080fd5b5061041261061c366004615617565b6123cf565b34801561062d57600080fd5b506102a461063c366004615634565b6123e8565b34801561064d57600080fd5b5061036d61065c366004615664565b61242d565b34801561066d57600080fd5b506106d361067c366004615514565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161026e565b34801561071457600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610458565b34801561074757600080fd5b506001546107a3906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161026e565b3480156107e857600080fd5b506038546102a49073ffffffffffffffffffffffffffffffffffffffff1681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f4273ca1600000000000000000000000000000000000000000000000000000000148061089c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000806000803660006108b58888612462565b945094509450945094506108c7612518565b73ffffffffffffffffffffffffffffffffffffffff16330361091e576109108b868b8763ffffffff881673ffffffffffffffffffffffffffffffffffffffff8416158888612588565b600195505050505050610928565b6000955050505050505b95945050505050565b6109396115e2565b15610970576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610a19576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610234565b6000610a2483612874565b9050610a308183611675565b600081815260336020526040812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610a6f612518565b90508073ffffffffffffffffffffffffffffffffffffffff16846040015173ffffffffffffffffffffffffffffffffffffffff1603610b56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d20506f7274616c3a2063616e6e6f74206d616b652061206460448201527f69726563742063616c6c20746f206e617469766520746f6b656e20636f6e747260648201527f6163740000000000000000000000000000000000000000000000000000000000608482015260a401610234565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055606084015115610c895760a08401515115610c5e57604080850151606086015191517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481019290925282169063095ea7b3906044016020604051808303816000875af1158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5891906156f3565b50610c89565b60408401516060850151610c899173ffffffffffffffffffffffffffffffffffffffff8416916128c1565b60008460a0015151600014610cb857610cb18560400151866080015160008860a0015161299a565b9050610cbc565b5060015b60a08501515115801590610cd35750606085015115155b15610d795760408581015190517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152600060248201529083169063095ea7b3906044016020604051808303816000875af1158015610d53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7791906156f3565b505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405183907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610ddb90841515815260200190565b60405180910390a280158015610df15750326001145b15610e28576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190615710565b905090565b610ecf6115e2565b15610f06576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610234565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015611039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105d919061572d565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d3919061577a565b603b5490915063ffffffff848116911614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b61118761118236889003880188615793565b6129f8565b8114611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610234565b600061122089612874565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190615828565b60028111156112a4576112a46157f9565b03611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d65730000000000006064820152608401610234565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506113fa9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152906113f0898b615849565b8b60400135612a37565b611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610234565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4604051339083907f798f9f13695f8f045aa5f80ed8efebb695f3c7fe65da381969f2f28bf3c60b9790600090a3506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000610ec2612518565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec291906156f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c69737465640000000000000000000000000000006064820152608401610234565b816020015167ffffffffffffffff1660000361183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a401610234565b60006118bf8273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b291906158cd565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff161161198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426119c99190615919565b11611a56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d6174757265642079657400000000000000000000006064820152608401610234565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac79190615828565b6002811115611ad857611ad86157f9565b14611b65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c696461746564000000000000000000006064820152608401610234565b603b5463ffffffff1663ffffffff16611bef8373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611be69190615930565b63ffffffff1690565b63ffffffff1614611c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610234565b603b5467ffffffffffffffff64010000000090910481169082161015611d50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a401610234565b7f0000000000000000000000000000000000000000000000000000000000000000611dbf8373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561188e573d6000803e3d6000fd5b611dd39067ffffffffffffffff1642615919565b11611e60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d676170000000000000000000000000000000000000000000006064820152608401610234565b60008581526033602052604090205460ff1615610e28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610234565b611f07610e2f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f6b576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166000818152603a602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f192c289026d59a41a27f5aea08f3969b57931b0589202d14f4368cded95d3cda9190a250565b611fea610e2f565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461204e576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff83167fffffffffffffffffffffffffffffffffffffffff00000000000000000000000090911681176401000000004267ffffffffffffffff90811682029290921793849055604051930416917f049fe9dd413cdf037cce27011cc1790c753118272f3630e6e8bdfa5e8208176090600090a350565b565b6120d66115e2565b1561210d576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121178133610931565b50565b600054610100900460ff161580801561213a5750600054600160ff909116105b806121545750303b158015612154575060005460ff166001145b6121e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610234565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561223e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100868416021790556032541661235e576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b612366612a5b565b8015610e2857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b60006123dc82601061594d565b61089c9061520861597d565b603c602052816000526040600020818154811061240457600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b61243d3388888888888888612588565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60008080368160388610156124d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f696e76616c6964206f6e417070726f76652064617461000000000000000000006044820152606401610234565b505050833560601c94601485013594603481013560e01c94603890910193507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8019150565b603754604080517f4d0047ee000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691634d0047ee9160048083019260209291908290030181865afa158015610e9e573d6000803e3d6000fd5b8360005a90506000612598612518565b905088156125c2576125c273ffffffffffffffffffffffffffffffffffffffff82168c308c612b6e565b851561266e5773ffffffffffffffffffffffffffffffffffffffff8a161561266e57604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e74726163746064820152608401610234565b612677846123cf565b67ffffffffffffffff168767ffffffffffffffff16101561271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610234565b6201d4c0841115612787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610234565b60003273ffffffffffffffffffffffffffffffffffffffff8d16036127ac578b6127c4565b7311110000000000000000000000000000000011118c015b905060008a8a8a8a8a8a6040516020016127e3969594939291906159a9565b604051602081830303815290604052905060008c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516128539190615501565b60405180910390a45050506128688282612bd2565b50505050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976128a4979096959101615a02565b604051602081830303815290604052805190602001209050919050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526129959084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612ea9565b505050565b60008060006129aa866000612fb5565b9050806129e0576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016128a4949392919093845260208401929092526040830152606082015260800190565b600080612a4386612fd3565b9050612a5181868686613005565b9695505050505050565b600054610100900460ff16612af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610234565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036120cc5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052612bcc9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612913565b50505050565b600154600090612c08907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615919565b90506000612c1461302c565b90506000816020015160ff16826000015163ffffffff16612c359190615a88565b90508215612d6c57600154600090612c6c908390700100000000000000000000000000000000900467ffffffffffffffff16615af0565b90506000836040015160ff1683612c839190615b64565b600154612ca39084906fffffffffffffffffffffffffffffffff16615b64565b612cad9190615a88565b600154909150600090612cfe90612cd79084906fffffffffffffffffffffffffffffffff16615c20565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166130ed565b90506001861115612d2d57612d2a612cd782876040015160ff1660018a612d259190615919565b61310c565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612d9f908490700100000000000000000000000000000000900467ffffffffffffffff1661597d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612e2c576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612e58906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615c94565b90506000612e6a48633b9aca00613161565b612e749083615cd1565b905060005a612e839088615919565b905080821115612e9f57612e9f612e9a8284615919565b613178565b5050505050505050565b6000612f0b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166131a19092919063ffffffff16565b8051909150156129955780806020019051810190612f2991906156f3565b612995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610234565b600080603f83619c4001026040850201603f5a021015949350505050565b60608180519060200120604051602001612fef91815260200190565b6040516020818303038152906040529050919050565b6000610928846130168786866131b0565b8051602091820120825192909101919091201490565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156130c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec29190615cfb565b60006131026130fc8585613c2e565b83613c3e565b90505b9392505050565b6000670de0b6b3a764000061314d6131248583615a88565b61313690670de0b6b3a7640000615af0565b61314885670de0b6b3a7640000615b64565b613c4d565b6131579086615b64565b6131029190615a88565b6000818310156131715781613105565b5090919050565b6000805a90505b825a61318b9083615919565b10156129955761319a82615db7565b915061317f565b60606131028484600085613c7e565b6060600084511161321d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610234565b600061322884613e14565b9050600061323586613f00565b905060008460405160200161324c91815260200190565b60405160208183030381529060405290506000805b8451811015613ba557600085828151811061327e5761327e615def565b602002602001015190508451831115613319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610234565b826000036133d257805180516020918201206040516133679261334192910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6133cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610234565b613529565b80515160201161348857805180516020918201206040516133fc9261334192910190815260200190565b6133cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610234565b805184516020808701919091208251919092012014613529576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610234565b61353560106001615e1e565b8160200151510361371157845183036136a95761356f816020015160108151811061356257613562615def565b6020026020010151613f63565b96506000875111613602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610234565b600186516136109190615919565b821461369e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610234565b505050505050613105565b60008584815181106136bd576136bd615def565b602001015160f81c60f81b60f81c9050600082602001518260ff16815181106136e8576136e8615def565b602002602001015190506136fb81614017565b9550613708600186615e1e565b94505050613b92565b600281602001515103613b0a5760006137298261403c565b905060008160008151811061374057613740615def565b016020015160f81c90506000613757600283615e36565b613762906002615e58565b90506000613773848360ff16614060565b905060006137818a89614060565b9050600061378f8383614096565b905080835114613821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610234565b60ff851660021480613836575060ff85166003145b15613a2557808251146138cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610234565b6138e5876020015160018151811061356257613562615def565b9c5060008d5111613978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610234565b60018c516139869190615919565b8814613a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610234565b505050505050505050505050613105565b60ff85161580613a38575060ff85166001145b15613a7757613a648760200151600181518110613a5757613a57615def565b6020026020010151614017565b9950613a70818a615e1e565b9850613aff565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610234565b505050505050613b92565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610234565b5080613b9d81615db7565b915050613261565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610234565b6000818312156131715781613105565b60008183126131715781613105565b6000613105670de0b6b3a764000083613c658661414a565b613c6f9190615b64565b613c799190615a88565b61438e565b606082471015613d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610234565b73ffffffffffffffffffffffffffffffffffffffff85163b613d8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610234565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613db79190615e7b565b60006040518083038185875af1925050503d8060008114613df4576040519150601f19603f3d011682016040523d82523d6000602084013e613df9565b606091505b5091509150613e098282866145cd565b979650505050505050565b80516060908067ffffffffffffffff811115613e3257613e3261516c565b604051908082528060200260200182016040528015613e7757816020015b6040805180820190915260608082526020820152815260200190600190039081613e505790505b50915060005b81811015613ef9576040518060400160405280858381518110613ea257613ea2615def565b60200260200101518152602001613ed1868481518110613ec457613ec4615def565b6020026020010151614620565b815250838281518110613ee657613ee6615def565b6020908102919091010152600101613e7d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613f58578060011b82018184015160001a8060041c8253600f811660018301535050600101613f2a565b509295945050505050565b60606000806000613f7385614633565b919450925090506000816001811115613f8e57613f8e6157f9565b14613fc5576040517f1ff9b2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fcf8284615e1e565b855114614008576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61092885602001518484614ad1565b606060208260000151106140335761402e82613f63565b61089c565b61089c82614b65565b606061089c61405b836020015160008151811061356257613562615def565b613f00565b60608251821061407f575060408051602081019091526000815261089c565b61310583838486516140919190615919565b614b7b565b60008082518451106140a95782516140ac565b83515b90505b808210801561413357508282815181106140cb576140cb615def565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061410a5761410a615def565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614143578160010191506140af565b5092915050565b60008082136141b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b600060606141c284614d53565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136143bf57506000919050565b680755bf798b4a1bf1e58212614431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610234565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606083156145dc575081613105565b8251156145ec5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102349190615501565b606061089c61462e83614e29565b614e96565b60008060008360000151600003614676576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020840151805160001a607f811161469b576000600160009450945094505050614aca565b60b781116147b15760006146b0608083615919565b9050808760000151116146ef576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214801561476757507f80000000000000000000000000000000000000000000000000000000000000007fff000000000000000000000000000000000000000000000000000000000000008216105b1561479e576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060019550935060009250614aca915050565b60bf811161490f5760006147c660b783615919565b905080876000015111614805576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614867576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c603781116148af576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148b98184615e1e565b8951116148f2576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6148fd836001615e1e565b9750955060009450614aca9350505050565b60f7811161497457600061492460c083615919565b905080876000015111614963576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600195509350849250614aca915050565b600061498160f783615919565b9050808760000151116149c0576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a22576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600184015160088302610100031c60378111614a6a576040517fbabb01dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614a748184615e1e565b895111614aad576040517f66c9448500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b614ab8836001615e1e565b9750955060019450614aca9350505050565b9193909250565b60608167ffffffffffffffff811115614aec57614aec61516c565b6040519080825280601f01601f191660200182016040528015614b16576020820181803683370190505b5090508115613105576000614b2b8486615e1e565b90506020820160005b84811015614b4c578281015182820152602001614b34565b84811115614b5b576000858301525b5050509392505050565b606061089c826020015160008460000151614ad1565b60608182601f011015614bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b828284011015614c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610234565b81830184511015614cc3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610234565b606082158015614ce25760405191506000825260208201604052614d4a565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614d1b578051835260209283019201614d03565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000808211614dbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610234565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60408051808201909152600080825260208201528151600003614e78576040517f5ab458fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60606000806000614ea685614633565b919450925090506001816001811115614ec157614ec16157f9565b14614ef8576040517f4b9c6abe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8451614f048385615e1e565b14614f3b576040517f5c5537b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614f525790505093506000835b865181101561504057600080614fc56040518060400160405280858c60000151614fa99190615919565b8152602001858c60200151614fbe9190615e1e565b9052614633565b509150915060405180604001604052808383614fe19190615e1e565b8152602001848b60200151614ff69190615e1e565b81525088858151811061500b5761500b615def565b6020908102919091010152615021600185615e1e565b935061502d8183615e1e565b6150379084615e1e565b92505050614f7f565b50845250919392505050565b60006020828403121561505e57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461310557600080fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461211757600080fd5b60008083601f8401126150c257600080fd5b50813567ffffffffffffffff8111156150da57600080fd5b6020830191508360208285010111156150f257600080fd5b9250929050565b60008060008060006080868803121561511157600080fd5b853561511c8161508e565b9450602086013561512c8161508e565b935060408601359250606086013567ffffffffffffffff81111561514f57600080fd5b61515b888289016150b0565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156151e2576151e261516c565b604052919050565b600082601f8301126151fb57600080fd5b813567ffffffffffffffff8111156152155761521561516c565b61524660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161519b565b81815284602083860101111561525b57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561528a57600080fd5b60405160c0810167ffffffffffffffff82821081831117156152ae576152ae61516c565b8160405282935084358352602085013591506152c98261508e565b816020840152604085013591506152df8261508e565b816040840152606085013560608401526080850135608084015260a085013591508082111561530d57600080fd5b5061531a858286016151ea565b60a0830152505092915050565b6000806040838503121561533a57600080fd5b823567ffffffffffffffff81111561535157600080fd5b61535d85828601615278565b925050602083013561536e8161508e565b809150509250929050565b60006020828403121561538b57600080fd5b81356131058161508e565b600080600080600085870360e08112156153af57600080fd5b863567ffffffffffffffff808211156153c757600080fd5b6153d38a838b01615278565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561540c57600080fd5b60408901955060c089013592508083111561542657600080fd5b828901925089601f84011261543a57600080fd5b823591508082111561544b57600080fd5b508860208260051b840101111561546157600080fd5b959894975092955050506020019190565b60006020828403121561548457600080fd5b5035919050565b60005b838110156154a657818101518382015260200161548e565b83811115612bcc5750506000910152565b600081518084526154cf81602086016020860161548b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061310560208301846154b7565b6000806040838503121561552757600080fd5b82359150602083013561536e8161508e565b63ffffffff8116811461211757600080fd5b60006020828403121561555d57600080fd5b813561310581615539565b60006020828403121561557a57600080fd5b813567ffffffffffffffff81111561559157600080fd5b61559d84828501615278565b949350505050565b600080600080608085870312156155bb57600080fd5b84356155c68161508e565b935060208501356155d68161508e565b925060408501356155e68161508e565b915060608501356155f681615539565b939692955090935050565b67ffffffffffffffff8116811461211757600080fd5b60006020828403121561562957600080fd5b813561310581615601565b6000806040838503121561564757600080fd5b50508035926020909101359150565b801515811461211757600080fd5b600080600080600080600060c0888a03121561567f57600080fd5b873561568a8161508e565b9650602088013595506040880135945060608801356156a881615601565b935060808801356156b881615656565b925060a088013567ffffffffffffffff8111156156d457600080fd5b6156e08a828b016150b0565b989b979a50959850939692959293505050565b60006020828403121561570557600080fd5b815161310581615656565b60006020828403121561572257600080fd5b81516131058161508e565b60008060006060848603121561574257600080fd5b835161574d81615539565b602085015190935061575e81615601565b604085015190925061576f8161508e565b809150509250925092565b60006020828403121561578c57600080fd5b5051919050565b6000608082840312156157a557600080fd5b6040516080810181811067ffffffffffffffff821117156157c8576157c861516c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561583a57600080fd5b81516003811061310557600080fd5b600067ffffffffffffffff808411156158645761586461516c565b8360051b602061587581830161519b565b86815291850191818101903684111561588d57600080fd5b865b848110156158c1578035868111156158a75760008081fd5b6158b336828b016151ea565b84525091830191830161588f565b50979650505050505050565b6000602082840312156158df57600080fd5b815161310581615601565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561592b5761592b6158ea565b500390565b60006020828403121561594257600080fd5b815161310581615539565b600067ffffffffffffffff80831681851681830481118215151615615974576159746158ea565b02949350505050565b600067ffffffffffffffff8083168185168083038211156159a0576159a06158ea565b01949350505050565b8681528560208201527fffffffffffffffff0000000000000000000000000000000000000000000000008560c01b16604082015283151560f81b6048820152818360498301376000910160490190815295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615a4d60c08301846154b7565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a9757615a97615a59565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615aeb57615aeb6158ea565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b2a57615b2a6158ea565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b5e57615b5e6158ea565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615ba557615ba56158ea565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615be057615be06158ea565b60008712925087820587128484161615615bfc57615bfc6158ea565b87850587128184161615615c1257615c126158ea565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c5a57615c5a6158ea565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615c8e57615c8e6158ea565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615ccc57615ccc6158ea565b500290565b600082615ce057615ce0615a59565b500490565b805160ff81168114615cf657600080fd5b919050565b600060c08284031215615d0d57600080fd5b60405160c0810181811067ffffffffffffffff82111715615d3057615d3061516c565b6040528251615d3e81615539565b8152615d4c60208401615ce5565b6020820152615d5d60408401615ce5565b60408201526060830151615d7081615539565b60608201526080830151615d8381615539565b608082015260a08301516fffffffffffffffffffffffffffffffff81168114615dab57600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615de857615de86158ea565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008219821115615e3157615e316158ea565b500190565b600060ff831680615e4957615e49615a59565b8060ff84160691505092915050565b600060ff821660ff841680821015615e7257615e726158ea565b90039392505050565b60008251615e8d81846020870161548b565b919091019291505056fea164736f6c634300080f000a" func init() { diff --git a/packages/tokamak/contracts-bedrock/src/L1/OptimismPortal2.sol b/packages/tokamak/contracts-bedrock/src/L1/OptimismPortal2.sol index 8c5af46f6..b2f74d93c 100644 --- a/packages/tokamak/contracts-bedrock/src/L1/OptimismPortal2.sol +++ b/packages/tokamak/contracts-bedrock/src/L1/OptimismPortal2.sol @@ -466,7 +466,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, OnApprove, ISemver { (address to, uint256 value, uint32 gasLimit, bytes calldata message) = unpackOnApproveData(_data); if (msg.sender == _nativeToken()) { - _depositTransaction(_owner, to, _amount, value, gasLimit, to == address(0), message, true); + _depositTransaction(_owner, to, _amount, value, gasLimit, to == address(0), message); return true; } else { return false; @@ -495,7 +495,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, OnApprove, ISemver ) external { - _depositTransaction(msg.sender, _to, _mint, _value, _gasLimit, _isCreation, _data, false); + _depositTransaction(msg.sender, _to, _mint, _value, _gasLimit, _isCreation, _data); } /// @notice Accepts deposits of L2's native token and data, and emits a TransactionDeposited event for @@ -509,7 +509,6 @@ contract OptimismPortal2 is Initializable, ResourceMetering, OnApprove, ISemver /// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1. /// @param _isCreation Whether or not the transaction is a contract creation. /// @param _data Data to trigger the recipient with. - /// @param _isOnApproveTrigger Whether or not the transaction is trigger from approveAndCall. function _depositTransaction( address _sender, address _to, @@ -517,8 +516,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, OnApprove, ISemver uint256 _value, uint64 _gasLimit, bool _isCreation, - bytes calldata _data, - bool _isOnApproveTrigger + bytes calldata _data ) internal metered(_gasLimit) @@ -546,7 +544,7 @@ contract OptimismPortal2 is Initializable, ResourceMetering, OnApprove, ISemver // Transform the from-address to its alias if the caller is a contract. address from = - ((_sender != tx.origin) && !_isOnApproveTrigger) ? AddressAliasHelper.applyL1ToL2Alias(_sender) : _sender; + ((_sender != tx.origin)) ? AddressAliasHelper.applyL1ToL2Alias(_sender) : _sender; // Compute the opaque data that will be emitted as part of the TransactionDeposited event. // We use opaque data so that we can update the TransactionDeposited event in the future