0 txs
25 calls
constructor
constructor()
functions
asUsdf
viewfunction asUsdf() view returns (address)
asUsdfEarn
viewfunction asUsdfEarn() view returns (address)
BOT
viewfunction BOT() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DENOMINATOR
viewfunction DENOMINATOR() view returns (uint256)
get_dy
viewfunction get_dy(uint256 i, uint256 j, uint256 dx) view returns (uint256)
getRequestWithdrawUSDFNos
viewfunction getRequestWithdrawUSDFNos() view returns (uint256[])
getRequestWithdrawUSDTNos
viewfunction getRequestWithdrawUSDTNos() view returns (uint256[])
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)
idWhitelist
viewfunction idWhitelist(bytes32) view returns (bool)
isHealthy
viewfunction isHealthy(bytes32 id, address borrower) view returns (bool)
MANAGER
viewfunction MANAGER() view returns (bytes32)
MAX_LTV
viewfunction MAX_LTV() view returns (uint256)
minSlippage
viewfunction minSlippage() view returns (uint256)
moolah
viewfunction moolah() view returns (address)
pancakeSwapPool
viewfunction pancakeSwapPool() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
recipient
viewfunction recipient() view returns (address)
requestWithdrawsUSDF
viewfunction requestWithdrawsUSDF(uint256 _requestWithdrawNo) view returns (tuple)
requestWithdrawsUSDT
viewfunction requestWithdrawsUSDT(uint256 _requestWithdrawNo) view returns (tuple)
requestWithdrawUSDFNos
viewfunction requestWithdrawUSDFNos(uint256) view returns (uint256)
requestWithdrawUSDTNos
viewfunction requestWithdrawUSDTNos(uint256) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenProviders
viewfunction tokenProviders(address) view returns (address)
transferSwitch
viewfunction transferSwitch() view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
usdf
viewfunction usdf() view returns (address)
usdfEarn
viewfunction usdfEarn() view returns (address)
usdt
viewfunction usdt() view returns (address)
vaultWhitelist
viewfunction vaultWhitelist(address) view returns (bool)
buyUSDF
nonpayablefunction buyUSDF(uint256 _amount)
changeMaxSlippage
nonpayablefunction changeMaxSlippage(uint256 _minSlippage)
changeRecipient
nonpayablefunction changeRecipient(address _recipient)
claimWithdrawUSDF
nonpayablefunction claimWithdrawUSDF(uint256 _requestWithdrawNo)
claimWithdrawUSDT
nonpayablefunction claimWithdrawUSDT(uint256 _requestWithdrawNo)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address _admin, address _manager, address _bot, address _recipient, uint256 _minSlippage)
managerWithdraw
nonpayablefunction managerWithdraw(address _token, uint256 _amount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
repay
nonpayablefunction repay(bytes32 _id, uint256 _asset, uint256 _shares)
requestWithdrawUSDF
nonpayablefunction requestWithdrawUSDF(uint256 _amount)
requestWithdrawUSDT
nonpayablefunction requestWithdrawUSDT(uint256 _amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
sellUSDF
nonpayablefunction sellUSDF(uint256 _amount)
updateIdWhitelist
nonpayablefunction updateIdWhitelist(bytes32 _id, bool _bool)
updateTokenProvider
nonpayablefunction updateTokenProvider(address _token, address _provider)
updateTransferSwitch
nonpayablefunction updateTransferSwitch(bool _bool)
updateVaultWhitelist
nonpayablefunction updateVaultWhitelist(address _vault, bool _bool)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address _vault, uint256 _amount)
withdrawCollateral
nonpayablefunction withdrawCollateral(bytes32 _id, uint256 _asset)
events
Buy
event Buy(uint256 amountIn, uint256 amountOut)
ClaimWithdrawUSDF
event ClaimWithdrawUSDF(uint256 requestWithdrawNo, uint256 withdrawAmount, uint256 receiveAmount)
ClaimWithdrawUSDT
event ClaimWithdrawUSDT(uint256 requestWithdrawNo, uint256 withdrawAmount, uint256 receiveAmount)
IdWhitelistUpdate
event IdWhitelistUpdate(bytes32 id, bool isWhitelisted)
Initialized
event Initialized(uint64 version)
MaxSlippageChanged
event MaxSlippageChanged(uint256 oldMaxSlippage, uint256 newMaxSlippage)
RecipientChanged
event RecipientChanged(address oldRecipient, address newRecipient)
RequestWithdrawUSDF
event RequestWithdrawUSDF(uint256 requestWithdrawNo, uint256 amount)
RequestWithdrawUSDT
event RequestWithdrawUSDT(uint256 requestWithdrawNo, uint256 amount)
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)
Sell
event Sell(uint256 amountIn, uint256 amountOut)
TokenProviderUpdated
event TokenProviderUpdated(address token, address oldProvider, address newProvider)
TransferSwitchUpdated
event TransferSwitchUpdated(bool transferSwitch)
Upgraded
event Upgraded(address indexed implementation)
VaultWhitelistUpdated
event VaultWhitelistUpdated(address vault, bool isWhitelisted)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516141846100f95f395f8181612e8001528181612ea90152612fec01526141845ff3fe608060405260043610610344575f3560e01c8063918f8674116101bd578063c0677c47116100f2578063f30b2cbe11610092578063f7013ef61161006d578063f7013ef614610a06578063fa1c622114610a25578063fae590ea14610a44578063fe63e8ca14610a63575f5ffd5b8063f30b2cbe1461099f578063f3fef3a3146109d3578063f6ba1371146109f2575f5ffd5b8063d547741f116100cd578063d547741f1461091b578063dcfaa23c1461093a578063e485849414610961578063e4f4228a14610980575f5ffd5b8063c0677c47146108c9578063c5041664146108dd578063ca15c873146108fc575f5ffd5b8063a3246ad31161015d578063ad3cb1cc11610138578063ad3cb1cc1461082f578063b38fcf911461086c578063b46eb6381461088b578063bbfaf536146108aa575f5ffd5b8063a3246ad3146107bd578063a4bf309d146107e9578063a7e3ba9014610808575f5ffd5b80639881ceb1116101985780639881ceb11461073e578063995f37f71461076c578063a1e934821461078b578063a217fddf146107aa575f5ffd5b8063918f8674146106eb57806391d148541461070057806392c2bcb41461071f575f5ffd5b80633e9b44fd1161029357806366d003ac116102335780637469bfd71161020e5780637469bfd71461066457806381bf8d3d146106905780638caeb16d146106a55780639010d07c146106cc575f5ffd5b806366d003ac1461060757806367c572ea146106265780636eeb80a314610645575f5ffd5b80634f1ef2861161026e5780634f1ef286146105a857806352d1902d146105bb578063556d6e9f146105cf57806357888f0f146105ee575f5ffd5b80633e9b44fd1461054257806345335feb14610569578063486277f614610588575f5ffd5b80632f2ff15d116102fe57806336bd0068116102d957806336bd0068146104af57806339daa1b2146104ce5780633cc0d97b146104fc5780633e992d981461051b575f5ffd5b80632f2ff15d1461044a5780632f48ab7d1461046957806336568abe14610490575f5ffd5b806301ffc9a71461034f5780630f958b35146103835780631b2df850146103bb578063248a9ca3146103e95780632782b77214610408578063279093a514610429575f5ffd5b3661034b57005b5f5ffd5b34801561035a575f5ffd5b5061036e6103693660046137ee565b610a82565b60405190151581526020015b60405180910390f35b34801561038e575f5ffd5b506103a35f5160206140af5f395f51905f5281565b6040516001600160a01b03909116815260200161037a565b3480156103c6575f5ffd5b506103db5f51602061408f5f395f51905f5281565b60405190815260200161037a565b3480156103f4575f5ffd5b506103db610403366004613815565b610aac565b348015610413575f5ffd5b5061041c610acc565b60405161037a919061382c565b348015610434575f5ffd5b50610448610443366004613882565b610b22565b005b348015610455575f5ffd5b506104486104643660046138ac565b610b7a565b348015610474575f5ffd5b506103a37355d398326f99059ff775485246999027b319795581565b34801561049b575f5ffd5b506104486104aa3660046138ac565b610b9c565b3480156104ba575f5ffd5b506104486104c9366004613815565b610bcf565b3480156104d9575f5ffd5b5061036e6104e83660046138da565b60076020525f908152604090205460ff1681565b348015610507575f5ffd5b50610448610516366004613815565b610cc5565b348015610526575f5ffd5b506103a373c271fc70dd9e678ac1ab632f797894fe4be2c34581565b34801561054d575f5ffd5b506103a373917af46b3c3c6e1bb7286b9f59637fb7c65851fb81565b348015610574575f5ffd5b50610448610583366004613902565b610e70565b348015610593575f5ffd5b506103db5f51602061410f5f395f51905f5281565b6104486105b636600461399d565b610f9f565b3480156105c6575f5ffd5b506103db610fbe565b3480156105da575f5ffd5b506103db6105e9366004613a44565b610fd9565b3480156105f9575f5ffd5b5060055461036e9060ff1681565b348015610612575f5ffd5b506003546103a3906001600160a01b031681565b348015610631575f5ffd5b5061036e6106403660046138ac565b611065565b348015610650575f5ffd5b506103db61065f366004613815565b611309565b34801561066f575f5ffd5b5061068361067e366004613815565b611328565b60405161037a9190613a6d565b34801561069b575f5ffd5b506103db61251c81565b3480156106b0575f5ffd5b506103a373176f274335c8b5fd5ec5e8274d0cf36b08e44a5781565b3480156106d7575f5ffd5b506103a36106e6366004613ada565b6113a4565b3480156106f6575f5ffd5b506103db61271081565b34801561070b575f5ffd5b5061036e61071a3660046138ac565b6113d1565b34801561072a575f5ffd5b506104486107393660046138da565b611407565b348015610749575f5ffd5b5061036e610758366004613815565b60046020525f908152604090205460ff1681565b348015610777575f5ffd5b50610448610786366004613afa565b611520565b348015610796575f5ffd5b506104486107a5366004613ada565b611639565b3480156107b5575f5ffd5b506103db5f81565b3480156107c8575f5ffd5b506107dc6107d7366004613815565b6118a7565b60405161037a9190613b1d565b3480156107f4575f5ffd5b50610448610803366004613815565b6118d0565b348015610813575f5ffd5b506103a373db57a53c428a9fafcbfeffb6dd80d0f42754369581565b34801561083a575f5ffd5b5061085f604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161037a9190613b8b565b348015610877575f5ffd5b50610448610886366004613b9d565b611c7b565b348015610896575f5ffd5b506104486108a5366004613bb8565b611d34565b3480156108b5575f5ffd5b506104486108c4366004613815565b611eca565b3480156108d4575f5ffd5b506103db5f5481565b3480156108e8575f5ffd5b506106836108f7366004613815565b612274565b348015610907575f5ffd5b506103db610916366004613815565b6122b4565b348015610926575f5ffd5b506104486109353660046138ac565b6122d8565b348015610945575f5ffd5b506103a3735a110fc00474038f6c02e89c707d638602ea44b581565b34801561096c575f5ffd5b5061044861097b366004613a44565b6122f4565b34801561098b575f5ffd5b5061044861099a366004613815565b6124ad565b3480156109aa575f5ffd5b506103a36109b93660046138da565b60066020525f90815260409020546001600160a01b031681565b3480156109de575f5ffd5b506104486109ed366004613882565b612657565b3480156109fd575f5ffd5b5061041c612766565b348015610a11575f5ffd5b50610448610a20366004613be4565b6127ba565b348015610a30575f5ffd5b50610448610a3f366004613815565b612b30565b348015610a4f575f5ffd5b506103db610a5e366004613815565b612c11565b348015610a6e575f5ffd5b50610448610a7d366004613815565b612c20565b5f6001600160e01b03198216635a05180f60e01b1480610aa65750610aa682612cd3565b92915050565b5f9081525f51602061412f5f395f51905f52602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191905f5260205f20905b815481526020019060010190808311610b04575b5050505050905090565b5f51602061408f5f395f51905f52610b3981612d07565b5f8211610b615760405162461bcd60e51b8152600401610b5890613c44565b60405180910390fd5b610b756001600160a01b0384163384612d14565b505050565b610b8382610aac565b610b8c81612d07565b610b968383612d73565b50505050565b6001600160a01b0381163314610bc55760405163334bd91960e11b815260040160405180910390fd5b610b758282612db5565b5f51602061408f5f395f51905f52610be681612d07565b612710821015610c2f5760405162461bcd60e51b8152602060048201526014602482015273496e76616c6964206d696e20736c69707061676560601b6044820152606401610b58565b5f548203610c7f5760405162461bcd60e51b815260206004820152601860248201527f5f6d696e536c697070616765206973207468652073616d6500000000000000006044820152606401610b58565b5f80549083905560408051828152602081018590527f9e1710ec680d824e76306b168d5a9e428f2071f6a7b2431eac1788195cc2bf1991015b60405180910390a1505050565b5f51602061410f5f395f51905f52610cdc81612d07565b5f8211610cfb5760405162461bcd60e51b8152600401610b5890613c44565b610d2e73917af46b3c3c6e1bb7286b9f59637fb7c65851fb73db57a53c428a9fafcbfeffb6dd80d0f42754369584612dee565b60405163745400c960e01b81526004810183905273db57a53c428a9fafcbfeffb6dd80d0f4275436959063745400c9906024015f604051808303815f87803b158015610d78575f5ffd5b505af1158015610d8a573d5f5f3e3d5ffd5b505050505f73db57a53c428a9fafcbfeffb6dd80d0f4275436956001600160a01b031663b22ccd766040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ddf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e039190613c7b565b600280546001810182555f919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0181905560408051828152602081018690529192507f769c53a30f4a5dbb979fbe01c72b96c12b86a0865a9db1e4758d6f607c41dfaf9101610cb8565b5f51602061408f5f395f51905f52610e8781612d07565b6001600160a01b038316610ed55760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964207661756c74206164647265737360581b6044820152606401610b58565b6001600160a01b0383165f9081526007602052604090205482151560ff909116151503610f445760405162461bcd60e51b815260206004820152601b60248201527f5661756c742077686974656c697374206973207468652073616d6500000000006044820152606401610b58565b6001600160a01b0383165f81815260076020908152604091829020805460ff19168615159081179091558251938452908301527f9c4947993c105b7a2ef94cdd18c10347d79d0d5a763630cdc1de23ede5e9f72b9101610cb8565b610fa7612e75565b610fb082612f1b565b610fba8282612f25565b5050565b5f610fc7612fe1565b505f5160206140ef5f395f51905f5290565b60405163556d6e9f60e01b81526004810184905260248101839052604481018290525f9073176f274335c8b5fd5ec5e8274d0cf36b08e44a579063556d6e9f90606401602060405180830381865afa158015611037573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190613c7b565b90505b9392505050565b604051632c3c915760e01b8152600481018390525f9081905f5160206140af5f395f51905f5290632c3c91579060240160a060405180830381865afa1580156110b0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110d49190613ca2565b604051630ad22b2b60e11b81529091505f905f5160206140af5f395f51905f52906315a4565690611109908590600401613d72565b602060405180830381865afa158015611124573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111489190613c7b565b6040516349e2903160e11b8152600481018790526001600160a01b03861660248201529091505f905f5160206140af5f395f51905f52906393c5206290604401606060405180830381865afa1580156111a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111c79190613d96565b604051632e3071cd60e11b8152600481018890529091505f905f5160206140af5f395f51905f5290635c60e39a9060240160c060405180830381865afa158015611213573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112379190613dfb565b905081602001516001600160801b03165f0361125a576001945050505050610aa6565b5f61128d83602001516001600160801b031683604001516001600160801b031684606001516001600160801b031661302a565b9050805f036112a457600195505050505050610aa6565b5f6112cc84604001516001600160801b0316866ec097ce7bc90715b34b9f100000000061302a565b90505f6112e6828860800151670de0b6b3a764000061302a565b90506112f78161251c61271061302a565b92909210159998505050505050505050565b60018181548110611318575f80fd5b5f91825260209091200154905081565b61133061379b565b6040516326421cdf60e11b81526004810183905273db57a53c428a9fafcbfeffb6dd80d0f42754369590634c8439be906024015b61010060405180830381865afa158015611380573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aa69190613ea5565b5f8281525f5160206140cf5f395f51905f526020819052604082206113c990846130e0565b949350505050565b5f9182525f51602061412f5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f51602061408f5f395f51905f5261141e81612d07565b6001600160a01b0382166114705760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420726563697069656e74206164647265737360381b6044820152606401610b58565b6003546001600160a01b03908116908316036114c65760405162461bcd60e51b8152602060048201526015602482015274526563697069656e74206973207468652073616d6560581b6044820152606401610b58565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f4a9d367b1b0cd787be10021f1c55cb49c9f2302334e6df35c9621005eb2225149101610cb8565b5f51602061408f5f395f51905f5261153781612d07565b604051632c3c915760e01b8152600481018490525f905f5160206140af5f395f51905f5290632c3c91579060240160a060405180830381865afa158015611580573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a49190613ca2565b516001600160a01b0316036115e85760405162461bcd60e51b815260206004820152600a602482015269125b9d985b1a59081a5960b21b6044820152606401610b58565b5f83815260046020908152604091829020805460ff19168515159081179091558251868152918201527f676b1079af31b4aee37f3d49ff7a40a6498b7506e0705b0ab84deb2be5688b509101610cb8565b5f51602061410f5f395f51905f5261165081612d07565b5f8381526004602052604090205460ff166116a25760405162461bcd60e51b81526020600482015260126024820152711259081b9bdd081dda1a5d195b1a5cdd195960721b6044820152606401610b58565b604051632c3c915760e01b8152600481018490525f905f5160206140af5f395f51905f5290632c3c91579060240160a060405180830381865afa1580156116eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061170f9190613ca2565b6020808201516001600160a01b039081165f908152600690925260409091205491925016156117b8576020808201516001600160a01b039081165f9081526006909252604091829020546003549251638720316d60e01b815290821692638720316d92611786928692899216903090600401613f2f565b5f604051808303815f87803b15801561179d575f5ffd5b505af11580156117af573d5f5f3e3d5ffd5b50505050611827565b600354604051638720316d60e01b81525f5160206140af5f395f51905f5291638720316d916117f991859188916001600160a01b0316903090600401613f2f565b5f604051808303815f87803b158015611810575f5ffd5b505af1158015611822573d5f5f3e3d5ffd5b505050505b60035461183e9085906001600160a01b0316611065565b610b965760405162461bcd60e51b815260206004820152603460248201527f506f736974696f6e206973206e6f74206865616c7468792061667465722077696044820152731d1a191c985dda5b99c818dbdb1b185d195c985b60621b6064820152608401610b58565b5f8181525f5160206140cf5f395f51905f52602081905260409091206060919061105e906130eb565b5f51602061410f5f395f51905f526118e781612d07565b6040516326421cdf60e11b8152600481018390525f9073db57a53c428a9fafcbfeffb6dd80d0f42754369590634c8439be9060240161010060405180830381865afa158015611938573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195c9190613ea5565b90508060a001516119af5760405162461bcd60e51b815260206004820152601e60248201527f52657175657374207769746864726177206e6f7420636c61696d61626c6500006044820152606401610b58565b6040516370a0823160e01b81523060048201525f90735a110fc00474038f6c02e89c707d638602ea44b5906370a0823190602401602060405180830381865afa1580156119fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a229190613c7b565b6040805160018082528183019092529192505f91906020808301908036833701905050905084815f81518110611a5a57611a5a613f63565b602090810291909101015260405163eb9259ef60e01b815273db57a53c428a9fafcbfeffb6dd80d0f4275436959063eb9259ef90611a9c90849060040161382c565b5f604051808303815f87803b158015611ab3575f5ffd5b505af1158015611ac5573d5f5f3e3d5ffd5b505f925050505b600254811015611b70578560028281548110611aea57611aea613f63565b905f5260205f20015403611b685760028054611b0890600190613f8b565b81548110611b1857611b18613f63565b905f5260205f20015460028281548110611b3457611b34613f63565b5f918252602090912001556002805480611b5057611b50613f9e565b600190038181905f5260205f20015f90559055611b70565b600101611acc565b506040516370a0823160e01b81523060048201525f908390735a110fc00474038f6c02e89c707d638602ea44b5906370a0823190602401602060405180830381865afa158015611bc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611be69190613c7b565b611bf09190613f8b565b60055490915060ff1615611c2a57600354611c2a90735a110fc00474038f6c02e89c707d638602ea44b5906001600160a01b031683612d14565b60208085015160408087015181518a8152938401929092528201527f1ecdefa24f2f261ad4e1403d5235935e9f810063a8e80a5bfeabce1ca4d81f57906060015b60405180910390a1505050505050565b5f51602061408f5f395f51905f52611c9281612d07565b60055482151560ff909116151503611cec5760405162461bcd60e51b815260206004820152601b60248201527f5472616e7366657220737769746368206973207468652073616d6500000000006044820152606401610b58565b6005805460ff19168315159081179091556040519081527fef051b5eea538c8171ad7fbaa03fad46745290c5d02c163e0837e16805818a709060200160405180910390a15050565b5f51602061408f5f395f51905f52611d4b81612d07565b6001600160a01b038316611d995760405162461bcd60e51b8152602060048201526015602482015274496e76616c696420746f6b656e206164647265737360581b6044820152606401610b58565b6001600160a01b038216611def5760405162461bcd60e51b815260206004820152601860248201527f496e76616c69642070726f7669646572206164647265737300000000000000006044820152606401610b58565b6001600160a01b038381165f90815260066020526040902054818416911603611e515760405162461bcd60e51b815260206004820152601460248201527350726f7669646572206973207468652073616d6560601b6044820152606401610b58565b6001600160a01b038381165f8181526006602090815260409182902080548786166001600160a01b0319821681179092558351948552909416908301819052908201929092527f775accb3a3b5697bd8f186bb6feb38e0828d3bb2c31f4c82d6e7806ba0eb52a69060600160405180910390a150505050565b5f51602061410f5f395f51905f52611ee181612d07565b6040516326421cdf60e11b8152600481018390525f9073c271fc70dd9e678ac1ab632f797894fe4be2c34590634c8439be9060240161010060405180830381865afa158015611f32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f569190613ea5565b90508060a00151611fb55760405162461bcd60e51b815260206004820152602360248201527f555344542077697468647261772072657175657374206e6f7420636c61696d61604482015262626c6560e81b6064820152608401610b58565b6040516370a0823160e01b81523060048201525f907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa158015612004573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120289190613c7b565b6040805160018082528183019092529192505f91906020808301908036833701905050905084815f8151811061206057612060613f63565b602090810291909101015260405163eb9259ef60e01b815273c271fc70dd9e678ac1ab632f797894fe4be2c3459063eb9259ef906120a290849060040161382c565b5f604051808303815f87803b1580156120b9575f5ffd5b505af11580156120cb573d5f5f3e3d5ffd5b505f925050505b6001548110156121755785600182815481106120f0576120f0613f63565b905f5260205f2001540361216d576001805461210d908290613f8b565b8154811061211d5761211d613f63565b905f5260205f2001546001828154811061213957612139613f63565b5f91825260209091200155600180548061215557612155613f9e565b600190038181905f5260205f20015f90559055612175565b6001016120d2565b506040516370a0823160e01b81523060048201525f9083907355d398326f99059ff775485246999027b3197955906370a0823190602401602060405180830381865afa1580156121c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121eb9190613c7b565b6121f59190613f8b565b60055490915060ff161561222f5760035461222f907355d398326f99059ff775485246999027b3197955906001600160a01b031683612d14565b60208085015160408087015181518a8152938401929092528201527f0ea10e23dff1b9e75f8633091f863ee6aebe302cfff044e0bb68d2d965b6082f90606001611c6b565b61227c61379b565b6040516326421cdf60e11b81526004810183905273c271fc70dd9e678ac1ab632f797894fe4be2c34590634c8439be90602401611364565b5f8181525f5160206140cf5f395f51905f5260208190526040822061105e906130f7565b6122e182610aac565b6122ea81612d07565b610b968383612db5565b5f51602061410f5f395f51905f5261230b81612d07565b5f8481526004602052604090205460ff1661235d5760405162461bcd60e51b81526020600482015260126024820152711259081b9bdd081dda1a5d195b1a5cdd195960721b6044820152606401610b58565b604051632c3c915760e01b8152600481018590525f905f5160206140af5f395f51905f5290632c3c91579060240160a060405180830381865afa1580156123a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ca9190613ca2565b80519091506123f1906001600160a01b03165f5160206140af5f395f51905f525f19612dee565b600354604080515f815260208101918290526320b76e8160e01b9091525f5160206140af5f395f51905f52916320b76e8191612442918591899189916001600160a01b039091169060248101613fb2565b60408051808303815f875af115801561245d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124819190613ff9565b505080516124a6906001600160a01b03165f5160206140af5f395f51905f525f613100565b5050505050565b5f51602061410f5f395f51905f526124c481612d07565b5f82116124e35760405162461bcd60e51b8152600401610b5890613c44565b612516735a110fc00474038f6c02e89c707d638602ea44b573c271fc70dd9e678ac1ab632f797894fe4be2c34584612dee565b60405163745400c960e01b81526004810183905273c271fc70dd9e678ac1ab632f797894fe4be2c3459063745400c9906024015f604051808303815f87803b158015612560575f5ffd5b505af1158015612572573d5f5f3e3d5ffd5b505050505f73c271fc70dd9e678ac1ab632f797894fe4be2c3456001600160a01b031663b22ccd766040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb9190613c7b565b6001805480820182555f919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60181905560408051828152602081018690529192507f3f7da1da47c29d74fc391dd453ff2b67e345a0853810648a7884df9bd9ecc5ca9101610cb8565b5f51602061410f5f395f51905f5261266e81612d07565b6001600160a01b0383165f9081526007602052604090205460ff166126cd5760405162461bcd60e51b815260206004820152601560248201527415985d5b1d081b9bdd081dda1a5d195b1a5cdd1959605a1b6044820152606401610b58565b5f82116126ec5760405162461bcd60e51b8152600401610b5890613c44565b600354604051632d182be560e21b8152600481018490523060248201526001600160a01b0391821660448201529084169063b460af94906064016020604051808303815f875af1158015612742573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b969190613c7b565b60606002805480602002602001604051908101604052809291908181526020018280548015610b1857602002820191905f5260205f2090815481526020019060010190808311610b04575050505050905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156127ff5750825b90505f8267ffffffffffffffff16600114801561281b5750303b155b905081158015612829575080155b156128475760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561287157845460ff60401b1916600160401b1785555b6001600160a01b038a166128bf5760405162461bcd60e51b8152602060048201526015602482015274496e76616c69642061646d696e206164647265737360581b6044820152606401610b58565b6001600160a01b0389166129155760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206d616e6167657220616464726573730000000000000000006044820152606401610b58565b6001600160a01b0388166129615760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420626f74206164647265737360681b6044820152606401610b58565b6001600160a01b0387166129b35760405162461bcd60e51b8152602060048201526019602482015278496e76616c696420726563697069656e74206164647265737360381b6044820152606401610b58565b6127108610156129fe5760405162461bcd60e51b8152602060048201526016602482015275496e76616c6964206d696e207377617020726174696f60501b6044820152606401610b58565b612a0661318f565b612a0e61318f565b612a185f8b612d73565b50612a305f51602061408f5f395f51905f528a612d73565b50612a485f51602061410f5f395f51905f5289612d73565b50600380546001600160a01b0319166001600160a01b038916908117909155604080515f815260208101929092527f4a9d367b1b0cd787be10021f1c55cb49c9f2302334e6df35c9621005eb222514910160405180910390a15f86815560408051918252602082018890527f9e1710ec680d824e76306b168d5a9e428f2071f6a7b2431eac1788195cc2bf19910160405180910390a18315612b2457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f51602061410f5f395f51905f52612b4781612d07565b5f6127105f5484612b58919061401b565b612b629190614046565b9050612b977355d398326f99059ff775485246999027b319795573176f274335c8b5fd5ec5e8274d0cf36b08e44a5785612dee565b604051630b68372160e31b81525f600482015260016024820152604481018490526064810182905273176f274335c8b5fd5ec5e8274d0cf36b08e44a5790635b41b908906084015b5f604051808303815f87803b158015612bf6575f5ffd5b505af1158015612c08573d5f5f3e3d5ffd5b50505050505050565b60028181548110611318575f80fd5b5f51602061410f5f395f51905f52612c3781612d07565b5f6127105f5484612c48919061401b565b612c529190614046565b9050612c87735a110fc00474038f6c02e89c707d638602ea44b573176f274335c8b5fd5ec5e8274d0cf36b08e44a5785612dee565b604051630b68372160e31b8152600160048201525f6024820152604481018490526064810182905273176f274335c8b5fd5ec5e8274d0cf36b08e44a5790635b41b90890608401612bdf565b5f6001600160e01b03198216637965db0b60e01b1480610aa657506301ffc9a760e01b6001600160e01b0319831614610aa6565b612d118133613197565b50565b6040516001600160a01b03838116602483015260448201839052610b7591859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506131d0565b5f5f5160206140cf5f395f51905f5281612d8d858561323c565b905080156113c9575f858152602083905260409020612dac90856132e4565b50949350505050565b5f5f5160206140cf5f395f51905f5281612dcf85856132f8565b905080156113c9575f858152602083905260409020612dac9085613371565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa158015612e3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e5f9190613c7b565b9050610b968484612e708585614065565b613100565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612efb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612eef5f5160206140ef5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15612f195760405163703e46dd60e11b815260040160405180910390fd5b565b5f610fba81612d07565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612f7f575060408051601f3d908101601f19168201909252612f7c91810190613c7b565b60015b612fa757604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b58565b5f5160206140ef5f395f51905f528114612fd757604051632a87526960e21b815260048101829052602401610b58565b610b758383613385565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f195760405163703e46dd60e11b815260040160405180910390fd5b5f838302815f1985870982811083820303915050805f0361305e5783828161305457613054614032565b049250505061105e565b8084116130755761307560038515026011186133da565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f61105e83836133eb565b60605f61105e83613411565b5f610aa6825490565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052613151848261346a565b610b96576040516001600160a01b0384811660248301525f604483015261318591869182169063095ea7b390606401612d41565b610b9684826131d0565b612f196134b3565b6131a182826113d1565b610fba5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b58565b5f5f60205f8451602086015f885af1806131ef576040513d5f823e3d81fd5b50505f513d91508115613206578060011415613213565b6001600160a01b0384163b155b15610b9657604051635274afe760e01b81526001600160a01b0385166004820152602401610b58565b5f5f51602061412f5f395f51905f5261325584846113d1565b6132d4575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561328a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610aa6565b5f915050610aa6565b5092915050565b5f61105e836001600160a01b0384166134fc565b5f5f51602061412f5f395f51905f5261331184846113d1565b156132d4575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610aa6565b5f61105e836001600160a01b038416613548565b61338e82613622565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156133d257610b758282613685565b610fba6136f7565b634e487b715f52806020526024601cfd5b5f825f01828154811061340057613400613f63565b905f5260205f200154905092915050565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561345e57602002820191905f5260205f20905b81548152602001906001019080831161344a575b50505050509050919050565b5f5f5f5f60205f8651602088015f8a5af192503d91505f5190508280156134a95750811561349b57806001146134a9565b5f866001600160a01b03163b115b9695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16612f1957604051631afcd79f60e31b815260040160405180910390fd5b5f81815260018301602052604081205461354157508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610aa6565b505f610aa6565b5f81815260018301602052604081205480156132d4575f61356a600183613f8b565b85549091505f9061357d90600190613f8b565b90508082146135dc575f865f01828154811061359b5761359b613f63565b905f5260205f200154905080875f0184815481106135bb576135bb613f63565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806135ed576135ed613f9e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610aa6565b806001600160a01b03163b5f0361365757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b58565b5f5160206140ef5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516136a19190614078565b5f60405180830381855af49150503d805f81146136d9576040519150601f19603f3d011682016040523d82523d5f602084013e6136de565b606091505b50915091506136ee858383613716565b95945050505050565b3415612f195760405163b398979f60e01b815260040160405180910390fd5b60608261372b5761372682613772565b61105e565b815115801561374257506001600160a01b0384163b155b1561376b57604051639996b31560e01b81526001600160a01b0385166004820152602401610b58565b508061105e565b8051156137825780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6040518061010001604052805f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f151581526020015f6001600160a01b031681526020015f151581525090565b5f602082840312156137fe575f5ffd5b81356001600160e01b03198116811461105e575f5ffd5b5f60208284031215613825575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b81811015613863578351835260209384019390920191600101613845565b509095945050505050565b6001600160a01b0381168114612d11575f5ffd5b5f5f60408385031215613893575f5ffd5b823561389e8161386e565b946020939093013593505050565b5f5f604083850312156138bd575f5ffd5b8235915060208301356138cf8161386e565b809150509250929050565b5f602082840312156138ea575f5ffd5b813561105e8161386e565b8015158114612d11575f5ffd5b5f5f60408385031215613913575f5ffd5b823561391e8161386e565b915060208301356138cf816138f5565b634e487b7160e01b5f52604160045260245ffd5b604051610100810167ffffffffffffffff811182821017156139665761396661392e565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156139955761399561392e565b604052919050565b5f5f604083850312156139ae575f5ffd5b82356139b98161386e565b9150602083013567ffffffffffffffff8111156139d4575f5ffd5b8301601f810185136139e4575f5ffd5b803567ffffffffffffffff8111156139fe576139fe61392e565b613a11601f8201601f191660200161396c565b818152866020838501011115613a25575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f60608486031215613a56575f5ffd5b505081359360208301359350604090920135919050565b5f6101008201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a0830151151560a083015260018060a01b0360c08401511660c083015260e08301516132dd60e084018215159052565b5f5f60408385031215613aeb575f5ffd5b50508035926020909101359150565b5f5f60408385031215613b0b575f5ffd5b8235915060208301356138cf816138f5565b602080825282518282018190525f918401906040840190835b818110156138635783516001600160a01b0316835260209384019390920191600101613b36565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61105e6020830184613b5d565b5f60208284031215613bad575f5ffd5b813561105e816138f5565b5f5f60408385031215613bc9575f5ffd5b8235613bd48161386e565b915060208301356138cf8161386e565b5f5f5f5f5f60a08688031215613bf8575f5ffd5b8535613c038161386e565b94506020860135613c138161386e565b93506040860135613c238161386e565b92506060860135613c338161386e565b949793965091946080013592915050565b6020808252601d908201527f416d6f756e74206d7573742062652067726561746572207468616e2030000000604082015260600190565b5f60208284031215613c8b575f5ffd5b5051919050565b8051613c9d8161386e565b919050565b5f60a0828403128015613cb3575f5ffd5b5060405160a0810167ffffffffffffffff81118282101715613cd757613cd761392e565b6040528251613ce58161386e565b81526020830151613cf58161386e565b60208201526040830151613d088161386e565b60408201526060830151613d1b8161386e565b60608201526080928301519281019290925250919050565b80516001600160a01b03908116835260208083015182169084015260408083015182169084015260608083015190911690830152608090810151910152565b60a08101610aa68284613d33565b80516001600160801b0381168114613c9d575f5ffd5b5f6060828403128015613da7575f5ffd5b506040516060810167ffffffffffffffff81118282101715613dcb57613dcb61392e565b60405282518152613dde60208401613d80565b6020820152613def60408401613d80565b60408201529392505050565b5f60c0828403128015613e0c575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715613e3057613e3061392e565b604052613e3c83613d80565b8152613e4a60208401613d80565b6020820152613e5b60408401613d80565b6040820152613e6c60608401613d80565b6060820152613e7d60808401613d80565b6080820152613e8e60a08401613d80565b60a08201529392505050565b8051613c9d816138f5565b5f610100828403128015613eb7575f5ffd5b50613ec0613942565b8251613ecb8161386e565b815260208381015190820152604080840151908201526060808401519082015260808084015190820152613f0160a08401613e9a565b60a0820152613f1260c08401613c92565b60c0820152613f2360e08401613e9a565b60e08201529392505050565b6101008101613f3e8287613d33565b60a08201949094526001600160a01b0392831660c0820152911660e090910152919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610aa657610aa6613f77565b634e487b7160e01b5f52603160045260245ffd5b613fbc8187613d33565b8460a08201528360c082015260018060a01b03831660e08201526101206101008201525f613fee610120830184613b5d565b979650505050505050565b5f5f6040838503121561400a575f5ffd5b505080516020909101519092909150565b8082028115828204841417610aa657610aa6613f77565b634e487b7160e01b5f52601260045260245ffd5b5f8261406057634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610aa657610aa6613f77565b5f82518060208501845e5f92019182525091905056feaf290d8680820aad922855f39b306097b20e28774d6c1ad35a20325630c3a02c0000000000000000000000008f73b65b4caaf64fba2af91cc5d4a2a1318e5d8cc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8fe94c374ec92811fc20be7dcfaebd09fc0de5127d6ad0a08f1ae166a58b1d6402dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a264697066735822122075013a859393d911cfcbfa6103a2417d7045b821a301da848e474f4d01ccc6a964736f6c634300081c0033