77 txs
4 calls
constructor
constructor()
functions
ERC20Limit
viewfunction ERC20Limit() view returns (uint256)
hasPermission
viewfunction hasPermission(address _addr, uint8 _permission) view returns (bool)
isOwner
viewfunction isOwner(address _owner) view returns (bool)
isPaused
viewfunction isPaused() view returns (bool)
isUnderLimit
viewfunction isUnderLimit(uint256 _amount) view returns (bool)
owner
viewfunction owner() view returns (address)
PERMISSION_DEPLOY_RECEIVER
viewfunction PERMISSION_DEPLOY_RECEIVER() view returns (uint8)
PERMISSION_EXECUTE_ON_RECEIVER
viewfunction PERMISSION_EXECUTE_ON_RECEIVER() view returns (uint8)
PERMISSION_EXECUTE
viewfunction PERMISSION_EXECUTE() view returns (uint8)
PERMISSION_ISSUE_ERC721
viewfunction PERMISSION_ISSUE_ERC721() view returns (uint8)
PERMISSION_PAUSE
viewfunction PERMISSION_PAUSE() view returns (uint8)
PERMISSION_SEND_ERC20_LIMIT
viewfunction PERMISSION_SEND_ERC20_LIMIT() view returns (uint8)
PERMISSION_SEND_ERC20
viewfunction PERMISSION_SEND_ERC20() view returns (uint8)
PERMISSION_SEND_ERC721
viewfunction PERMISSION_SEND_ERC721() view returns (uint8)
PERMISSION_SEND_ETH
viewfunction PERMISSION_SEND_ETH() view returns (uint8)
PERMISSION_SWEEP_ERC20
viewfunction PERMISSION_SWEEP_ERC20() view returns (uint8)
PERMISSION_SWEEP_ETH
viewfunction PERMISSION_SWEEP_ETH() view returns (uint8)
permissionExists
viewfunction permissionExists(uint8) view returns (bool)
permissions
viewfunction permissions(address) view returns (bytes32)
receiverFor
viewfunction receiverFor(uint256 _id) view returns (address)
receiverTemplate
viewfunction receiverTemplate() view returns (address)
addPermission
nonpayablefunction addPermission(address _addr, uint8 _permission)
addPermissions
nonpayablefunction addPermissions(address _addr, uint8[] _permissions)
clearPermissions
nonpayablefunction clearPermissions(address _addr)
delPermission
nonpayablefunction delPermission(address _addr, uint8 _permission)
deployReceivers
nonpayablefunction deployReceivers(uint256[] _receivers)
deployReceiversRange
nonpayablefunction deployReceiversRange(uint256 _from, uint256 _to)
execute
nonpayablefunction execute(address _to, uint256 _value, bytes _data) returns (bytes)
executeOnReceiver
nonpayablefunction executeOnReceiver(uint256 _id, address _to, uint256 _value, bytes _data) returns (bytes)
issueBatchERC721
nonpayablefunction issueBatchERC721(address _beneficiary, address[] _contracts, uint256[] _optionIds, uint256[] _issuedIds)
issueERC721
nonpayablefunction issueERC721(address _beneficiary, address _contract, uint256 _optionId, uint256 _issuedId)
pause
nonpayablefunction pause()
rennounceOwnership
nonpayablefunction rennounceOwnership()
sendBatchERC20
nonpayablefunction sendBatchERC20(address _token, address[] _to, uint256[] _amounts)
sendBatchERC721
nonpayablefunction sendBatchERC721(address _token, uint256[] _ids, address[] _tos, uint256[] _tokenIds)
sendBatchETH
nonpayablefunction sendBatchETH(address[] _tos, uint256[] _amounts)
sendERC20
nonpayablefunction sendERC20(address _token, address _to, uint256 _amount)
sendERC20WithLimit
nonpayablefunction sendERC20WithLimit(address _token, address _to, uint256 _amount)
sendERC721
nonpayablefunction sendERC721(address _token, uint256 _from, address _to, uint256 _id)
sendETH
nonpayablefunction sendETH(address _to, uint256 _amount)
sweepBatchERC20
nonpayablefunction sweepBatchERC20(address _token, uint256[] _ids)
sweepBatchETH
nonpayablefunction sweepBatchETH(uint256[] _ids)
sweepERC20
nonpayablefunction sweepERC20(address _token, uint256 _id)
sweepETH
nonpayablefunction sweepETH(uint256 _id)
transferOwnership
nonpayablefunction transferOwnership(address _newOwner)
unpause
nonpayablefunction unpause()
updateERC20Limit
nonpayablefunction updateERC20Limit(uint256 _limit)
events
AddPermission
event AddPermission(address indexed _addr, uint8 _permission)
ClearPermissions
event ClearPermissions(address indexed _addr)
DelPermission
event DelPermission(address indexed _addr, uint8 _permission)
OwnershipTransferred
event OwnershipTransferred(address indexed _previousOwner, address indexed _newOwner)
Paused
event Paused(address _sender)
Unpaused
event Unpaused(address _sender)
UpdateERC20Limit
event UpdateERC20Limit(uint256 _limit)
errors
ArrayLengthMismatchERC20
error ArrayLengthMismatchERC20(uint256 _array1, uint256 _array2)
ArrayLengthMismatchERC721
error ArrayLengthMismatchERC721(uint256 _array1, uint256 _array2, uint256 _array3)
ArrayLengthMismatchETH
error ArrayLengthMismatchETH(uint256 _array1, uint256 _array2)
ArrayLengthMismatchIssueERC721
error ArrayLengthMismatchIssueERC721(uint256 _array1, uint256 _array2, uint256 _array3)
CallError
error CallError(address _to, uint256 _value, bytes _data, bytes _result)
ContractNotCreated
error ContractNotCreated()
ContractPaused
error ContractPaused()
DuplicatedPermission
error DuplicatedPermission(uint8 _permission)
ErrorSendingERC20
error ErrorSendingERC20(address _token, address _to, uint256 _amount, bytes _result)
ErrorSendingETH
error ErrorSendingETH(address _to, uint256 _amount, bytes _result)
ErrorSweepingERC20
error ErrorSweepingERC20(address _token, address _receiver, uint256 _amount, bytes _result)
ExceededLimit
error ExceededLimit(uint256 _amount, uint256 _limit)
InvalidNewOwner
error InvalidNewOwner()
NotOwner
error NotOwner(address _sender, address _owner)
PermissionDenied
error PermissionDenied(address _sender, uint8 _permission)
ReceiverCallError
error ReceiverCallError(address _receiver, address _to, uint256 _value, bytes _data, bytes _result)
creation bytecode
0x6102206040526004805460ff1916600117905534801561001d575f5ffd5b50600960086006600760046005600360016002600b600a60405161004090610249565b604051809103905ff080158015610059573d5f5f3e3d5ffd5b506001600160a01b038116608052604080517f3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000602082015260609290921b6001600160601b03191660348301526e5af43d82803e903d91602b57fd5bf360881b60488301528051808303603701815260579092019052805160209091012060a0525f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a360ff90811660c05283811660e0819052838216610100529082166101205261013f906101f1565b6101005161014c906101f1565b61012051610159906101f1565b50505060ff811661014081905261016f906101f1565b5060ff8083166101608190529082166101805261018b906101f1565b61018051610198906101f1565b505060ff8083166101a08190529082166101c0526101b5906101f1565b6101c0516101c2906101f1565b505060ff81166101e08190526101d7906101f1565b5060ff81166102008190526101eb906101f1565b50610256565b60ff8082165f90815260036020526040902054161561022c576040516361ca9f2960e01b815260ff8216600482015260240160405180910390fd5b60ff165f908152600360205260409020805460ff19166001179055565b6103b880613c4c83390190565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516138e46103685f395f81816109c301528181611c4c015261252501525f818161093e01528181610fae015261241e01525f81816109f6015261204101525f81816106070152610e8401525f8181610484015281816116d801526121ce01525f8181610971015281816115c60152611dbb01525f818161080a0152818161132f015261185401525f81816104c9015261116e01525f818161052f01528181610c960152611b4d01525f818161090b01528181610a98015261276c01525f81816107b80152611a0d01525f611f9801525f81816105900152612f1501526138e45ff3fe6080604052600436106102fb575f3560e01c80636b1cc75111610191578063b2356304116100dc578063d572c88c11610087578063ebc1a30911610062578063ebc1a309146109b2578063f1411c33146109e5578063f2fde38b14610a18575f5ffd5b8063d572c88c1461092d578063d8050ed214610960578063e6d1199914610993575f5ffd5b8063c2b95680116100b7578063c2b95680146108bc578063c2d0d1d0146108db578063d255b4a4146108fa575f5ffd5b8063b23563041461085f578063b61d27f61461087e578063c04450d31461089d575f5ffd5b80639830ff6a1161013c578063a659eb8e11610117578063a659eb8e146107f9578063aba58e771461082c578063b187bd261461084b575f5ffd5b80639830ff6a146107885780639990c944146107a75780639da947d8146107da575f5ffd5b80638da5cb5b1161016c5780638da5cb5b1461071f5780638f975a641461074a5780639388d2b014610769575f5ffd5b80636b1cc751146106d85780636ec2f8f6146106f75780638456cb591461070b575f5ffd5b80633df53c57116102515780634ada739a116101fc57806363e85d2d116101d757806363e85d2d1461064857806364751e411461069a57806364a197f3146106b9575f5ffd5b80634ada739a146105d75780635e0b862b146105f65780635e867c7114610629575f5ffd5b806343565ca61161022c57806343565ca61461051e578063493bf970146105515780634a6f23971461057f575f5ffd5b80633df53c57146104b85780633f4ba83a146104eb57806342942cb9146104ff575f5ffd5b8063229c86d4116102b157806331b33f431161028c57806331b33f4314610428578063328bc10d146104545780633871515814610473575f5ffd5b8063229c86d4146103cb5780632659ac0f146103ea5780632f54bf6e14610409575f5ffd5b806311c91914116102e157806311c9191414610365578063197ebb86146103975780631d85570a146103ac575f5ffd5b806301e88208146103065780630c8d1a9614610344575f5ffd5b3661030257005b5f5ffd5b348015610311575f5ffd5b50610331610320366004612ff7565b60026020525f908152604090205481565b6040519081526020015b60405180910390f35b34801561034f575f5ffd5b5061036361035e366004613061565b610a37565b005b348015610370575f5ffd5b5061038761037f3660046130b2565b600154101590565b604051901515815260200161033b565b3480156103a2575f5ffd5b5061033160015481565b3480156103b7575f5ffd5b506103636103c63660046130de565b610b57565b3480156103d6575f5ffd5b506103636103e5366004613061565b610bc5565b3480156103f5575f5ffd5b50610363610404366004613111565b610c35565b348015610414575f5ffd5b50610387610423366004612ff7565b610ddc565b348015610433575f5ffd5b506104476104423660046131d1565b610e21565b60405161033b9190613271565b34801561045f575f5ffd5b5061036361046e366004613283565b610f4d565b34801561047e575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161033b565b3480156104c3575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f6575f5ffd5b5061036361104d565b34801561050a575f5ffd5b506103636105193660046132a3565b61110d565b348015610529575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b34801561055c575f5ffd5b5061038761056b3660046132e1565b60036020525f908152604090205460ff1681565b34801561058a575f5ffd5b506105b27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161033b565b3480156105e2575f5ffd5b506103636105f13660046130de565b611264565b348015610601575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b348015610634575f5ffd5b506103636106433660046132fa565b6112ce565b348015610653575f5ffd5b506103876106623660046130de565b5f600160ff83161b73ffffffffffffffffffffffffffffffffffffffff84165f90815260026020526040902054161515905092915050565b3480156106a5575f5ffd5b506103636106b43660046133ab565b611565565b3480156106c4575f5ffd5b506103636106d33660046133ea565b611677565b3480156106e3575f5ffd5b506103636106f2366004613414565b6117f3565b348015610702575f5ffd5b50610363611949565b348015610716575f5ffd5b506103636119fc565b34801561072a575f5ffd5b505f546105b29073ffffffffffffffffffffffffffffffffffffffff1681565b348015610755575f5ffd5b506103636107643660046132a3565b611aec565b348015610774575f5ffd5b50610363610783366004613459565b611beb565b348015610793575f5ffd5b506103636107a23660046130b2565b611d5a565b3480156107b2575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b3480156107e5575f5ffd5b506103636107f4366004612ff7565b611e41565b348015610804575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b348015610837575f5ffd5b506103636108463660046130b2565b611ead565b348015610856575f5ffd5b50610387611f16565b34801561086a575f5ffd5b506105b26108793660046130b2565b611f36565b348015610889575f5ffd5b5061044761089836600461349c565b611fde565b3480156108a8575f5ffd5b506103636108b73660046134f4565b61216d565b3480156108c7575f5ffd5b506103636108d63660046133ab565b6123bd565b3480156108e6575f5ffd5b506103636108f53660046132fa565b6124c4565b348015610905575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b348015610938575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b34801561096b575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b34801561099e575f5ffd5b506103636109ad3660046133ea565b61270b565b3480156109bd575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b3480156109f0575f5ffd5b506104a67f000000000000000000000000000000000000000000000000000000000000000081565b348015610a23575f5ffd5b50610363610a32366004612ff7565b6127f3565b600260045460ff166002811115610a5057610a50613554565b03610a87576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015610ad35750610ad133610ddc565b155b15610b1a576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff821660248201526044015b60405180910390fd5b815f5b81811015610b4f57610b4786868684818110610b3b57610b3b613581565b9050602002013561290f565b600101610b1d565b505050505050565b610b6033610ddc565b610bb7575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b610bc18282612a4e565b5050565b610bce33610ddc565b610c25575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b610c30838383612abd565b505050565b600260045460ff166002811115610c4e57610c4e613554565b03610c85576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015610cd15750610ccf33610ddc565b155b15610d13576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b83828114610d57576040517f252cfd240000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610b11565b5f5b81811015610dd257610dca878783818110610d7657610d76613581565b9050602002016020810190610d8b9190612ff7565b868684818110610d9d57610d9d613581565b905060200201358a73ffffffffffffffffffffffffffffffffffffffff16612aff9092919063ffffffff16565b600101610d59565b5050505050505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381169116148015610e1b575073ffffffffffffffffffffffffffffffffffffffff821615155b92915050565b6060600260045460ff166002811115610e3c57610e3c613554565b03610e73576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015610ebf5750610ebd33610ddc565b155b15610f01576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b610f4287878787878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250612c2a92505050565b979650505050505050565b600260045460ff166002811115610f6657610f66613554565b03610f9d576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015610fe95750610fe733610ddc565b155b1561102b576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b825b828110156110475761103e81612c49565b5060010161102d565b50505050565b61105633610ddc565b6110ad575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9060200160405180910390a1565b600260045460ff16600281111561112657611126613554565b0361115d576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b161580156111a957506111a733610ddc565b155b156111eb576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b816111f881600154101590565b61123c576001546040517f61748851000000000000000000000000000000000000000000000000000000008152610b11918391600401918252602082015260400190565b61125d73ffffffffffffffffffffffffffffffffffffffff86168585612aff565b5050505050565b61126d33610ddc565b6112c4575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b610bc18282612c5c565b600260045460ff1660028111156112e7576112e7613554565b0361131e576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b1615801561136a575061136833610ddc565b155b156113ac576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b8584811415806113bc5750808314155b15611404576040517fc8ef4fcb000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260448101849052606401610b11565b5f5b81811015611559575f6114308a8a8481811061142457611424613581565b90506020020135612c49565b905061154f818c5f7f23b872dd00000000000000000000000000000000000000000000000000000000838d8d8981811061146c5761146c613581565b90506020020160208101906114819190612ff7565b8c8c8a81811061149357611493613581565b60405173ffffffffffffffffffffffffffffffffffffffff9586166024820152949093166044850152506020909102013560648201526084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612cc2565b5050600101611406565b50505050505050505050565b600260045460ff16600281111561157e5761157e613554565b036115b5576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b1615801561160157506115ff33610ddc565b155b15611643576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b815f5b8181101561125d5761166f85858381811061166357611663613581565b90506020020135612db2565b600101611646565b600260045460ff16600281111561169057611690613554565b036116c7576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015611713575061171133610ddc565b155b15611755576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b5f5f8473ffffffffffffffffffffffffffffffffffffffff16846040515f6040518083038185875af1925050503d805f81146117ac576040519150601f19603f3d011682016040523d82523d5f602084013e6117b1565b606091505b50915091508161125d578484826040517f63ccad4b000000000000000000000000000000000000000000000000000000008152600401610b11939291906135ae565b600260045460ff16600281111561180c5761180c613554565b03611843576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b1615801561188f575061188d33610ddc565b155b156118d1576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b5f6118db85612c49565b60405173ffffffffffffffffffffffffffffffffffffffff8083166024830152861660448201526064810185905290915061194090829088905f907f23b872dd00000000000000000000000000000000000000000000000000000000906084016114cd565b50505050505050565b61195233610ddc565b6119a9575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b5f80547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015611a485750611a4633610ddc565b155b15611a8a576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660021790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020015b60405180910390a150565b600260045460ff166002811115611b0557611b05613554565b03611b3c576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015611b885750611b8633610ddc565b155b15611bca576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b61104773ffffffffffffffffffffffffffffffffffffffff85168484612aff565b600260045460ff166002811115611c0457611c04613554565b03611c3b576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015611c875750611c8533610ddc565b155b15611cc9576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b6040517fdafe477c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152602482018590526044820184905285169063dafe477c906064015f604051808303815f87803b158015611d3d575f5ffd5b505af1158015611d4f573d5f5f3e3d5ffd5b505050505050505050565b600260045460ff166002811115611d7357611d73613554565b03611daa576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015611df65750611df433610ddc565b155b15611e38576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b610bc182612db2565b611e4a33610ddc565b611ea1575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b611eaa81612e01565b50565b611eb633610ddc565b611f0d575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b611eaa81612e51565b5f600260045460ff166002811115611f3057611f30613554565b14905090565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021830152603582018490527f000000000000000000000000000000000000000000000000000000000000000060558084019190915283518084039091018152607590920190925280519101205f90610e1b565b6060600260045460ff166002811115611ff957611ff9613554565b03612030576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b1615801561207c575061207a33610ddc565b155b156120be576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b5f5f8773ffffffffffffffffffffffffffffffffffffffff168787876040516120e89291906135e2565b5f6040518083038185875af1925050503d805f8114612122576040519150601f19603f3d011682016040523d82523d5f602084013e612127565b606091505b509150915081610f425787878787846040517ff5faddbb000000000000000000000000000000000000000000000000000000008152600401610b119594939291906135f1565b600260045460ff16600281111561218657612186613554565b036121bd576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015612209575061220733610ddc565b155b1561224b576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b8382811461228f576040517f8417ea540000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401610b11565b5f5b81811015611940575f5f8888848181106122ad576122ad613581565b90506020020160208101906122c29190612ff7565b73ffffffffffffffffffffffffffffffffffffffff168787858181106122ea576122ea613581565b905060200201356040515f6040518083038185875af1925050503d805f811461232e576040519150601f19603f3d011682016040523d82523d5f602084013e612333565b606091505b5091509150816123b35788888481811061234f5761234f613581565b90506020020160208101906123649190612ff7565b87878581811061237657612376613581565b90506020020135826040517f63ccad4b000000000000000000000000000000000000000000000000000000008152600401610b11939291906135ae565b5050600101612291565b600260045460ff1660028111156123d6576123d6613554565b0361240d576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015612459575061245733610ddc565b155b1561249b576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b815f5b8181101561125d576124bb85858381811061142457611424613581565b5060010161249e565b600260045460ff1660028111156124dd576124dd613554565b03612514576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b16158015612560575061255e33610ddc565b155b156125a2576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b8584811415806125b25750808314155b156125fa576040517f4b0a36cc000000000000000000000000000000000000000000000000000000008152600481018290526024810186905260448101849052606401610b11565b5f5b818110156115595788888281811061261657612616613581565b905060200201602081019061262b9190612ff7565b73ffffffffffffffffffffffffffffffffffffffff1663dafe477c8b89898581811061265957612659613581565b9050602002013588888681811061267257612672613581565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff90951660048601526024850193909352506020909102013560448201526064015f604051808303815f87803b1580156126ea575f5ffd5b505af11580156126fc573d5f5f3e3d5ffd5b505050508060010190506125fc565b600260045460ff16600281111561272457612724613554565b0361275b576040517fab35696f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b335f908152600260205260409020547f000000000000000000000000000000000000000000000000000000000000000090600160ff83161b161580156127a757506127a533610ddc565b155b156127e9576040517f680076b800000000000000000000000000000000000000000000000000000000815233600482015260ff82166024820152604401610b11565b610c30838361290f565b6127fc33610ddc565b612853575f546040517f23295f0e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091166024820152604401610b11565b73ffffffffffffffffffffffffffffffffffffffff81166128a0576040517f54a5678600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f61291982611f36565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301529192505f918516906370a0823190602401602060405180830381865afa158015612988573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129ac9190613679565b90508015611047576129be8284612e86565b50604051306024820152604481018290525f90612a05908490879084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016114cd565b9050612a1081612ea9565b61125d57848383836040517fd0acb72d000000000000000000000000000000000000000000000000000000008152600401610b119493929190613690565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600260209081526040918290208054600160ff871690811b1990911690915591519182527f31712f88cf0ac4bb1f2a194ba7f7eedf070f0e687bb81f6c7dd562e2a4a975bf91015b60405180910390a25050565b5f5b8181101561104757612af784848484818110612add57612add613581565b9050602002016020810190612af291906132e1565b612c5c565b600101612abf565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291515f92839290871691612b9591906136e0565b5f604051808303815f865af19150503d805f8114612bce576040519150601f19603f3d011682016040523d82523d5f602084013e612bd3565b606091505b5091509150811580612beb5750612be981612ea9565b155b1561125d57848484836040517f329e8956000000000000000000000000000000000000000000000000000000008152600401610b119493929190613690565b6060612c40612c3886612c49565b858585612cc2565b95945050505050565b5f610e1b612c5683611f36565b83612e86565b73ffffffffffffffffffffffffffffffffffffffff82165f818152600260209081526040918290208054600160ff871690811b90911790915591519182527f87dd0a07ce69ed29fb6177354fd667fd36f490b40e519f46d19343eee4e6082d9101612ab1565b60605f5f8673ffffffffffffffffffffffffffffffffffffffff1663b61d27f68787876040518463ffffffff1660e01b8152600401612d03939291906135ae565b5f604051808303815f875af1158015612d1e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612d639190810190613732565b9150915081612da85786868686846040517f53df14d9000000000000000000000000000000000000000000000000000000008152600401610b11959493929190613833565b9695505050505050565b5f612dbc82611f36565b905073ffffffffffffffffffffffffffffffffffffffff8116318015610c3057612de68284612e86565b5061104782308360405180602001604052805f815250612cc2565b73ffffffffffffffffffffffffffffffffffffffff81165f81815260026020526040808220829055517ff3ae8a9ec7a74524888eda748db87556dc0137c576e33d9e443ff7c7045d8af79190a250565b60018190556040518181527fc789f3c6e11c26e01497dbada79eb3e880962e86835be4139cce578f55341e0390602001611ae1565b5f823b8015612e985783915050610e1b565b612ea183612ec8565b949350505050565b5f81515f1480610e1b575081806020019051810190610e1b9190613895565b604080517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000060208201527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060601b1660348201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060488201528151603781830301815260579091019091525f90610e1b9083905f8282516020840134f5905073ffffffffffffffffffffffffffffffffffffffff8116610e1b576040517f86714fd400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611eaa575f5ffd5b5f60208284031215613007575f5ffd5b813561301281612fd6565b9392505050565b5f5f83601f840112613029575f5ffd5b50813567ffffffffffffffff811115613040575f5ffd5b6020830191508360208260051b850101111561305a575f5ffd5b9250929050565b5f5f5f60408486031215613073575f5ffd5b833561307e81612fd6565b9250602084013567ffffffffffffffff811115613099575f5ffd5b6130a586828701613019565b9497909650939450505050565b5f602082840312156130c2575f5ffd5b5035919050565b803560ff811681146130d9575f5ffd5b919050565b5f5f604083850312156130ef575f5ffd5b82356130fa81612fd6565b9150613108602084016130c9565b90509250929050565b5f5f5f5f5f60608688031215613125575f5ffd5b853561313081612fd6565b9450602086013567ffffffffffffffff81111561314b575f5ffd5b61315788828901613019565b909550935050604086013567ffffffffffffffff811115613176575f5ffd5b61318288828901613019565b969995985093965092949392505050565b5f5f83601f8401126131a3575f5ffd5b50813567ffffffffffffffff8111156131ba575f5ffd5b60208301915083602082850101111561305a575f5ffd5b5f5f5f5f5f608086880312156131e5575f5ffd5b8535945060208601356131f781612fd6565b935060408601359250606086013567ffffffffffffffff811115613219575f5ffd5b61318288828901613193565b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6130126020830184613225565b5f5f60408385031215613294575f5ffd5b50508035926020909101359150565b5f5f5f606084860312156132b5575f5ffd5b83356132c081612fd6565b925060208401356132d081612fd6565b929592945050506040919091013590565b5f602082840312156132f1575f5ffd5b613012826130c9565b5f5f5f5f5f5f5f6080888a031215613310575f5ffd5b873561331b81612fd6565b9650602088013567ffffffffffffffff811115613336575f5ffd5b6133428a828b01613019565b909750955050604088013567ffffffffffffffff811115613361575f5ffd5b61336d8a828b01613019565b909550935050606088013567ffffffffffffffff81111561338c575f5ffd5b6133988a828b01613019565b989b979a50959850939692959293505050565b5f5f602083850312156133bc575f5ffd5b823567ffffffffffffffff8111156133d2575f5ffd5b6133de85828601613019565b90969095509350505050565b5f5f604083850312156133fb575f5ffd5b823561340681612fd6565b946020939093013593505050565b5f5f5f5f60808587031215613427575f5ffd5b843561343281612fd6565b935060208501359250604085013561344981612fd6565b9396929550929360600135925050565b5f5f5f5f6080858703121561346c575f5ffd5b843561347781612fd6565b9350602085013561348781612fd6565b93969395505050506040820135916060013590565b5f5f5f5f606085870312156134af575f5ffd5b84356134ba81612fd6565b935060208501359250604085013567ffffffffffffffff8111156134dc575f5ffd5b6134e887828801613193565b95989497509550505050565b5f5f5f5f60408587031215613507575f5ffd5b843567ffffffffffffffff81111561351d575f5ffd5b61352987828801613019565b909550935050602085013567ffffffffffffffff811115613548575f5ffd5b6134e887828801613019565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201525f612c406060830184613225565b818382375f9101908152919050565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015260806040820152826080820152828460a08301375f60a084830101525f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f850116820160a083820301606084015261366d60a0820185613225565b98975050505050505050565b5f60208284031215613689575f5ffd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8516815273ffffffffffffffffffffffffffffffffffffffff84166020820152826040820152608060608201525f612da86080830184613225565b5f82518060208501845e5f920191825250919050565b805180151581146130d9575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f5f60408385031215613743575f5ffd5b61374c836136f6565b9150602083015167ffffffffffffffff811115613767575f5ffd5b8301601f81018513613777575f5ffd5b805167ffffffffffffffff81111561379157613791613705565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff821117156137fd576137fd613705565b604052818152828201602001871015613814575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b73ffffffffffffffffffffffffffffffffffffffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015283604082015260a060608201525f61388360a0830185613225565b828103608084015261366d8185613225565b5f602082840312156138a5575f5ffd5b613012826136f656fea2646970667358221220921dbabee3a67186a00d66a698b0e546d57ec01eb83595362b962d09066efe0964736f6c634300081e003360a0604052348015600e575f5ffd5b503360805260805161038e61002a5f395f60ec015261038e5ff3fe608060405260043610610028575f3560e01c8063150b7a021461002a578063b61d27f6146100a4575b005b348015610035575f5ffd5b5061006e610044366004610227565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020015b60405180910390f35b3480156100af575f5ffd5b506100c36100be366004610295565b6100d1565b60405161009b9291906102ed565b5f60603373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610149576040517f4a0bfec100000000000000000000000000000000000000000000000000000000815233600482015260240160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff16858585604051610171929190610349565b5f6040518083038185875af1925050503d805f81146101ab576040519150601f19603f3d011682016040523d82523d5f602084013e6101b0565b606091505b509150915094509492505050565b73ffffffffffffffffffffffffffffffffffffffff811681146101df575f5ffd5b50565b5f5f83601f8401126101f2575f5ffd5b50813567ffffffffffffffff811115610209575f5ffd5b602083019150836020828501011115610220575f5ffd5b9250929050565b5f5f5f5f5f6080868803121561023b575f5ffd5b8535610246816101be565b94506020860135610256816101be565b935060408601359250606086013567ffffffffffffffff811115610278575f5ffd5b610284888289016101e2565b969995985093965092949392505050565b5f5f5f5f606085870312156102a8575f5ffd5b84356102b3816101be565b935060208501359250604085013567ffffffffffffffff8111156102d5575f5ffd5b6102e1878288016101e2565b95989497509550505050565b8215158152604060208201525f82518060408401528060208501606085015e5f6060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150509392505050565b818382375f910190815291905056fea2646970667358221220bebd280402589f57f14bbe094072b3d283771306d0e5ed9f84c7ec7824de3c2364736f6c634300081e0033