6 txs
7 calls
constructor
constructor(uint256 _protocolFee, uint256 _protocolFeeLight, address _protocolFeeWallet, uint256 _bonusScale, uint256 _bonusMax)
functions
authorized
viewfunction authorized(address) view returns (address)
bonusMax
viewfunction bonusMax() view returns (uint256)
bonusScale
viewfunction bonusScale() view returns (uint256)
calculateBonus
viewfunction calculateBonus(uint256 stakingBalance, uint256 feeAmount) view returns (uint256)
calculateProtocolFee
viewfunction calculateProtocolFee(address wallet, uint256 amount) view returns (uint256)
check
viewfunction check(address senderWallet, uint256 nonce, uint256 expiry, address signerWallet, address signerToken, uint256 signerAmount, address senderToken, uint256 senderAmount, uint8 v, bytes32 r, bytes32 s) view returns (bytes32[])
DOMAIN_CHAIN_ID
viewfunction DOMAIN_CHAIN_ID() view returns (uint256)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
FEE_DIVISOR
viewfunction FEE_DIVISOR() view returns (uint256)
nonceUsed
viewfunction nonceUsed(address signer, uint256 nonce) view returns (bool)
ORDER_TYPEHASH
viewfunction ORDER_TYPEHASH() view returns (bytes32)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
protocolFee
viewfunction protocolFee() view returns (uint256)
protocolFeeLight
viewfunction protocolFeeLight() view returns (uint256)
protocolFeeWallet
viewfunction protocolFeeWallet() view returns (address)
stakingToken
viewfunction stakingToken() view returns (address)
authorize
nonpayablefunction authorize(address signatory)
cancel
nonpayablefunction cancel(uint256[] nonces)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
renounceOwnership
payablefunction renounceOwnership() payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
revoke
nonpayablefunction revoke()
setBonusMax
nonpayablefunction setBonusMax(uint256 _bonusMax)
setBonusScale
nonpayablefunction setBonusScale(uint256 _bonusScale)
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _protocolFee)
setProtocolFeeLight
nonpayablefunction setProtocolFeeLight(uint256 _protocolFeeLight)
setProtocolFeeWallet
nonpayablefunction setProtocolFeeWallet(address _protocolFeeWallet)
setStaking
nonpayablefunction setStaking(address _stakingToken)
swap
nonpayablefunction swap(address recipient, uint256 nonce, uint256 expiry, address signerWallet, address signerToken, uint256 signerAmount, address senderToken, uint256 senderAmount, uint8 v, bytes32 r, bytes32 s)
swapAnySender
nonpayablefunction swapAnySender(address recipient, uint256 nonce, uint256 expiry, address signerWallet, address signerToken, uint256 signerAmount, address senderToken, uint256 senderAmount, uint8 v, bytes32 r, bytes32 s)
swapLight
nonpayablefunction swapLight(uint256 nonce, uint256 expiry, address signerWallet, address signerToken, uint256 signerAmount, address senderToken, uint256 senderAmount, uint8 v, bytes32 r, bytes32 s)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
events
Authorize
event Authorize(address indexed signer, address indexed signerWallet)
Cancel
event Cancel(uint256 indexed nonce, address indexed signerWallet)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
Revoke
event Revoke(address indexed signer, address indexed signerWallet)
SetBonusMax
event SetBonusMax(uint256 bonusMax)
SetBonusScale
event SetBonusScale(uint256 bonusScale)
SetProtocolFee
event SetProtocolFee(uint256 protocolFee)
SetProtocolFeeLight
event SetProtocolFeeLight(uint256 protocolFeeLight)
SetProtocolFeeWallet
event SetProtocolFeeWallet(address indexed feeWallet)
SetStaking
event SetStaking(address indexed staking)
SwapERC20
event SwapERC20(uint256 indexed nonce, address indexed signerWallet)
errors
AlreadyInitialized
error AlreadyInitialized()
ChainIdChanged
error ChainIdChanged()
InvalidFee
error InvalidFee()
InvalidFeeLight
error InvalidFeeLight()
InvalidFeeWallet
error InvalidFeeWallet()
InvalidStaking
error InvalidStaking()
MaxTooHigh
error MaxTooHigh()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoHandoverRequest
error NoHandoverRequest()
NonceAlreadyUsed
error NonceAlreadyUsed(uint256)
OrderExpired
error OrderExpired()
ScaleTooHigh
error ScaleTooHigh()
SignatoryInvalid
error SignatoryInvalid()
SignatureInvalid
error SignatureInvalid()
TransferFromFailed
error TransferFromFailed()
Unauthorized
error Unauthorized()
creation bytecode
0x6101606040523480156200001257600080fd5b5060405162002f5b38038062002f5b83398101604081905262000035916200027a565b306080524660a05260608062000082604080518082018252600a8152690535741505f45524332360b41b60208083019190915282518084019093526003835262342e3360e81b9083015291565b815160209283012081519183019190912060c082905260e08190526040805160008051602062002f3b8339815191528152938401929092529082015246606082015230608082015260a090206101005250506127108510620000f7576040516358d620b360e01b815260040160405180910390fd5b61271084106200011a5760405163f291bc0d60e01b815260040160405180910390fd5b6001600160a01b0383166200014257604051633419a9e560e01b815260040160405180910390fd5b60648111156200016557604051631ba349c560e31b815260040160405180910390fd5b604d821115620001885760405163cca4057d60e01b815260040160405180910390fd5b6200019333620001e1565b4661012052620001a26200021d565b61014052600294909455600392909255600480546001600160a01b0319166001600160a01b0392909216919091179055600691909155600555620002d3565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b610100516200023660a051608051301446909114161590565b1562000277575060c05160e0516040805160008051602062002f3b8339815191528152602081019390935282015246606082015230608082015260a0902090565b90565b600080600080600060a086880312156200029357600080fd5b85516020870151604088015191965094506001600160a01b0381168114620002ba57600080fd5b6060870151608090970151959894975095949392505050565b60805160a05160c05160e051610100516101205161014051612c006200033b600039600081816102aa015281816108c7015261223101526000818161030c015281816114940152611e1d01526000505060005050600050506000505060005050612c006000f3fe6080604052600436106102345760003560e01c80638da5cb5b11610138578063b9cb01b0116100b0578063f04e283e1161007f578063f4ebc69911610064578063f4ebc6991461067c578063f973a20914610692578063fee81cf4146106a757600080fd5b8063f04e283e14610656578063f2fde38b1461066957600080fd5b8063b9cb01b0146105c6578063bfd4e557146105f3578063c5c62a7d14610613578063cbf7c6c31461062957600080fd5b80639e93ad8e11610107578063b6549f75116100ec578063b6549f751461054e578063b6a5d7de14610563578063b91816111461058357600080fd5b80639e93ad8e14610522578063b0e21e8a1461053857600080fd5b80638da5cb5b1461048e5780638ff39099146104c257806398956069146104e25780639cff19e01461050257600080fd5b806354d1f13d116101cb57806372f702f31161019a5780637aba86d21161017f5780637aba86d2146104305780637ce785251461044657806384b0196e1461046657600080fd5b806372f702f3146103be578063787dce3d1461041057600080fd5b806354d1f13d1461036e5780636f72fd20146103765780636fb30d4314610396578063715018a6146103b657600080fd5b80633eb1af24116102075780633eb1af24146102da578063416f281d146102fa57806346e4480d1461032e57806352c5f1f51461034e57600080fd5b80631647795e14610239578063256929621461026e5780632e340823146102785780633644e51514610298575b600080fd5b34801561024557600080fd5b506102596102543660046125b9565b6106da565b60405190151581526020015b60405180910390f35b61027661073d565b005b34801561028457600080fd5b506102766102933660046125e3565b61078d565b3480156102a457600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610265565b3480156102e657600080fd5b506102766102f5366004612669565b610800565b34801561030657600080fd5b506102cc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033a57600080fd5b5061027661034936600461270b565b610887565b34801561035a57600080fd5b506102cc6103693660046125b9565b610d47565b610276610e51565b34801561038257600080fd5b506102cc61039136600461279b565b610e8d565b3480156103a257600080fd5b506102766103b13660046127bd565b610ee4565b610276610f63565b3480156103ca57600080fd5b506007546103eb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610265565b34801561041c57600080fd5b5061027661042b3660046127bd565b610f77565b34801561043c57600080fd5b506102cc60065481565b34801561045257600080fd5b506102766104613660046127d6565b610fef565b34801561047257600080fd5b5061047b6110b3565b6040516102659796959493929190612855565b34801561049a57600080fd5b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927546103eb565b3480156104ce57600080fd5b506102766104dd3660046127d6565b61115c565b3480156104ee57600080fd5b506102766104fd366004612669565b611220565b34801561050e57600080fd5b5061027661051d3660046127bd565b611233565b34801561052e57600080fd5b506102cc61271081565b34801561054457600080fd5b506102cc60025481565b34801561055a57600080fd5b506102766112ab565b34801561056f57600080fd5b5061027661057e3660046127d6565b611328565b34801561058f57600080fd5b506103eb61059e3660046127d6565b60016020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b3480156105d257600080fd5b506105e66105e1366004612669565b6113f0565b6040516102659190612917565b3480156105ff57600080fd5b5061027661060e3660046127bd565b611b5c565b34801561061f57600080fd5b506102cc60055481565b34801561063557600080fd5b506004546103eb9073ffffffffffffffffffffffffffffffffffffffff1681565b6102766106643660046127d6565b611bd4565b6102766106773660046127d6565b611c14565b34801561068857600080fd5b506102cc60035481565b34801561069e57600080fd5b506102cc611c3b565b3480156106b357600080fd5b506102cc6106c23660046127d6565b63389a75e1600c908152600091909152602090205490565b6000806106e9610100846129b9565b905060006106f9610100856129cd565b73ffffffffffffffffffffffffffffffffffffffff861660009081526020818152604080832095835294905292909220546001921c82169091149150505b92915050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b60005b818110156107fb5760008383838181106107ac576107ac6129e1565b9050602002013590506107bf3382611d6b565b156107f257604051339082907f8dd3c361eb2366ff27c2db0eb07b9261f1d052570742ab8c9a0c326f37aa576d90600090a35b50600101610790565b505050565b6108148a8a8a8a8a60008b8b8b8b8b611e1a565b61082085338a87611fe4565b61082c87898d89611fe4565b610837878988612041565b60405173ffffffffffffffffffffffffffffffffffffffff8916908b907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b4289116108c0576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610b0c7f00000000000000000000000000000000000000000000000000000000000000006040516020016109fd907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600354918401529082018f9052606082018e905273ffffffffffffffffffffffffffffffffffffffff808e166080840152808d1660a084015260c083018c905260e083019190915233610100830152891661012082015261014081018890526101600160405160208183030381529060405280519060200120604051602001610aee9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60405160208183030381529060405280519060200120858585612153565b905073ffffffffffffffffffffffffffffffffffffffff8116610b5b576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b65818c611d6b565b610ba3576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018c90526024015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8981166000908152600160205260409020541615610c385773ffffffffffffffffffffffffffffffffffffffff808a16600090815260016020526040902054828216911614610c33576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c9d565b8873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c9d576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca986338b88611fe4565b610cb5888a338a611fe4565b600454600354610cf7918a918c9173ffffffffffffffffffffffffffffffffffffffff169061271090610ce8908d612a10565b610cf291906129b9565b611fe4565b60405173ffffffffffffffffffffffffffffffffffffffff8a16908c907f4294f3cfba9ff22cfa9cb602947f7656aa160c0a6c8fa406a28e12bed6bf209390600090a35050505050505050505050565b60008061271060025484610d5b9190612a10565b610d6591906129b9565b60075490915073ffffffffffffffffffffffffffffffffffffffff1615801590610d8f5750600081115b15610e4a576007546040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152600092610e35929116906370a08231906024015b602060405180830381865afa158015610e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2f9190612a27565b83610e8d565b9050610e418183612a40565b92505050610737565b9392505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b60008083600554600a610ea09190612b73565b610eaa9190612b7f565b90506064818486600654610ebe9190612a10565b610ec89190612a10565b610ed291906129b9565b610edc91906129b9565b949350505050565b610eec612191565b604d811115610f27576040517fcca4057d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60058190556040518181527fcc5b12dfbda3644d5f3190b40ad8215d4aaac870df5c8112735085679d7cc333906020015b60405180910390a150565b610f6b612191565b610f7560006121c7565b565b610f7f612191565b6127108110610fba576040517f58d620b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028190556040518181527fdc0410a296e1e33943a772020d333d5f99319d7fcad932a484c53889f7aaa2b190602001610f58565b610ff7612191565b73ffffffffffffffffffffffffffffffffffffffff8116611044576040517f3419a9e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f8b2a800ce9e2e7ccdf4741ae0e41b1f16983192291080ae3b78ac4296ddf598a90600090a250565b7f0f00000000000000000000000000000000000000000000000000000000000000606080600080808361114a604080518082018252600a81527f535741505f4552433230000000000000000000000000000000000000000000006020808301919091528251808401909352600383527f342e3300000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b611164612191565b73ffffffffffffffffffffffffffffffffffffffff81166111b1576040517f176f7c8000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040517f58fd5d9c33114e6edf8ea5d30956f8d1a4ab112b004f99928b4bcf1b87d6666290600090a250565b6108148a8a8a8a8a338b8b8b8b8b611e1a565b61123b612191565b6064811115611276576040517fdd1a4e2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60068190556040518181527fb113403a9e8b9f0173354acc3a5d210c86be40bb7259c19c55cea02227c5026f90602001610f58565b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000008116909155905173ffffffffffffffffffffffffffffffffffffffff909116929183917fd7426110292f20fe59e73ccf52124e0f5440a756507c91c7b0a6c50e1eb1a23a9190a350565b73ffffffffffffffffffffffffffffffffffffffff8116611375576040517fcd4b78cf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526001602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117909155905190917f30468de898bda644e26bab66e5a2241a3aa6aaf527257f5ca54e0f65204ba14a91a350565b60408051600880825261012082019092526060916000919060208201610100803683370190505060408051610160810182528e8152602081018e905273ffffffffffffffffffffffffffffffffffffffff8d8116928201929092528b82166060820152608081018b905289821660c082015260e0810189905260ff881661010082015261012081018790526101408101869052908f1660a0820152909150600090467f000000000000000000000000000000000000000000000000000000000000000014611503577f436861696e49644368616e67656400000000000000000000000000000000000083836114e481612b92565b9450815181106114f6576114f66129e1565b6020026020010181815250505b60408082015173ffffffffffffffffffffffffffffffffffffffff808216600090815260016020529290922054909116156115615773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b6115ea81611595846000015185602001518660400151876060015188608001518960a001518a60c001518b60e0015161222d565b60408051602081018c90529081018a90527fff0000000000000000000000000000000000000000000000000000000000000060f88d901b1660608201526061015b60405160208183030381529060405261247e565b61163d577f5369676e6174757265496e76616c696400000000000000000000000000000000848461161a81612b92565b95508151811061162c5761162c6129e1565b60200260200101818152505061169b565b61164b8183600001516106da565b1561169b577f4e6f6e6365416c72656164795573656400000000000000000000000000000000848461167c81612b92565b95508151811061168e5761168e6129e1565b6020026020010181815250505b42826020015110156116f2577f4f7264657245787069726564000000000000000000000000000000000000000084846116d381612b92565b9550815181106116e5576116e56129e1565b6020026020010181815250505b60a082015173ffffffffffffffffffffffffffffffffffffffff161561190a5760c082015160a08301516040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa15801561178d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b19190612a27565b60c084015160a08501516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190612a27565b90508360e001518110156118b0577f53656e646572416c6c6f77616e63654c6f770000000000000000000000000000868661189181612b92565b9750815181106118a3576118a36129e1565b6020026020010181815250505b8360e00151821015611907577f53656e64657242616c616e63654c6f770000000000000000000000000000000086866118e881612b92565b9750815181106118fa576118fa6129e1565b6020026020010181815250505b50505b606082015160408084015190517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611985573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a99190612a27565b606084015160408086015190517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015230602482015292935060009291169063dd62ed3e90604401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190612a27565b905060006127106002548660800151611a689190612a10565b611a7291906129b9565b9050808560800151611a849190612b7f565b821015611ad6577f5369676e6572416c6c6f77616e63654c6f7700000000000000000000000000008787611ab781612b92565b985081518110611ac957611ac96129e1565b6020026020010181815250505b808560800151611ae69190612b7f565b831015611b38577f5369676e657242616c616e63654c6f77000000000000000000000000000000008787611b1981612b92565b985081518110611b2b57611b2b6129e1565b6020026020010181815250505b86518614611b44578587525b5094955050505050509b9a5050505050505050505050565b611b64612191565b6127108110611b9f576040517ff291bc0d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038190556040518181527f312cc1a9b7287129a22395b9572a3c9ed09ce456f02b519efb34e12bb429eed090602001610f58565b611bdc612191565b63389a75e1600c52806000526020600c208054421115611c0457636f5e88186000526004601cfd5b60009055611c11816121c7565b50565b611c1c612191565b8060601b611c3257637448fbae6000526004601cfd5b611c11816121c7565b604051602001611d52907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b6040516020818303038152906040528051906020012081565b600080611d7a610100846129b9565b90506000611d8a610100856129cd565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260208181526040808320868452909152902054909150600181831c81169003611dd55760009350505050610737565b73ffffffffffffffffffffffffffffffffffffffff86166000908152602081815260408083209583529490529290922060019182901b92909217909155905092915050565b467f000000000000000000000000000000000000000000000000000000000000000014611e73576040517fc614eff800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428a11611eac576040517fc56873ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808a166000908152600160205260409020548a911615611f045773ffffffffffffffffffffffffffffffffffffffff908116600090815260016020526040902054165b611f5d81611f188e8e8e8e8e8e8e8e61222d565b60408051602081018890529081018690527fff0000000000000000000000000000000000000000000000000000000000000060f889901b1660608201526061016115d6565b611f93576040517f37e8456b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f9d818d611d6b565b611fd6576040517f91cab504000000000000000000000000000000000000000000000000000000008152600481018d9052602401610b9a565b505050505050505050505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d15600160005114171661203357637939f4246000526004601cfd5b600060605260405250505050565b6000612710600254836120549190612a10565b61205e91906129b9565b9050801561214d5760075460009073ffffffffffffffffffffffffffffffffffffffff16156120e2576007546040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201526120df9173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401610dee565b90505b8015612124576120f485853384611fe4565b60045461211f908690869073ffffffffffffffffffffffffffffffffffffffff16610cf28587612a40565b61214b565b60045461214b908690869073ffffffffffffffffffffffffffffffffffffffff1685611fe4565b505b50505050565b60006040518560005260ff85166020528360405282606052602060406080600060015afa5060006060523d6060185191508060405250949350505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927543314610f75576382b429006000526004601cfd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffff74873927805473ffffffffffffffffffffffffffffffffffffffff9092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b60007f0000000000000000000000000000000000000000000000000000000000000000604051602001612367907f4f7264657245524332302875696e74323536206e6f6e63652c75696e7432353681527f206578706972792c61646472657373207369676e657257616c6c65742c61646460208201527f72657373207369676e6572546f6b656e2c75696e74323536207369676e65724160408201527f6d6f756e742c000000000000000000000000000000000000000000000000000060608201527f75696e743235362070726f746f636f6c4665652c616464726573732073656e6460668201527f657257616c6c65742c616464726573732073656e646572546f6b656e2c75696e60868201527f743235362073656e646572416d6f756e7429000000000000000000000000000060a682015260b80190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120600254918401529082018c9052606082018b905273ffffffffffffffffffffffffffffffffffffffff808b166080840152808a1660a084015260c0830189905260e083019190915280871661010083015285166101208201526101408101849052610160016040516020818303038152906040528051906020012060405160200161245a9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60405160208183030381529060405280519060200120905098975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff9092169160008315610e4a5760405183600052602083015160405260408351036124fb576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d15176124f957506000606052604052506001610e4a565b505b604183510361254157606083015160001a6020526040830151606052602060016080600060015afa805186183d151761253f57506000606052604052506001610e4a565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146125b457600080fd5b919050565b600080604083850312156125cc57600080fd5b6125d583612590565b946020939093013593505050565b600080602083850312156125f657600080fd5b823567ffffffffffffffff8082111561260e57600080fd5b818501915085601f83011261262257600080fd5b81358181111561263157600080fd5b8660208260051b850101111561264657600080fd5b60209290920196919550909350505050565b803560ff811681146125b457600080fd5b60008060008060008060008060008060006101608c8e03121561268b57600080fd5b6126948c612590565b9a5060208c0135995060408c013598506126b060608d01612590565b97506126be60808d01612590565b965060a08c013595506126d360c08d01612590565b945060e08c013593506126e96101008d01612658565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d03121561272b57600080fd5b8a35995060208b0135985061274260408c01612590565b975061275060608c01612590565b965060808b0135955061276560a08c01612590565b945060c08b0135935061277a60e08c01612658565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080604083850312156127ae57600080fd5b50508035926020909101359150565b6000602082840312156127cf57600080fd5b5035919050565b6000602082840312156127e857600080fd5b610e4a82612590565b6000815180845260005b81811015612817576020818501810151868301820152016127fb565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e0602084015261289260e084018a6127f1565b83810360408501526128a4818a6127f1565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015612905578351835292840192918401916001016128e9565b50909c9b505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561294f57835183529284019291840191600101612933565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000826129c8576129c861295b565b500490565b6000826129dc576129dc61295b565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b80820281158282048414176107375761073761298a565b600060208284031215612a3957600080fd5b5051919050565b818103818111156107375761073761298a565b600181815b80851115612aac57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612a9257612a9261298a565b80851615612a9f57918102915b93841c9390800290612a58565b509250929050565b600082612ac357506001610737565b81612ad057506000610737565b8160018114612ae65760028114612af057612b0c565b6001915050610737565b60ff841115612b0157612b0161298a565b50506001821b610737565b5060208310610133831016604e8410600b8410161715612b2f575081810a610737565b612b398383612a53565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612b6b57612b6b61298a565b029392505050565b6000610e4a8383612ab4565b808201808211156107375761073761298a565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612bc357612bc361298a565b506001019056fea2646970667358221220530a80bc752d53d01336fb06750e54194bfc7d6770d258c01b731d1461b1c1d364736f6c634300081700338b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f00000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000407c26c54fa3f1cfed3e4d61de93b9beabfbdaaf000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000064