24 txs
25 calls
constructor
constructor(address _endpoint, address _signer)
functions
CONTRACT_VERSION
viewfunction CONTRACT_VERSION() view returns (uint256)
endpoint
viewfunction endpoint() view returns (address)
feeActive
viewfunction feeActive() view returns (bool)
feeCollector
viewfunction feeCollector() view returns (address)
getAmountAfterFees
viewfunction getAmountAfterFees(uint256 _amountIn) view returns (uint256 feeAmount, uint256 amountAfterFees)
isPaused
viewfunction isPaused() view returns (bool)
lzNonces
viewfunction lzNonces(address) view returns (uint256)
MAX_FEE_BPS
viewfunction MAX_FEE_BPS() view returns (uint256)
nonces
viewfunction nonces(address) view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingOwner
viewfunction pendingOwner() view returns (address)
PLATFORM_FEE_BPS
viewfunction PLATFORM_FEE_BPS() view returns (uint256)
platformFeeBps
viewfunction platformFeeBps() view returns (uint256)
signer
viewfunction signer() view returns (address)
whitelistedRouters
viewfunction whitelistedRouters(address) view returns (uint8)
acceptOwnership
nonpayablefunction acceptOwnership()
lzCompose
payablefunction lzCompose(address _oApp, bytes32, bytes _message, address, bytes) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
routerSwapAndBridge
payablefunction routerSwapAndBridge(bytes _signedRouterParams) payable returns (uint256 amountOut)
setPlatformFeeConfig
nonpayablefunction setPlatformFeeConfig(uint256 _platformFeeBps, address _feeCollector, bool _feeActive)
setRouterWhitelist
nonpayablefunction setRouterWhitelist(address _router, uint8 _routerType)
setSigner
nonpayablefunction setSigner(address _signer)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
withdrawToken
nonpayablefunction withdrawToken(address _token, uint256 _amount)
events
ComposeExecuted
event ComposeExecuted(address indexed _oApp, uint64 _nonce, (address contractAddress, uint256 srcChainId, uint256 contractVersion, address user, uint256 nonce, address oApp, (address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOutMin, address router, bytes callData, address permit2) swapParams, (address fAssetToken, uint256 lots, string redeemerAddress) fAssetRedeemParams) composeMessageData)
ComposeFailed
event ComposeFailed(address indexed _oApp, uint64 _nonce, string reason)
FAssetExecuted
event FAssetExecuted(address indexed _oApp, uint64 _nonce, uint256 _redeemedAmountUBA)
FAssetFailed
event FAssetFailed(address indexed _oApp, uint64 _nonce, string reason)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
OwnershipTransferStarted
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner)
Paused
event Paused()
PlatformFeeCollected
event PlatformFeeCollected(address indexed token, uint256 amount, address indexed collector)
PlatformFeeConfigUpdated
event PlatformFeeConfigUpdated(uint256 feeBps, address indexed collector, bool active)
RouterSwapAndBridgeCompleted
event RouterSwapAndBridgeCompleted(address indexed user, (address tokenIn, address tokenOut, uint256 amountIn, uint256 amountOutMin, address router, bytes callData, address permit2) swapParams, (address tokenIn, uint256 amountIn, address oftToken, uint256 nativeFee, bytes callData) bridgeParams, (address fAssetToken, uint256 lots, string redeemerAddress) fAssetRedeemParams)
RouterWhitelisted
event RouterWhitelisted(address router, uint8 routerType)
SignerSet
event SignerSet(address indexed signer)
SwapExecuted
event SwapExecuted(address indexed _oApp, uint64 _nonce)
SwapFailed
event SwapFailed(address indexed _oApp, uint64 _nonce, string reason)
Unpaused
event Unpaused()
errors
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60a0346200017d576200436790601f38839003908101601f19168201906001600160401b038211838310176200018257808391604095869485528339810103126200017d576200005d6020620000558362000198565b920162000198565b33156200016557600180546001600160a01b03199081169091556000805433818416811783558651946001600160a01b039384939192918416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3600160025516928315620001325750831615620000fb576003541617600355608052516141b99081620001ae82396080518181816107ee01526122d80152f35b835162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5908195b991c1bda5b9d60821b6044820152606490fd5b62461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606490fd5b8251631e4fbdf760e01b815260006004820152602490fd5b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b03821682036200017d5756fe608080604052600436101561001357600080fd5b60003560e01c9081630f874a13146116265750806322dcd13e14611608578063238ac933146115df57806334868518146108a357806338b90333146108875780633f4ba83a1461083a578063539aa77f1461081d5780635e280f11146107d85780636c19e78314610739578063715018a6146106d457806374e3decd146106aa57806379ba5097146106215780637ecebe00146105e75780638456cb59146105945780638da5cb5b1461056b57806394cd4ea21461044a57806397c85b42146104105780639e0659bb146103785780639e281a98146102e6578063b187bd26146102c0578063c415b95c14610297578063d0a102601461021e578063d55be8c614610201578063e30c3978146101d8578063e39e165a146101b25763f2fde38b1461013d57600080fd5b346101ad5760203660031901126101ad57610156611668565b61015e613d7a565b60018060a01b0380911690816bffffffffffffffffffffffff60a01b6001541617600155600054167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700600080a3005b600080fd5b346101ad5760003660031901126101ad57602060ff60055460a01c166040519015158152f35b346101ad5760003660031901126101ad576001546040516001600160a01b039091168152602090f35b346101ad5760003660031901126101ad57602060405161012c8152f35b60a03660031901126101ad57610232611668565b6001600160401b03906044358281116101ad5761025390369060040161169e565b916064356001600160a01b038116036101ad576084359384116101ad5761028161029094369060040161169e565b505061028b61297c565b6122c2565b6001600255005b346101ad5760003660031901126101ad576005546040516001600160a01b039091168152602090f35b346101ad5760003660031901126101ad57602060ff60055460a81c166040519015158152f35b346101ad5760403660031901126101ad576102ff611668565b6024359061030b613d7a565b6001600160a01b03168061036a5750600080808093335af161032b61216c565b501561033357005b60405162461bcd60e51b815260206004820152600f60248201526e15da5d1a191c985dc819985a5b1959608a1b6044820152606490fd5b906103769133906135cd565b005b346101ad5760403660031901126101ad57610391611668565b6024359060048210156101ad577f20a3621ab3cbfc22bcc8601701b2c18caafb8789a7739a9d6a2279c8d2e3ba94916040916103cb613d7a565b6001600160a01b0316600081815260086020528390209091906103ed8261167e565b60ff1981541660ff831617905582519182526104088161167e565b6020820152a1005b346101ad5760203660031901126101ad576001600160a01b03610431611668565b1660005260076020526020604060002054604051908152f35b346101ad5760603660031901126101ad576024356001600160a01b03811690600435908290036101ad576044358015158091036101ad57610489613d7a565b61012c821161052f5782156104f257816040917f56265769af0db33001e688c5ef765ebf5685d016abb2a5195fb57bd3df229849936004556005548560ff60a01b8360a01b16916affffffffffffffffffffff60a81b16171760055582519182526020820152a2005b60405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103332b29031b7b63632b1ba37b960591b6044820152606490fd5b60405162461bcd60e51b81526020600482015260146024820152734665652063616e6e6f742065786365656420332560601b6044820152606490fd5b346101ad5760003660031901126101ad576000546040516001600160a01b039091168152602090f35b346101ad5760003660031901126101ad576105ad613d7a565b6005805460ff60a81b1916600160a81b1790557f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752600080a1005b346101ad5760203660031901126101ad576001600160a01b03610608611668565b1660005260066020526020604060002054604051908152f35b346101ad5760003660031901126101ad576001546001600160a01b033381831603610692576bffffffffffffffffffffffff60a01b8092166001556000549133908316176000553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b60405163118cdaa760e01b8152336004820152602490fd5b346101ad5760203660031901126101ad5760406106c860043561224b565b82519182526020820152f35b346101ad5760003660031901126101ad576106ed613d7a565b600180546001600160a01b0319908116909155600080549182168155906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101ad5760203660031901126101ad57610752611668565b61075a613d7a565b6001600160a01b031680156107a257600380546001600160a01b031916821790557f9eaa897564d022fb8c5efaf0acdb5d9d27b440b2aad44400b6e1c702e65b9ed3600080a2005b60405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21039b4b3b732b960911b6044820152606490fd5b346101ad5760003660031901126101ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101ad5760003660031901126101ad5760206040516127108152f35b346101ad5760003660031901126101ad57610853613d7a565b6005805460ff60a81b191690557fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933600080a1005b346101ad5760003660031901126101ad57602060405160018152f35b60203660031901126101ad576004356001600160401b0381116101ad576108ce90369060040161169e565b906108d761297c565b6000916108ec60ff60055460a81c16156116cb565b6003546001600160a01b031690604181106101ad576040519161090e836117e4565b604183523660418501116101ad578361096361095e858594604161096899602061094c9a01376000606183015261095861095361094c88808961299d565b36916129d7565b613d8e565b90613f59565b61170a565b61299d565b9081518201916020818403126101ad576020810151906001600160401b0382116101ad576101208282018503126101ad576040519361012085018581106001600160401b038211176115c9576040526109c5602084840101611820565b855260408383010151602086015260608383010151604086015260808383010151606086015260a083830101516080860152610a0560c084840101611820565b60a086015260e083830101516001600160401b0381116101ad57610a33906020808401918686010101611872565b60c086015261010083830101516001600160401b0381116101ad57610a62906020808401918686010101611872565b60e086015261012083830101516001600160401b0381116101ad57610a8f93602080930193010101611872565b610100830152610aa960018060a01b0383511630146118b7565b610ab96001604084015114611903565b610ad660608301513360005260066020526040600020541461194f565b60a0820151336001600160a01b039091160361159557610afb6020830151461461198b565b6080820151421161155a573360005260066020526040600020610b1e81546119ca565b905560c082015151159160e08101515115610100820151511584801590611552575b801561154a575b1561150c57811580611504575b6114a857604051610b648161174a565b6000815260006020820152600060408201526000606082015260006080820152606060a0820152600060c082015291604051610b9f81611765565b600081526000602082015260006040820152600060608201526060608082015295604051610bcc81611780565b600081526000602082015260606040820152946000809183156113f9575b84156112dc575b851561113e575b5034908361106f575085516001600160a01b0316806110515750610c2e9060408701610c27815134101561205c565b5190612042565b935b85516040870151610c49916001600160a01b0316612b1f565b935b8315610ffa575b610f1f5750508015610eec575b86516001600160a01b031680610ec7575b506060870180518851919390916001600160a01b031615610eab575b5060008060408a019260018060a01b0384511660808c015191602083519301915af190610cb761216c565b5088516001600160a01b031680610e8d575b505015610e585715610de3575b505b80610d8a575b50610d257f075b6d7faffc5156f4702c015329c39e926d9043c3265bbfb62bf2f0859dbc3e91610d7a610d6b60209760a0608060405196879660608852606088019061219c565b928684038c880152600180841b0381511684528b8101518c850152600180841b036040820151166040850152606081015160608501520151918160808201520190612099565b828103604084015233956121fc565b0390a26001600255604051908152f35b600080808093335af1610d9b61216c565b5015610da75784610cde565b60405162461bcd60e51b8152602060048201526014602482015273556e61626c6520746f2073656e642076616c756560601b6044820152606490fd5b51610ded91612042565b602085018051808611610e01575b50610cd6565b86516001600160a01b0316610e2d575090610e20610e26925186612042565b9061204f565b8580610dfb565b6020840151610e5392506001600160a01b031690610e4b9087612042565b9033906135cd565b610e26565b60405162461bcd60e51b815260206004820152600d60248201526c109c9a5919d94819985a5b1959609a1b6044820152606490fd5b9051610ea4916001600160a01b0390911690613c01565b8880610cc9565b610ec1919083610e20575060208901519061204f565b88610c8c565b60408801516020890151610ee69290916001600160a01b031690613cba565b87610c70565b610efc60208801518710156120ea565b60208401518751610f1a916001600160a01b0391821691161461212b565b610c5f565b90925015610f2f575b5050610cd8565b8015610fbe575b80610fa557610f52610f4a875b873061367e565b9190506120be565b15610f5e575b80610f28565b60208401610f6d82825161202f565b8611610f7a575b50610f58565b610e4b610f98610f9e9360018060a01b03602088015116935161202f565b87612042565b8580610f74565b610f52610f4a610fb984602089015161202f565b610f43565b610fd7610fcf83602088015161202f565b8710156120ea565b60208401518551610ff5916001600160a01b0391821691161461212b565b610f36565b611017985084604088015261100f8730612c61565b909a916120be565b88818061104a575b61102a575b50610c52565b6020880151611044919033906001600160a01b03166135cd565b8a611024565b508261101f565b611068604088979397019182519030903390612a0e565b9052610c30565b8461110b575088516001600160a01b031690816110e0576110bf91506110b98a602081016110b06110a86060835194019384519061204f565b34101561205c565b5190519061204f565b90612042565b935b885160208a01516110da916001600160a01b0316612b1f565b93610c4b565b506110f560208a019182519030903390612a0e565b9052611105606089015134612042565b936110c1565b93859195610c4b5761113860018060a01b0389511661112e8560208c015161202f565b9030903390612a0e565b50610c4b565b9096506101009150015180518101906020818303126101ad576020810151916001600160401b0383116101ad5761117c926020809201920101611a84565b80516040516394217ad160e01b815291969190602090829060049082906001600160a01b03165afa9081156112915760009161129d575b506040516385b4bb5360e01b815290600090829060049082906001600160a01b03165afa908115611291576001600160401b03916102609160009161126e575b500151169060018060a01b038751166000526008602052600360ff6040600020541661121e8161167e565b036112295789610bf8565b60405162461bcd60e51b815260206004820152601960248201527811905cdcd95d081a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b6044820152606490fd5b0390fd5b61128b91503d806000833e61128381836117ff565b810190611b9a565b8b6111f3565b6040513d6000823e3d90fd5b90506020813d6020116112d4575b816112b8602093836117ff565b810103126101ad5760006112cd600492611820565b91506111b3565b3d91506112ab565b60e0810151805181019a506020818c03126101ad576020810151906001600160401b0382116101ad5760a08282018d03126101ad576040519b61131e8d611765565b61132c602084840101611820565b8d528c6020604085850101519101528c604061134c606086860101611820565b910152818301608081015160608f015260a001516001600160401b0381116101ad5761138093602080930193010101611872565b60808b01526040808b01516001600160a01b031660009081526008602052205460029060ff166113af8161167e565b14610bf15760405162461bcd60e51b815260206004820152601c60248201527f4f465420746f6b656e206973206e6f742077686974656c6973746564000000006044820152606490fd5b955060c086015180518101906020818303126101ad576020810151916001600160401b0383116101ad576114349260208092019201016119ef565b9560018060a01b036080880151166000526008602052600160ff6040600020541661145e8161167e565b14610bea5760405162461bcd60e51b815260206004820152601d60248201527f53776170526f75746572206973206e6f742077686974656c69737465640000006044820152606490fd5b60405162461bcd60e51b815260206004820152602e60248201527f42726964676520616e64206661737365742063616e6e6f74206265207370656360448201526d34b334b2b2103a37b3b2ba3432b960911b6064820152608490fd5b508015610b54565b60405162461bcd60e51b8152602060048201526016602482015275139bc81bdc195c985d1a5bdb881cdc1958da599a595960521b6044820152606490fd5b508015610b47565b508115610b40565b60405162461bcd60e51b8152602060048201526013602482015272151c985b9cd858dd1a5bdb88195e1c1a5c9959606a1b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103ab9b2b960a11b6044820152606490fd5b634e487b7160e01b600052604160045260246000fd5b346101ad5760003660031901126101ad576003546040516001600160a01b039091168152602090f35b346101ad5760003660031901126101ad576020600454604051908152f35b346101ad5760203660031901126101ad576020906001600160a01b0361164a611668565b166000526008825260ff604060002054166116648161167e565b8152f35b600435906001600160a01b03821682036101ad57565b6004111561168857565b634e487b7160e01b600052602160045260246000fd5b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b156116d257565b60405162461bcd60e51b815260206004820152601060248201526f149bdd5d195c881a5cc81c185d5cd95960821b6044820152606490fd5b1561171157565b60405162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b6044820152606490fd5b60e081019081106001600160401b038211176115c957604052565b60a081019081106001600160401b038211176115c957604052565b606081019081106001600160401b038211176115c957604052565b6001600160401b0381116115c957604052565b604081019081106001600160401b038211176115c957604052565b602081019081106001600160401b038211176115c957604052565b608081019081106001600160401b038211176115c957604052565b90601f801991011681019081106001600160401b038211176115c957604052565b51906001600160a01b03821682036101ad57565b6001600160401b0381116115c957601f01601f191660200190565b60005b8381106118625750506000910152565b8181015183820152602001611852565b81601f820112156101ad57805161188881611834565b9261189660405194856117ff565b818452602082840101116101ad576118b4916020808501910161184f565b90565b156118be57565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e7472616374206164647265737300000000000000006044820152606490fd5b1561190a57565b60405162461bcd60e51b815260206004820152601860248201527f496e76616c696420636f6e74726163742076657273696f6e00000000000000006044820152606490fd5b1561195657565b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206e6f6e636560981b6044820152606490fd5b1561199257565b60405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a590818da185a5b881a5960821b6044820152606490fd5b60001981146119d95760010190565b634e487b7160e01b600052601160045260246000fd5b91909160e0818403126101ad5760405190611a098261174a565b8193611a1482611820565b8352611a2260208301611820565b60208401526040820151604084015260608201516060840152611a4760808301611820565b608084015260a0820151906001600160401b0382116101ad5782611a7460c09492611a7f94869401611872565b60a086015201611820565b910152565b91906060838203126101ad5760405190611a9d82611780565b8193611aa881611820565b8352602081015160208401526040810151916001600160401b0383116101ad57604092611a7f9201611872565b519060ff821682036101ad57565b519063ffffffff821682036101ad57565b519061ffff821682036101ad57565b51906001600160401b03821682036101ad57565b51906fffffffffffffffffffffffffffffffff821682036101ad57565b81601f820112156101ad578051916020916001600160401b0384116115c9578360051b9060405194611b68858401876117ff565b855283808601928201019283116101ad578301905b828210611b8b575050505090565b81518152908301908301611b7d565b906020828203126101ad5781516001600160401b03928382116101ad5701906107809283838303126101ad57604051938401848110828211176115c957604052611be383611820565b8452611bf160208401611820565b6020850152611c0260408401611820565b6040850152611c1360608401611820565b6060850152611c2460808401611820565b608085015260a08301518181116101ad5782611c41918501611872565b60a0850152611c5260c08401611820565b60c0850152611c6360e08401611820565b60e0850152610100611c76818501611820565b9085015261012083810151906001600160a01b03821682036101ad57850152610140611ca3818501611820565b90850152610160611cb5818501611ad5565b90850152610180611cc7818501611ad5565b908501526101a080840151908501526101c0611ce4818501611ae3565b908501526101e0611cf6818501611ae3565b90850152610200611d08818501611af4565b90850152610220611d1a818501611b03565b90850152610240611d2c818501611b03565b90850152610260611d3e818501611b03565b90850152610280611d50818501611af4565b908501526102a0808401519081151582036101ad578501526102c0611d76818501611b03565b908501526102e0611d88818501611b03565b90850152610300611d9a818501611b03565b90850152610320611dac818501611af4565b90850152610340611dbe818501611ae3565b90850152610360611dd0818501611ae3565b90850152610380611de2818501611b03565b908501526103a0611df4818501611b17565b908501526103c0611e06818501611af4565b908501526103e0611e18818501611af4565b90850152610400611e2a818501611b17565b90850152610420611e3c818501611b03565b90850152610440611e4e818501611b03565b90850152610460611e60818501611b03565b90850152610480611e72818501611b03565b908501526104a0611e84818501611b03565b908501526104c0611e96818501611b03565b908501526104e0611ea8818501611b03565b90850152610500611eba818501611b03565b90850152610520611ecc818501611ae3565b90850152610540611ede818501611b03565b90850152610560611ef0818501611b03565b90850152610580611f02818501611b03565b908501526105a0611f14818501611b03565b908501526105c0611f26818501611b03565b908501526105e0611f38818501611ae3565b90850152610600611f4a818501611b03565b90850152610620808401518281116101ad5783611f68918601611b34565b9085015261064091828401519182116101ad57611f86918401611b34565b90830152610660611f98818301611b03565b90830152610680611faa818301611b03565b908301526106a0611fbc818301611b03565b908301526106c0611fce818301611b03565b908301526106e0611fe0818301611af4565b90830152610700611ff2818301611b03565b90830152610720612004818301611b03565b90830152610740612016818301611ae3565b90830152612028610760809201611ae3565b9082015290565b818102929181159184041417156119d957565b919082039182116119d957565b919082018092116119d957565b1561206357565b60405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908185b5bdd5b9d60921b6044820152606490fd5b906020916120b28151809281855285808601910161184f565b601f01601f1916010190565b156120c65750565b60405162461bcd60e51b81526020600482015290819061126a906024830190612099565b156120f157565b60405162461bcd60e51b8152602060048201526012602482015271416d6f756e74206f757420746f6f206c6f7760701b6044820152606490fd5b1561213257565b60405162461bcd60e51b81526020600482015260126024820152710a8ded6cadc40deeae840dad2e6dac2e8c6d60731b6044820152606490fd5b3d15612197573d9061217d82611834565b9161218b60405193846117ff565b82523d6000602084013e565b606090565b9060c060018060a01b038084511683528060208501511660208401526040840151604084015260608401516060840152806080850151166080840152816121f260a086015160e060a087015260e0860190612099565b9401511691015290565b90606060406118b49360018060a01b038151168452602081015160208501520151918160408201520190612099565b8115612235570490565b634e487b7160e01b600052601260045260246000fd5b9060ff60055460a01c16158015612298575b6122925761226d6004548361202f565b612710808201918281116119d95761270f019182116119d9576118b491048093612042565b60009190565b506004541561225d565b6040906001600160401b036118b494931681528160208201520190612099565b90916122d660ff60055460a81c16156116cb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361294f57806008116101ad5780602c116101ad576003546001600160a01b0316608d82106101ad5760405191612337836117e4565b6041835236608d8601116101ad5761237661095e61237d9461094c946041604c8a0160208401376000606183015261095861095361094c87808d6129ba565b80856129ba565b80518101906020818303126101ad576020810151906001600160401b03928383116101ad576101008383018203126101ad57604051936101008501858110828211176115c9576040526123d4602085850101611820565b855282840160408181015160208801526060820151908701526123f990608001611820565b606086015282840160a081015160808701526124179060c001611820565b60a086015260e084840101518181116101ad5761243e9060208085019187870101016119ef565b60c086015261010084840101519081116101ad5761246493602080930193010101611a84565b60e082015261247d60018060a01b0382511630146118b7565b61248d6001604083015114611903565b61249c6020820151461461198b565b60a08101516001600160a01b039081169083160361291b5760608101516001600160a01b031660009081526007602052604090205460808201516124e0911461194f565b60608101516001600160a01b031660009081526007602052604090208054612507906119ca565b905560c0810151608081015160e083015151600095926001600160a01b039283169290911615908261279e575b5015612609575b507fddcbed7611abba408a2cd30892bc16c13634dacd31a983a4ad7ecfb3a13cdb799293506126046040519283923560c01c83526040602084015260018060a01b038151166040840152602081015160608401526040810151608084015260018060a01b0360608201511660a0840152608081015160c084015260018060a01b0360a08201511660e084015260e06125e360c08301516101008087015261014086019061219c565b910151838203603f19016101208501526001600160a01b03909616956121fc565b0390a2565b600c82013581612797575b6126289060e0850151843560c01c87613969565b909691156126f95750947fddcbed7611abba408a2cd30892bc16c13634dacd31a983a4ad7ecfb3a13cdb799495821515836126f0575b1561269c5760c085015160200151606086015161269594506001600160a01b039182169391169161268f9190612042565b916135cd565b839261253b565b509015806126e3575b6126b0575b50612695565b60e08301515160608401516126dd926001600160a01b03928316929091169061268f90600c860135612042565b386126aa565b5080600c830135116126a5565b5081811161265e565b93917f6a5380dfdeaaca6e7fe816d2a38baa66d2223e9323f62680c1b65bccc9bac4df959396501560001461276d575060e08101515160609091015161275191600c870135916001600160a01b0390811691166135cd565b61260460405192839260018060a01b0316953560c01c836122a2565b60c082015160200151606090920151612792926001600160a01b0391821691166135cd565b612751565b5084612614565b60409196500151600c830135148015906128f6575b612858576127ca60c0840151833560c01c8661311a565b81979215612804575081156125345760c08501516020015160608601516127fe92916001600160a01b0391821691166135cd565b38612534565b60c0860151516060909601519497507f6a5380dfdeaaca6e7fe816d2a38baa66d2223e9323f62680c1b65bccc9bac4df96909590946127519450600c89013593506001600160a01b039081169250166135cd565b5060c0820151516060909201519093507f6a5380dfdeaaca6e7fe816d2a38baa66d2223e9323f62680c1b65bccc9bac4df9260809290916128ab91600c870135916001600160a01b0390811691166135cd565b60408051943560c01c8552602085018190526017908501527f496e76616c696420616d6f756e74206f7220746f6b656e00000000000000000060608501526001600160a01b031692a2565b50806000526008602052600160ff604060002054166129148161167e565b14156127b3565b60405162461bcd60e51b815260206004820152600c60248201526b0496e76616c6964206f4170760a41b6044820152606490fd5b60405162461bcd60e51b815260206004820152600560248201526404282eae8d60db1b6044820152606490fd5b600280541461298b5760028055565b604051633ee5aeb560e01b8152600490fd5b90929192836041116101ad5783116101ad57604101916040190190565b9092919283608d116101ad5783116101ad57608d0191608c190190565b9291926129e382611834565b916129f160405193846117ff565b8294818452818301116101ad578281602093846000960137010152565b6040516370a0823160e01b8082526001600160a01b03948516600483018190529285169591936020939284866024818b5afa95861561129157600096612ae9575b5060249291612a8e91869798604051926323b872dd60e01b898501521685830152856044830152606482015260648152612a8881611765565b8861401b565b6040519687938492835260048301525afa90811561129157600091612ab9575b506118b49250612042565b905082813d8311612ae2575b612acf81836117ff565b810103126101ad576118b4915138612aae565b503d612ac5565b9092919480965081813d8311612b18575b612b0481836117ff565b810103126101ad5751949390916024612a4f565b503d612afa565b919060055460ff8160a01c16158015612c44575b612c3f57612b436004548361202f565b612710808201918281116119d95761270f019182116119d957612b6891048093612042565b936001600160a01b0390811691839083612c09575060008080809385600554165af1612b9261216c565b5015612bcb5760207f55b3abcc0b9456e377f4d3715077abd2f6fcfddc5181e5af9065c4fcd25b6136915b6005541693604051908152a3565b60405162461bcd60e51b81526020600482015260166024820152752332b29021b7b63632b1ba34b7b7103330b4b632b21760511b6044820152606490fd5b91612c3a602092827f55b3abcc0b9456e377f4d3715077abd2f6fcfddc5181e5af9065c4fcd25b61369516866135cd565b612bbd565b509150565b5060045415612b33565b519065ffffffffffff821682036101ad57565b60c0820180519293909290916000916001600160a01b0391908216801561310c57945b8287511692831591821594856130f6575b508181511690811515806130ef575b612f5f575b505060209182890182815116906040998a519386856024816370a0823160e01b978882523060048301525afa948515612f55578a918d8f928498612f1e575b50908291896080869501511691600014612f145760a090830151925b0151918a83519301915af197612d1861216c565b50612f01575b508615612ea55783859151169160248b518094819382523060048301525afa908115612e9b578791612e6e575b5081811115612e0a57606091612d6091612042565b9801518810612da757907f2a480c22a7adeab73ddc8884bcae5a1000662264466e4601df2b6bc3721de9f7918751938685521692a293925190612da2826117c9565b815290565b9192509295506000805160206141448339815191526080865192888452878685015260168885015275125b9cdd59999a58da595b9d08185b5bdd5b9d13dd5d60521b948560608601521692a284935191612e00836117ae565b6016835282015290565b5050919250929550600080516020614144833981519152608086519288845287868501526015888501527410985b185b98d9481b9bdd081a5b98dc99585cd959605a1b948560608601521692a284935191612e64836117ae565b6015835282015290565b90508381813d8311612e94575b612e8581836117ff565b810103126101ad575138612d4b565b503d612e7b565b89513d89823e3d90fd5b5050509093965060008051602061414483398151915260808794939451928984528887850152600b898501526a14ddd85c0819985a5b195960aa1b958660608601521692a294935191612ef7836117ae565b600b835282015290565b612f0e90858d5116613c01565b38612d1e565b5060a08392612d04565b9350509550508681813d8311612f4e575b612f3981836117ff565b810103126101ad57519389908d908d83612ce8565b503d612f2f565b8c513d8c823e3d90fd5b828a51169060808b019260608585511660646040958651948593849263927da10560e01b8452306004850152602484015260448301525afa9081156130e55790859291848e8c928d9461307e575b5001519084161090811561306b575b50612fc9575b5050612ca9565b51169183808c5116915116906301e1338042019384421161305757803b15613053578992918360849265ffffffffffff875198899687956387517c4560e01b8752600487015260248601528a60448601521660648401525af190811561304a5750613037575b808281612fc2565b6130439095919561179b565b933861302f565b513d88823e3d90fd5b8980fd5b634e487b7160e01b8a52601160045260248afd5b905065ffffffffffff4291161038612fbc565b949550505050506060813d6060116130dd575b8161309e606093836117ff565b810103126130d95780518581168103613053578186858f936130cf826130c86020869a9901612c4e565b9501612c4e565b5092939091612fad565b8880fd5b3d9150613091565b83513d8b823e3d90fd5b5085612ca4565b613106908960408c015191613cba565b38612c95565b508160808701511694612c84565b60c08301805193946001600160a01b03949093600093929091861680156135bf57955b8088511693841592831595866135a9575b508281511690811515806135a2575b61341d575b5050602092838a01838151169060409a8b519387856024816370a0823160e01b978882523060048301525afa948515613413578b8f93928f8a9383996133d8575b5090829184608088015116916000146133d057860151905b60a0870151918d83519301915af19a6131d261216c565b506133bd575b50505087156133635784869151169160248c518094819382523060048301525afa90811561335957889161332c575b50818111156132c95760609161321c91612042565b990151891061326757907f2a480c22a7adeab73ddc8884bcae5a1000662264466e4601df2b6bc3721de9f792916001600160401b038951951685521692a293925190612da2826117c9565b9350600080516020614144833981519152919497506080906001600160401b03885194168452878685015260168885015275125b9cdd59999a58da595b9d08185b5bdd5b9d13dd5d60521b948560608601521692a284935191612e00836117ae565b50509350600080516020614144833981519152919497506080906001600160401b0388519416845287868501526015888501527410985b185b98d9481b9bdd081a5b98dc99585cd959605a1b948560608601521692a284935191612e64836117ae565b90508481813d8311613352575b61334381836117ff565b810103126101ad575138613207565b503d613339565b8a513d8a823e3d90fd5b5050509392919497506080600080516020614144833981519152916001600160401b038951941684528887850152600b898501526a14ddd85c0819985a5b195960aa1b958660608601521692a294935191612ef7836117ae565b6133c8925116613c01565b8b38866131d8565b5081906131bb565b985050935050508785813d831161340c575b6133f481836117ff565b810103126101ad579351938d9187908c908f826131a3565b503d6133ea565b8d513d8d823e3d90fd5b838b51169060808c019260608685511660646040958651948593849263927da10560e01b8452306004850152602484015260448301525afa90811561359857908a848f899594839461353b575b50015190841610908115613528575b50613486575b5050613162565b51169184808d5116915116906301e1338042019384421161351457803b15613510578a92918360849265ffffffffffff875198899687956387517c4560e01b8752600487015260248601528b60448601521660648401525af190811561350757506134f4575b80838161347f565b6135009096919661179b565b94386134ec565b513d89823e3d90fd5b8a80fd5b634e487b7160e01b8b52601160045260248bfd5b905065ffffffffffff4291161038613479565b949550505050506060813d606011613590575b8161355b606093836117ff565b8101031261305357805186811681036135105781878f928690613586826130c86020869a9901612c4e565b509293909161346a565b3d915061354e565b83513d8c823e3d90fd5b508661315d565b6135b9908a60408d015191613cba565b3861314e565b50856080880151169561313d565b60405163a9059cbb60e01b60208201526001600160a01b0392909216602483015260448083019390935291815261360e916136096064836117ff565b61401b565b565b600060443d106118b457604051600319913d83016004833e81516001600160401b03918282113d60248401111761366d57818401948551938411613675573d8501016020848701011161366d57506118b4929101602001906117ff565b949350505050565b50949350505050565b92909260018060a01b038085511694604094855180976394217ad160e01b825281600460209a8b935afa90811561395e57908491600091613926575b50169086516385b4bb5360e01b8152600081600481865afa90811561391b576001600160401b039161026091600091613900575b50015116908484511660005260088952600360ff8960002054166137118161167e565b0361386f57918761372b61375995938b98999a9b9561222b565b9201519160008a518096819582946326591b4760e21b84526004840152606060248401526064830190612099565b82604483015203925af160009181613840575b506137f45750600060033d116137e2575b6308c379a014613793575b84513d6000823e3d90fd5b61379b613610565b92836137a75750613788565b916137d68694959692600080516020614164833981519152948451948594600086528501521694820186612099565b0390a260009160009190565b5060046000803e60005160e01c61377d565b9493929190847fc3ebd08a96dba8a33150f4b14e32b1ffa43c03db9c1773c2b022bf27a4128c819160019488835195600087528601521692a2929151613839816117c9565b6000815290565b9091508381813d8311613868575b61385881836117ff565b810103126101ad5751903861376c565b503d61384e565b50505050600080516020614164833981519152908451926000845285878501521691806138c5868201604090601981527811905cdcd95d081a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b60208201520190565b0390a26000927811905cdcd95d081a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b60009351916138f6836117ae565b6019835282015290565b61391591503d806000833e61128381836117ff565b386136ee565b88513d6000823e3d90fd5b809250898092503d8311613957575b61393f81836117ff565b810103126101ad576139518491611820565b386136ba565b503d613935565b87513d6000823e3d90fd5b8251604080516394217ad160e01b815290969592946001600160a01b0393926020929083908290600490829089165afa8015613bf6578591600091613bbe575b50168851936385b4bb5360e01b8552600085600481855afa8015613bb35761026095600091613b98575b506001600160401b03958691015116908684511660005260088552600360ff8c6000205416613a018161167e565b03613b3f57918a613a17613a459593879561222b565b9201519160008c518096819582946326591b4760e21b84526004840152606060248401526064830190612099565b82604483015203925af160009181613b10575b50613ac957505050600060033d11613ab7575b6308c379a014613a805784513d6000823e3d90fd5b613a88613610565b9283613a945750613788565b6137d68460008051602061416483398151915294959697519384931695836122a2565b5060046000803e60005160e01c613a6b565b928796957fc3ebd08a96dba8a33150f4b14e32b1ffa43c03db9c1773c2b022bf27a4128c819398929594600196819a8551971687528601521692a2929151613839816117c9565b9091508281813d8311613b38575b613b2881836117ff565b810103126101ad57519038613a58565b503d613b1e565b50505050959493600080516020614164833981519152929186519416845285878501521691806138c5868201604090601981527811905cdcd95d081a5cc81b9bdd081dda1a5d195b1a5cdd1959603a1b60208201520190565b613bad91503d806000833e61128381836117ff565b386139d3565b8a513d6000823e3d90fd5b809250848092503d8311613bef575b613bd781836117ff565b810103126101ad57613be98591611820565b386139a9565b503d613bcd565b89513d6000823e3d90fd5b60405190602082019263095ea7b360e01b80855260018060a01b038092169182602486015260206000809781604489015260448852613c3f886117e4565b87519082885af1903d87519083613c99575b50505015613c61575b5050505050565b613c8f94613609926040519260208401526024830152604482015260448152613c89816117e4565b8261401b565b3880808080613c5a565b91925090613cb0575083163b15155b388080613c51565b6001915014613ca8565b60405163095ea7b360e01b60208083018281526001600160a01b03861660248501526044808501979097529583529094919391600090613cfb6064876117ff565b85519082865af16000513d82613d55575b505015613d1a575b50505050565b613d4c936136099160405191602083015260018060a01b031660248201526000604482015260448152613c89816117e4565b38808080613d14565b909150613d7257506001600160a01b0382163b15155b3880613d0c565b600114613d6b565b6000546001600160a01b0316330361069257565b8051906000827a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000080821015613f4b575b506d04ee2d6d415b85acef810000000080821015613f3e575b50662386f26fc1000080821015613f31575b506305f5e10080821015613f24575b5061271080821015613f17575b506064811015613f09575b600a80911015613eff575b600180830194816021613e41613e2b89611834565b98613e396040519a8b6117ff565b808a52611834565b602089019690601f1901368837880101905b613ec9575b50505050603a613ec391604051938491613e9f60208401977f19457468657265756d205369676e6564204d6573736167653a0a00000000000089525180928686019061184f565b8201613eb4825180936020878501910161184f565b0103601a8101845201826117ff565b51902090565b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a835304918215613efa57919082613e53565b613e58565b9060010190613e16565b606460029104910190613e0b565b6004910491019038613e00565b6008910491019038613df3565b6010910491019038613de4565b6020910491019038613dd2565b915050820460409038613db9565b9091813b613f9457613f6b9192614077565b50613f758161167e565b159182613f8157505090565b6001600160a01b03918216911614919050565b6000918291604051613fd881613fca6020820194630b135d3f60e11b998a87526024840152604060448401526064830190612099565b03601f1981018352826117ff565b51915afa90613fe561216c565b8261400d575b82613ff557505090565b9091506020818051810103126101ad57602001511490565b915060208251101591613feb565b906000602091828151910182855af115611291576000513d61406e57506001600160a01b0381163b155b61404c5750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b60011415614045565b81519190604183036140a8576140a192506020820151906060604084015193015160001a906140b3565b9192909190565b505060009160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161413757926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa1561412b5780516001600160a01b0381161561412257918190565b50809160019190565b604051903d90823e3d90fd5b5050506000916003919056fe277d78e1a096a577cf61e74951e3bc49a1ebc733aba2c7605ffe8177bd6f6ed7aaaf86ddf8f4071cf75eee19ba19344d99c9c05b252ef69065736134abd09233a2646970667358221220762cc6b3b65dc853c4f3c1c87f4eac5d2c619492d1cde90401cf221fba8fb16464736f6c634300081600330000000000000000000000001a44076050125825900e736c501f859c50fe728c0000000000000000000000005a85e85f034438c369625056c31198d71fc6be6c