0 txs
0 calls
constructor
constructor()
functions
ADMIN_DELEGATE_ROLE
viewfunction ADMIN_DELEGATE_ROLE() view returns (bytes32)
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getRoleMembers
viewfunction getRoleMembers(bytes32 role) view returns (address[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address _sender) view returns (bool)
isDelegateAdmin
viewfunction isDelegateAdmin(address _sender) view returns (bool)
isOperator
viewfunction isOperator(address _sender) view returns (bool)
isSigner
viewfunction isSigner(address _sender) view returns (bool)
moneyFiController
viewfunction moneyFiController() view returns (address)
moneyFiFundVault
viewfunction moneyFiFundVault() view returns (address)
OPERATOR
viewfunction OPERATOR() view returns (bytes32)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
SIGNER
viewfunction SIGNER() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
collectNative
nonpayablefunction collectNative(address _to)
depositFundToStrategyCrossChainFromOperator
payablefunction depositFundToStrategyCrossChainFromOperator(tuple _depositToStrategyCrossChain, tuple _swapTokenInternalParam) payable
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address admin_, address moneyFiController_, address moneyFundVault_)
pause
nonpayablefunction pause()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
unpause
nonpayablefunction unpause()
upgradeControllerAndFundVault
nonpayablefunction upgradeControllerAndFundVault(address moneyFiController_, address moneyFundVault_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawFundAnotherChain
payablefunction withdrawFundAnotherChain(tuple[] _withdrawStrategyMultipleChainsV2, address _receiver, bool _isReferral, uint256 _withdrawFee) payable
withdrawFundSameChain
nonpayablefunction withdrawFundSameChain(tuple[] _withdrawSameChainFromOperators, address _receiver, bool _isReferral, uint256 _withdrawFee)
events
CollectNativeToken
event CollectNativeToken(address receiver)
DistributeFundCrossChain
event DistributeFundCrossChain(address indexed strategyAddress, address indexed depositor, address indexed depositedTokenAddress, uint256 amount, address swapContract, address underlyingAsset, uint256 actualAmountOut, uint256 strategyShare, uint256 distributedFee, uint256 distributedAt)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
RebalanceFundSameChain
event RebalanceFundSameChain(address indexed strategyAddress, address indexed userAddress, address indexed underlyingAsset, uint256 receivedAmount, int256 receivedReward, uint256 protocolFee, uint256 referralFee, uint256 rebalanceFee, uint256 rebalancedAt)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SubmitWithdrawFundCrossChain
event SubmitWithdrawFundCrossChain(address indexed sender, address indexed receiver, address indexed tokenAddress)
TransferFundCrossChain
event TransferFundCrossChain(address indexed depositor, address indexed depositedToken, address tokenInForBridge, address tokenOutForBridge, address crossChainDexSender, address crossChainDexReceiver, uint256 actualAmountBridgeCrossChain, uint256 distributionFee, bytes transportMsg, uint256 transferFundCrossChainAt)
TransferFundFromRouterToFundVaultCrossChain
event TransferFundFromRouterToFundVaultCrossChain(address indexed depositor, address indexed depositedTokenAddress, uint256 amount, uint256 _transferFee, uint256 timestamp)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
WithdrawFundAnotherChain
event WithdrawFundAnotherChain(address indexed token, address indexed receiver, uint256 amount, bytes transportMsg, uint256 timestamp)
WithdrawFundAnotherChainExecuted
event WithdrawFundAnotherChainExecuted(address indexed receiver, address indexed operator, address bridgeCrossChain, bool isReferral, uint256 crosschainFee, bytes transportMsg, uint256 timestamp)
WithdrawFundCrossChainFromOperator
event WithdrawFundCrossChainFromOperator(address indexed receiver, address indexed tokenOut, bytes transportMsg, uint256 totalAmountOut, uint256 protocolFee, uint256 referralFee, uint256 withdrawFee, uint256 withdrawAt)
WithDrawFundSameChainFromOperator
event WithDrawFundSameChainFromOperator(address indexed receiver, address indexed user, address indexed strategyAddress, address tokenAddress, uint256 share, uint256 actualWithdrawAmount, uint256 withdrawAt)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
CanNotSwapToUnderLyToken
error CanNotSwapToUnderLyToken()
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
FailedSendNative
error FailedSendNative()
InsufficientBalance
error InsufficientBalance()
InvalidAdminRole
error InvalidAdminRole()
InvalidAtLeastOperatorRole
error InvalidAtLeastOperatorRole()
InvalidDelegateRole
error InvalidDelegateRole()
InvalidDexCrossChainExternal
error InvalidDexCrossChainExternal()
InvalidDexCrossChainInternal
error InvalidDexCrossChainInternal()
InvalidDexSwapExternalChain
error InvalidDexSwapExternalChain()
InvalidDexSwapInternalChain
error InvalidDexSwapInternalChain()
InvalidInitialization
error InvalidInitialization()
InvalidRebalanceAmount
error InvalidRebalanceAmount()
InvalidSameToken
error InvalidSameToken()
InvalidShare
error InvalidShare()
InvalidSignerRole
error InvalidSignerRole()
InvalidStrategy
error InvalidStrategy()
InvalidStrategyExternalChain
error InvalidStrategyExternalChain()
InvalidStrategyInternalChain
error InvalidStrategyInternalChain()
InvalidStrategyToken
error InvalidStrategyToken()
InvalidSupportedTokenExternal
error InvalidSupportedTokenExternal()
InvalidSupportedTokenInternal
error InvalidSupportedTokenInternal()
InvalidSwapParam
error InvalidSwapParam()
InvalidSystemFee
error InvalidSystemFee()
InvalidTypeDexCrossChainSenderReceiver
error InvalidTypeDexCrossChainSenderReceiver()
InvalidUnderlyingAssetExternalStrategy
error InvalidUnderlyingAssetExternalStrategy()
NotInitializing
error NotInitializing()
RequiredAddressNotNull
error RequiredAddressNotNull()
RequireDexActive
error RequireDexActive()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SwapFailed
error SwapFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516142c16100f95f395f81816117600152818161178901526118eb01526142c15ff3fe6080604052600436106101db575f3560e01c80637df73e27116100fd578063a3246ad311610092578063ca15c87311610062578063ca15c87314610576578063cc660e7314610595578063d547741f146105a8578063d6e69f05146105c7575f80fd5b8063a3246ad3146104cf578063ad3cb1cc146104fb578063c0c53b8b14610538578063c7b283f714610557575f80fd5b8063983d2737116100cd578063983d27371461045e578063a16a95f31461047e578063a217fddf1461049d578063a2a1cf85146104b0575f80fd5b80637df73e27146103ed5780638456cb591461040c5780639010d07c1461042057806391d148541461043f575f80fd5b806349251fd5116101735780635c975abb116101435780635c975abb146103845780636d70f7ae1461039b5780636da603a0146103ba57806375b238fc146103cd575f80fd5b806349251fd5146103195780634f1ef2861461033d57806352d1902d14610350578063582abd1214610364575f80fd5b806324d7806c116101ae57806324d7806c146102a65780632f2ff15d146102c557806336568abe146102e65780633f4ba83a14610305575f80fd5b806301ffc9a7146101df5780630952ff54146102135780631ecccbe314610241578063248a9ca314610278575b5f80fd5b3480156101ea575f80fd5b506101fe6101f93660046133e0565b6105e6565b60405190151581526020015b60405180910390f35b34801561021e575f80fd5b506102335f8051602061423583398151915281565b60405190815260200161020a565b34801561024c575f80fd5b50600354610260906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b348015610283575f80fd5b50610233610292366004613407565b5f9081526020819052604090206001015490565b3480156102b1575f80fd5b506101fe6102c036600461343d565b610610565b3480156102d0575f80fd5b506102e46102df366004613458565b610628565b005b3480156102f1575f80fd5b506102e4610300366004613458565b610652565b348015610310575f80fd5b506102e461068a565b348015610324575f80fd5b506002546102609061010090046001600160a01b031681565b6102e461034b3660046135c5565b6106ba565b34801561035b575f80fd5b506102336106d9565b34801561036f575f80fd5b506102335f8051602061421583398151915281565b34801561038f575f80fd5b5060025460ff166101fe565b3480156103a6575f80fd5b506101fe6103b536600461343d565b6106f4565b6102e46103c836600461369d565b61070c565b3480156103d8575f80fd5b506102335f8051602061425583398151915281565b3480156103f8575f80fd5b506101fe61040736600461343d565b6109e8565b348015610417575f80fd5b506102e4610a00565b34801561042b575f80fd5b5061026061043a3660046137db565b610a2e565b34801561044a575f80fd5b506101fe610459366004613458565b610a4c565b348015610469575f80fd5b506102335f8051602061429583398151915281565b348015610489575f80fd5b506101fe61049836600461343d565b610a74565b3480156104a8575f80fd5b506102335f81565b3480156104bb575f80fd5b506102e46104ca36600461343d565b610a8c565b3480156104da575f80fd5b506104ee6104e9366004613407565b610b91565b60405161020a91906137fb565b348015610506575f80fd5b5061052b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161020a9190613874565b348015610543575f80fd5b506102e4610552366004613886565b610baa565b348015610562575f80fd5b506102e46105713660046138ce565b610ce2565b348015610581575f80fd5b50610233610590366004613407565b610d7b565b6102e46105a3366004613afb565b610d91565b3480156105b3575f80fd5b506102e46105c2366004613458565b611234565b3480156105d2575f80fd5b506102e46105e1366004613cb0565b611258565b5f6001600160e01b03198216635a05180f60e01b148061060a575061060a82611664565b92915050565b5f61060a5f8051602061425583398151915283610a4c565b5f8281526020819052604090206001015461064281611698565b61064c83836116a5565b50505050565b6001600160a01b038116331461067b5760405163334bd91960e11b815260040160405180910390fd5b61068582826116d8565b505050565b61069333610a74565b6106b05760405163dade674960e01b815260040160405180910390fd5b6106b8611703565b565b6106c2611755565b6106cb826117f9565b6106d5828261181f565b5050565b5f6106e26118e0565b505f8051602061427583398151915290565b5f61060a5f8051602061429583398151915283610a4c565b610715336106f4565b61073257604051631784501560e11b815260040160405180910390fd5b61073a611929565b610750825f01518360200151846080015161194d565b5f6107648361010001518460800151611b91565b600354606085015160408087015160c08801519151636ce1558b60e01b81526001600160a01b03938416600482015290831660248201526044810191909152606481018490529293501690636ce1558b906084015f604051808303815f87803b1580156107cf575f80fd5b505af11580156107e1573d5f803e3d5ffd5b505050505f818460c001516107f69190613df9565b90506108088484866080015184611ccf565b5060808401516040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610851573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108759190613e0c565b85516080870151919250610893916001600160a01b03169083611e27565b845f01516001600160a01b031663363710f83460405180610100016040528089608001516001600160a01b0316815260200189602001516001600160a01b031681526020018960a001516001600160a01b0316815260200189604001516001600160a01b031681526020018681526020018960e00151815260200189610120015181526020018961014001518152506040518363ffffffff1660e01b815260040161093e9190613e23565b5f604051808303818588803b158015610955575f80fd5b505af1158015610967573d5f803e3d5ffd5b505050505084606001516001600160a01b031685604001516001600160a01b03167fb0705976944b902d7edea4247300fd6e941bd804708f5330d019416bdce90dd687608001518860a00151895f01518a60200151888a8d6101400151426040516109d9989796959493929190613ec9565b60405180910390a35050505050565b5f61060a5f8051602061421583398151915283610a4c565b610a0933610a74565b610a265760405163dade674960e01b815260040160405180910390fd5b6106b8611eae565b5f828152600160205260408120610a459083611eeb565b9392505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f61060a5f8051602061423583398151915283610a4c565b610a94611929565b610a9d33610a74565b610aba5760405163dade674960e01b815260040160405180910390fd5b6001600160a01b038116610ae15760405163706e379b60e11b815260040160405180910390fd5b5f816001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610b2a576040519150601f19603f3d011682016040523d82523d5f602084013e610b2f565b606091505b5050905080610b515760405163224ad6b360e01b815260040160405180910390fd5b6040516001600160a01b03831681527fd7e46176d0737023875b1da352ff649ab24a7422064b3f7f93774d1c9c815bac9060200160405180910390a15050565b5f81815260016020526040902060609061060a90611ef6565b5f610bb3611f02565b805490915060ff600160401b82041615906001600160401b03165f81158015610bd95750825b90505f826001600160401b03166001148015610bf45750303b155b905081158015610c02575080155b15610c205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c4a57845460ff60401b1916600160401b1785555b610c5388611f2a565b60028054610100600160a81b0319166101006001600160a01b038a81169190910291909117909155600380546001600160a01b0319169188169190911790558315610cd857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b610ceb33610610565b610d0857604051632d4d7bb360e01b815260040160405180910390fd5b6001600160a01b0382161580610d2557506001600160a01b038116155b15610d435760405163706e379b60e11b815260040160405180910390fd5b60028054610100600160a81b0319166101006001600160a01b0394851602179055600380546001600160a01b03191691909216179055565b5f81815260016020526040812061060a9061200d565b610d99611929565b610da2336106f4565b610dbf57604051631784501560e11b815260040160405180910390fd5b5f5b845181101561122d575f858281518110610ddd57610ddd613f28565b602002602001015190505f816040015190505f826060015190505f8084602001515f01516001600160a01b031685606001516001600160a01b031614158015610e3357506020850151516001600160a01b031615155b15610e5157604051636d04f1a560e11b815260040160405180910390fd5b602080860151015115610e6f57610e6c85602001518a612016565b91505b84515115610ec257610ebc855f015160405180608001604052808c6001600160a01b0316815260200188606001516001600160a01b031681526020018581526020018b151581525061209c565b90925090505b5f610ecd8885611b91565b9050808311610eef576040516317bbcaeb60e31b815260040160405180910390fd5b8083118015610efd57505f88115b15610f1c57610f0c8482612696565b610f168184613df9565b92505f97505b836001600160a01b0316855f01516001600160a01b031614158015610f4d575060208501516001600160a01b031615155b15610fd457610fcd60405180610100016040528087602001516001600160a01b03168152602001866001600160a01b03168152602001875f01516001600160a01b03168152602001306001600160a01b03168152602001858152602001876060015181526020018760400151815260200187608001511515815250612715565b8551945092505b6080860151610fee906001600160a01b0386169085611e27565b85608001516001600160a01b031663501c19158760a001516040518060a00160405280886001600160a01b031681526020018e6001600160a01b031681526020018781526020016110558b60c0015161271061104a9190613df9565b89906127105f61287a565b81526020018a60e001518152506040518363ffffffff1660e01b815260040161107e9190613f3c565b5f604051808303818588803b158015611095575f80fd5b505af11580156110a7573d5f803e3d5ffd5b5050505050836001600160a01b03168a6001600160a01b03167f2acdeac62db50cec503b7ccfbe8f8e21ee14e4b7daf21e59d0f20381e80d8ea48860e0015186868e6110f3575f611200565b611200600260019054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611147573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116b9190613e0c565b600260019054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e09190613e0c565b6111ec90612710613df9565b6111f7906001613f8e565b8a91905f61287a565b874260405161121496959493929190613fa1565b60405180910390a3866001019650505050505050610dc1565b5050505050565b5f8281526020819052604090206001015461124e81611698565b61064c83836116d8565b611261336106f4565b61127e57604051631784501560e11b815260040160405180910390fd5b611286611929565b5f5b845181101561122d575f8582815181106112a4576112a4613f28565b602002602001015190505f816040015190505f82602001519050805f01516001600160a01b031683606001516001600160a01b0316141580156112f0575080516001600160a01b031615155b1561130e57604051636d04f1a560e11b815260040160405180910390fd5b5f805f8360200151111561132957611326838a612016565b91505b8451511561137c57611376855f015160405180608001604052808c6001600160a01b0316815260200188606001516001600160a01b031681526020018581526020018b151581525061209c565b90925090505b5f61138b888760600151611b91565b90508083116113ad576040516317bbcaeb60e31b815260040160405180910390fd5b80831180156113bb57505f88115b156113de576113ce866060015182612696565b6113d88184613df9565b92505f97505b85606001516001600160a01b0316855f01516001600160a01b031614158015611413575060208501516001600160a01b031615155b156114ae5761149760405180610100016040528087602001516001600160a01b0316815260200188606001516001600160a01b03168152602001875f01516001600160a01b031681526020018c6001600160a01b03168152602001858152602001876060015181526020018760400151815260200187608001511515815250612715565b85516001600160a01b0316606088015292506114c7565b60608601516114c7906001600160a01b03168b856128bc565b86600101965085606001516001600160a01b03168a6001600160a01b03167f2acdeac62db50cec503b7ccfbe8f8e21ee14e4b7daf21e59d0f20381e80d8ea485858d611513575f611620565b611620600260019054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611567573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061158b9190613e0c565b600260019054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115dc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116009190613e0c565b61160c90612710613df9565b611617906001613f8e565b8991905f61287a565b6040805160c08082525f9082015260208101949094528301919091526060820152608081018590524260a082015260e00160405180910390a3505050505050611288565b5f6001600160e01b03198216637965db0b60e01b148061060a57506301ffc9a760e01b6001600160e01b031983161461060a565b6116a2813361291b565b50565b5f806116b18484612954565b90508015610a45575f8481526001602052604090206116d090846129e3565b509392505050565b5f806116e484846129f7565b90508015610a45575f8481526001602052604090206116d09084612a60565b61170b612a74565b6002805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806117db57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166117cf5f80516020614275833981519152546001600160a01b031690565b6001600160a01b031614155b156106b85760405163703e46dd60e11b815260040160405180910390fd5b61180233610a74565b6116a25760405163dade674960e01b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611879575060408051601f3d908101601f1916820190925261187691810190613e0c565b60015b6118a657604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f8051602061427583398151915281146118d657604051632a87526960e21b81526004810182905260240161189d565b6106858383612a97565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146106b85760405163703e46dd60e11b815260040160405180910390fd5b60025460ff16156106b85760405163d93c066560e01b815260040160405180910390fd5b600254604051637ebb429d60e01b81526001600160a01b03858116600483015261010090920490911690637ebb429d90602401602060405180830381865afa15801561199b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119bf9190613fdc565b6119dc57604051630d08d94b60e41b815260040160405180910390fd5b600254604051634957700560e11b81526001600160a01b038481166004830152610100909204909116906392aee00a90602401602060405180830381865afa158015611a2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a4e9190613fdc565b611a6b5760405163218ba6e360e11b815260040160405180910390fd5b6002546040516380cc359b60e01b81526001600160a01b0385811660048301528481166024830152610100909204909116906380cc359b90604401602060405180830381865afa158015611ac1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae59190613fdc565b611b02576040516348a73c5560e11b815260040160405180910390fd5b60025460405163116f80c560e01b81526001600160a01b0383811660048301526101009092049091169063116f80c590602401602060405180830381865afa158015611b50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b749190613fdc565b610685576040516333084a1960e01b815260040160405180910390fd5b5f600260019054906101000a90046001600160a01b03166001600160a01b031663ec39ded16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611be3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c079190613e0c565b831115611c27576040516317bbcaeb60e31b815260040160405180910390fd5b5f826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c889190613ff7565b60ff16905080601214611cc4575f611ca1826012613df9565b9050611cbc6001611cb383600a6140fa565b8791905f61287a565b925050611cc8565b8391505b5092915050565b5f84606001516001600160a01b031685608001516001600160a01b031614611e1f5783516001600160a01b03161580611d0a57506020840151155b80611d84575060025484516040516362141cf560e11b81526001600160a01b039182166004820152610100909204169063c42839ea90602401602060405180830381865afa158015611d5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d829190613fdc565b155b15611da157604051628763ed60e31b815260040160405180910390fd5b611e1c604051806101000160405280865f01516001600160a01b0316815260200187606001516001600160a01b03168152602001856001600160a01b03168152602001306001600160a01b03168152602001848152602001866020015181526020018660600151815260200186604001511515815250612715565b90505b949350505050565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015611e74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e989190613e0c565b905061064c8484611ea98585613f8e565b612aec565b611eb6611929565b6002805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586117383390565b5f610a458383612b7b565b60605f610a4583612ba1565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061060a565b611f415f80516020614295833981519152826116a5565b50611f595f80516020614255833981519152826116a5565b50611f715f80516020614235833981519152826116a5565b50611f895f80516020614215833981519152826116a5565b50611fa15f8051602061425583398151915280612bfa565b611fc55f805160206142358339815191525f80516020614255833981519152612bfa565b611fe95f805160206142958339815191525f80516020614235833981519152612bfa565b6116a25f805160206142158339815191525f80516020614235833981519152612bfa565b5f61060a825490565b6003548251602084015160405163787e162160e01b81526001600160a01b038581166004830152306024830152928316604482015260648101919091525f92919091169063787e1621906084015f604051808303815f87803b15801561207a575f80fd5b505af115801561208c573d5f803e3d5ffd5b5050506020909301519392505050565b80515f908190819081905b8651831015612683575f8784815181106120c3576120c3613f28565b6020908102919091010151516040516370a0823160e01b81526001600160a01b0384811660048301529192505f918316906370a0823190602401602060405180830381865afa158015612118573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061213c9190613e0c565b9050816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061219e9190614105565b6001600160a01b031688602001516001600160a01b0316146121d357604051636d04f1a560e11b815260040160405180910390fd5b5f8986815181106121e6576121e6613f28565b60200260200101516020015111158061221b575088858151811061220c5761220c613f28565b60200260200101516020015181105b80612224575080155b156122425760405163040357dd60e21b815260040160405180910390fd5b60405163520ab54d60e01b81526001600160a01b0384811660048301525f919084169063520ab54d90602401602060405180830381865afa158015612289573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ad9190613e0c565b90505f806122bf838c60600151612c44565b91509150808211156122e2576122d58183613df9565b6122df9088613f8e565b96505b60405163087515b960e41b8152600481018590523060248201526001600160a01b038781166044830152608060648301525f6084830181905291908716906387515b909060a4016020604051808303815f875af1158015612345573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123699190613e0c565b90505f858e8b8151811061237f5761237f613f28565b602002602001015160200151146123c9576123c48e8b815181106123a5576123a5613f28565b602002602001015160200151875f8561287a909392919063ffffffff16565b6123cb565b815b90505f841180156123dc5750838210155b1561255e5761246a60035f9054906101000a90046001600160a01b031685896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612436573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061245a9190614105565b6001600160a01b03169190611e27565b60035f9054906101000a90046001600160a01b03166001600160a01b0316637e20cf71886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124c9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124ed9190614105565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101879052604481018690526064015f604051808303815f87803b158015612539575f80fd5b505af115801561254b573d5f803e3d5ffd5b50505050838261255b9190613df9565b91505b81811061258257818d6040018181516125779190613f8e565b9052505f91506125a4565b808d6040018181516125949190613f8e565b9052506125a18183613df9565b91505b811561267157612671604051806101000160405280896001600160a01b03168152602001896001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612604573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126289190614105565b6001600160a01b031681526020018a6001600160a01b0316815260200184815260200186886126579190614120565b81526020015f81526020015f81526020015f815250612d65565b896001019950505050505050506120a7565b50604085015193509150505b9250929050565b6003546126b0906001600160a01b03848116911683611e27565b6003546040516306d3ac9960e41b81526001600160a01b0384811660048301526024820184905290911690636d3ac990906044015f604051808303815f87803b1580156126fb575f80fd5b505af115801561270d573d5f803e3d5ffd5b505050505050565b60025481516040516362141cf560e11b81526001600160a01b0391821660048201525f9261010090049091169063c42839ea90602401602060405180830381865afa158015612766573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061278a9190613fdc565b6127a657604051628763ed60e31b815260040160405180910390fd5b8151608083015160208401516127c7926001600160a01b0390911691611e27565b81516020830151604080850151608086015160a0870151606088015160e089015160c08a01519551637c9eaaa960e11b81526001600160a01b039098169763f93d55529761281e979096959493929160040161413f565b6020604051808303815f875af1925050508015612858575060408051601f3d908101601f1916820190925261285591810190613e0c565b60015b61060a5760405163081ceff360e41b815260040160405180910390fd5b919050565b5f6128a761288783612f81565b80156128a257505f848061289d5761289d614195565b868809115b151590565b6128b2868686612fad565b611e1c9190613f8e565b6040516001600160a01b0383811660248301526044820183905261068591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061305d565b6129258282610a4c565b6106d55760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161189d565b5f61295f8383610a4c565b6129dc575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556129943390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161060a565b505f61060a565b5f610a45836001600160a01b0384166130c9565b5f612a028383610a4c565b156129dc575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161060a565b5f610a45836001600160a01b03841661310e565b60025460ff166106b857604051638dfc202b60e01b815260040160405180910390fd5b612aa0826131f1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612ae4576106858282613254565b6106d56132c6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612b3d84826132e5565b61064c576040516001600160a01b0384811660248301525f6044830152612b7191869182169063095ea7b3906064016128e9565b61064c848261305d565b5f825f018281548110612b9057612b90613f28565b905f5260205f200154905092915050565b6060815f01805480602002602001604051908101604052809291908181526020018280548015612bee57602002820191905f5260205f20905b815481526020019060010190808311612bda575b50505050509050919050565b5f82815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b5f805f84131561268f57612cd1600260019054906101000a90046001600160a01b03166001600160a01b031663b0e21e8a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ca2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cc69190613e0c565b85906127105f61287a565b9150821561268f57612d5c600260019054906101000a90046001600160a01b03166001600160a01b03166384ae2bc66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d519190613e0c565b83906127105f61287a565b90509250929050565b805f01516001600160a01b031663c0b538f86040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612da0575f80fd5b505af1158015612db2573d5f803e3d5ffd5b505060035460e084015160a08501516060860151612e0395506001600160a01b0390931693509091612de49190613f8e565b612dee9190613f8e565b60208401516001600160a01b03169190611e27565b6003546020820151604080840151606085015160a086015160c087015160e088015194516318139f4760e01b81526001600160a01b039687166004820152938616602485015260448401929092526064830152608482015260a48101919091529116906318139f479060c4015f604051808303815f87803b158015612e86575f80fd5b505af1158015612e98573d5f803e3d5ffd5b5050505080602001516001600160a01b031681604001516001600160a01b0316825f01516001600160a01b03167e7cb892d68cd3723baea36a5d32331d221b1455154a0741fa57358ae4f8a77f846060015185608001515f808860e0015142604051612f2c96959493929190958652602086019490945260408501929092526060840152608083015260a082015260c00190565b60405180910390a4805f01516001600160a01b0316631c5561ea6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612f6f575f80fd5b505af115801561122d573d5f803e3d5ffd5b5f6002826003811115612f9657612f966141a9565b612fa091906141bd565b60ff166001149050919050565b5f805f612fba868661332e565b91509150815f03612fde57838181612fd457612fd4614195565b0492505050610a45565b818411612ff557612ff5600385150260111861334a565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010185841190960395909502919093039390930492909217029150509392505050565b5f8060205f8451602086015f885af18061307c576040513d5f823e3d81fd5b50505f513d915081156130935780600114156130a0565b6001600160a01b0384163b155b1561064c57604051635274afe760e01b81526001600160a01b038516600482015260240161189d565b5f8181526001830160205260408120546129dc57508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561060a565b5f81815260018301602052604081205480156131e8575f613130600183613df9565b85549091505f9061314390600190613df9565b90508082146131a2575f865f01828154811061316157613161613f28565b905f5260205f200154905080875f01848154811061318157613181613f28565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806131b3576131b36141ea565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061060a565b5f91505061060a565b806001600160a01b03163b5f0361322657604051634c9c8ce360e01b81526001600160a01b038216600482015260240161189d565b5f8051602061427583398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161327091906141fe565b5f60405180830381855af49150503d805f81146132a8576040519150601f19603f3d011682016040523d82523d5f602084013e6132ad565b606091505b50915091506132bd85838361335b565b95945050505050565b34156106b85760405163b398979f60e01b815260040160405180910390fd5b5f805f8060205f8651602088015f8a5af192503d91505f519050828015613324575081156133165780600114613324565b5f866001600160a01b03163b115b9695505050505050565b5f805f1983850993909202808410938190039390930393915050565b634e487b715f52806020526024601cfd5b6060826133705761336b826133b7565b610a45565b815115801561338757506001600160a01b0384163b155b156133b057604051639996b31560e01b81526001600160a01b038516600482015260240161189d565b5080610a45565b8051156133c75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f602082840312156133f0575f80fd5b81356001600160e01b031981168114610a45575f80fd5b5f60208284031215613417575f80fd5b5035919050565b6001600160a01b03811681146116a2575f80fd5b80356128758161341e565b5f6020828403121561344d575f80fd5b8135610a458161341e565b5f8060408385031215613469575f80fd5b82359150602083013561347b8161341e565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b03811182821017156134bc576134bc613486565b60405290565b60405161016081016001600160401b03811182821017156134bc576134bc613486565b604051606081016001600160401b03811182821017156134bc576134bc613486565b60405161010081016001600160401b03811182821017156134bc576134bc613486565b604051601f8201601f191681016001600160401b038111828210171561355257613552613486565b604052919050565b5f82601f830112613569575f80fd5b81356001600160401b0381111561358257613582613486565b613595601f8201601f191660200161352a565b8181528460208386010111156135a9575f80fd5b816020850160208301375f918101602001919091529392505050565b5f80604083850312156135d6575f80fd5b82356135e18161341e565b915060208301356001600160401b038111156135fb575f80fd5b6136078582860161355a565b9150509250929050565b80151581146116a2575f80fd5b803561287581613611565b5f60808284031215613639575f80fd5b61364161349a565b9050813561364e8161341e565b815260208281013590820152604082013561366881613611565b604082015260608201356001600160401b03811115613685575f80fd5b6136918482850161355a565b60608301525092915050565b5f80604083850312156136ae575f80fd5b82356001600160401b038111156136c3575f80fd5b830161016081860312156136d5575f80fd5b6136dd6134c2565b6136e682613432565b81526136f460208301613432565b602082015261370560408301613432565b604082015261371660608301613432565b606082015261372760808301613432565b608082015261373860a08301613432565b60a082015260c0828101359082015260e0808301359082015261010080830135908201526101208201356001600160401b03811115613775575f80fd5b6137818782850161355a565b610120830152506101408201356001600160401b038111156137a1575f80fd5b6137ad8782850161355a565b6101408301525092505060208301356001600160401b038111156137cf575f80fd5b61360785828601613629565b5f80604083850312156137ec575f80fd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561383b5783516001600160a01b0316835260209384019390920191600101613814565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a456020830184613846565b5f805f60608486031215613898575f80fd5b83356138a38161341e565b925060208401356138b38161341e565b915060408401356138c38161341e565b809150509250925092565b5f80604083850312156138df575f80fd5b82356138ea8161341e565b9150602083013561347b8161341e565b5f6001600160401b0382111561391257613912613486565b5060051b60200190565b5f82601f83011261392b575f80fd5b813561393e613939826138fa565b61352a565b8082825260208201915060208360051b86010192508583111561395f575f80fd5b602085015b838110156139f45780356001600160401b03811115613981575f80fd5b86016060818903601f19011215613996575f80fd5b61399e6134e5565b60208201356139ac8161341e565b81526040820135602082015260608201356001600160401b038111156139d0575f80fd5b6139df8a60208386010161355a565b60408301525084525060209283019201613964565b5095945050505050565b5f60408284031215613a0e575f80fd5b604080519081016001600160401b0381118282101715613a3057613a30613486565b6040529050808235613a418161341e565b8152602092830135920191909152919050565b5f60a08284031215613a64575f80fd5b60405160a081016001600160401b0381118282101715613a8657613a86613486565b6040529050808235613a978161341e565b81526020830135613aa78161341e565b602082015260408301356001600160401b03811115613ac4575f80fd5b613ad08582860161355a565b604083015250606083810135908201526080830135613aee81613611565b6080919091015292915050565b5f805f8060808587031215613b0e575f80fd5b84356001600160401b03811115613b23575f80fd5b8501601f81018713613b33575f80fd5b8035613b41613939826138fa565b8082825260208201915060208360051b850101925089831115613b62575f80fd5b602084015b83811015613c7f5780356001600160401b03811115613b84575f80fd5b8501610120818d03601f19011215613b9a575f80fd5b613ba2613507565b60208201356001600160401b03811115613bba575f80fd5b613bc98e60208386010161391c565b825250613bd98d604084016139fe565b602082015260808201356001600160401b03811115613bf6575f80fd5b613c058e602083860101613a54565b604083015250613c1760a08301613432565b6060820152613c2860c08301613432565b608082015260e082013560a082015261010082013560c08201526101208201356001600160401b03811115613c5b575f80fd5b613c6a8e60208386010161355a565b60e08301525084525060209283019201613b67565b509650613c929250505060208601613432565b9250613ca06040860161361e565b9396929550929360600135925050565b5f805f8060808587031215613cc3575f80fd5b84356001600160401b03811115613cd8575f80fd5b8501601f81018713613ce8575f80fd5b8035613cf6613939826138fa565b8082825260208201915060208360051b850101925089831115613d17575f80fd5b602084015b83811015613c7f5780356001600160401b03811115613d39575f80fd5b850160a0818d03601f19011215613d4e575f80fd5b613d5661349a565b60208201356001600160401b03811115613d6e575f80fd5b613d7d8e60208386010161391c565b825250613d8d8d604084016139fe565b602082015260808201356001600160401b03811115613daa575f80fd5b613db98e602083860101613a54565b60408301525060a08201359150613dcf8261341e565b6060810191909152835260209283019201613d1c565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561060a5761060a613de5565b5f60208284031215613e1c575f80fd5b5051919050565b602080825282516001600160a01b0316828201528201515f90613e5160408401826001600160a01b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160a01b038116608084015250608083015160a083015260a083015160c083015260c083015161010060e0840152613eab610120840182613846565b905060e0840151601f19848303016101008501526132bd8282613846565b6001600160a01b03898116825288811660208301528781166040830152861660608201526080810185905260a0810184905261010060c082018190525f90613f1390830185613846565b90508260e08301529998505050505050505050565b634e487b7160e01b5f52603260045260245ffd5b6020815260018060a01b03825116602082015260018060a01b03602083015116604082015260408201516060820152606082015160808201525f608083015160a080840152611e1f60c0840182613846565b8082018082111561060a5761060a613de5565b60c081525f613fb360c0830189613846565b60208301979097525060408101949094526060840192909252608083015260a090910152919050565b5f60208284031215613fec575f80fd5b8151610a4581613611565b5f60208284031215614007575f80fd5b815160ff81168114610a45575f80fd5b6001815b60018411156140525780850481111561403657614036613de5565b600184161561404457908102905b60019390931c92800261401b565b935093915050565b5f826140685750600161060a565b8161407457505f61060a565b816001811461408a5760028114614094576140b0565b600191505061060a565b60ff8411156140a5576140a5613de5565b50506001821b61060a565b5060208310610133831016604e8410600b84101617156140d3575081810a61060a565b6140df5f198484614017565b805f19048211156140f2576140f2613de5565b029392505050565b5f610a45838361405a565b5f60208284031215614115575f80fd5b8151610a458161341e565b8181035f831280158383131683831282161715611cc857611cc8613de5565b6001600160a01b038881168252878116602083015260408201879052606082018690528416608082015282151560a082015260e060c082018190525f9061418890830184613846565b9998505050505050505050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff8316806141db57634e487b7160e01b5f52601260045260245ffd5b8060ff84160691505092915050565b634e487b7160e01b5f52603160045260245ffd5b5f82518060208501845e5f92019182525091905056fe6c8d7f768a6bb4aafe85e8a2f5a9680355239c7e14646ed62b044e39de154512c171260023d22a25a00a2789664c9334017843b831138c8ef03cc8897e5873d7f23ec0bb4210edd5cba85afd05127efcd2fc6a781bfed49188da1081670b22d8360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc46a52cf33029de9f84853745a87af28464c80bf0346df1b32e205fc73319f622a164736f6c634300081a000a