0 txs
0 calls
constructor
No constructor.
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (uint256)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256 result)
asset
viewfunction asset() view returns (address)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256 result)
claimableDepositRequest
viewfunction claimableDepositRequest(address controller) view returns (uint256)
claimableRedeemRequest
viewfunction claimableRedeemRequest(address controller) view returns (uint256)
convertToAssets
viewfunction convertToAssets(uint256 shares) view returns (uint256 assets)
convertToShares
viewfunction convertToShares(uint256 assets) view returns (uint256 shares)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32 result)
DST_CHAINS
viewfunction DST_CHAINS(uint256) view returns (uint64)
dustThreshold
viewfunction dustThreshold() view returns (uint256)
EMERGENCY_ADMIN_ROLE
viewfunction EMERGENCY_ADMIN_ROLE() view returns (uint256)
emergencyShutdown
viewfunction emergencyShutdown() view returns (bool)
gateway
viewfunction gateway() view returns (address)
getVault
viewfunction getVault(uint256 superformId) view returns (tuple vault)
hasAllRoles
viewfunction hasAllRoles(address user, uint256 roles) view returns (bool)
hasAnyRole
viewfunction hasAnyRole(address user, uint256 roles) view returns (bool)
hurdleRate
viewfunction hurdleRate() view returns (uint256)
isOperator
viewfunction isOperator(address controller, address operator) view returns (bool)
isVaultListed
viewfunction isVaultListed(address vaultAddress) view returns (bool)
isVaultListed
viewfunction isVaultListed(uint256 superformId) view returns (bool)
lastFeesCharged
viewfunction lastFeesCharged() view returns (uint256)
lastRedeem
viewfunction lastRedeem(address controller) view returns (uint256)
lastReport
viewfunction lastReport() view returns (uint256)
localWithdrawalQueue
viewfunction localWithdrawalQueue(uint256) view returns (uint256)
managementFee
viewfunction managementFee() view returns (uint16)
managementFeeExempt
viewfunction managementFeeExempt(address controller) view returns (uint256)
MANAGER_ROLE
viewfunction MANAGER_ROLE() view returns (uint256)
MAX_BPS
viewfunction MAX_BPS() view returns (uint256)
MAX_TIME
viewfunction MAX_TIME() view returns (uint256)
maxDeposit
viewfunction maxDeposit(address to) view returns (uint256 assets)
maxMint
viewfunction maxMint(address to) view returns (uint256 shares)
maxRedeem
viewfunction maxRedeem(address owner) view returns (uint256 shares)
maxWithdraw
viewfunction maxWithdraw(address owner) view returns (uint256 assets)
N_CHAINS
viewfunction N_CHAINS() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256 result)
ORACLE_ROLE
viewfunction ORACLE_ROLE() view returns (uint256)
oracleFee
viewfunction oracleFee() view returns (uint16)
oracleFeeExempt
viewfunction oracleFeeExempt(address controller) view returns (uint256)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
pendingDepositRequest
viewfunction pendingDepositRequest(address controller) view returns (uint256)
pendingProcessedShares
viewfunction pendingProcessedShares(address controller) view returns (uint256)
pendingRedeemRequest
viewfunction pendingRedeemRequest(address controller) view returns (uint256)
performanceFee
viewfunction performanceFee() view returns (uint16)
performanceFeeExempt
viewfunction performanceFeeExempt(address controller) view returns (uint256)
positions
viewfunction positions(address) view returns (uint256 averageEntryPrice)
previewDeposit
purefunction previewDeposit(uint256 assets) pure returns (uint256 shares)
previewMint
purefunction previewMint(uint256 shares) pure returns (uint256 assets)
previewRedeem
purefunction previewRedeem(uint256 shares) pure returns (uint256 assets)
previewWithdraw
purefunction previewWithdraw(uint256 assets) pure returns (uint256 shares)
RELAYER_ROLE
viewfunction RELAYER_ROLE() view returns (uint256)
rolesOf
viewfunction rolesOf(address user) view returns (uint256 roles)
SECS_PER_YEAR
viewfunction SECS_PER_YEAR() view returns (uint256)
selectors
purefunction selectors() pure returns (bytes4[])
sharePrice
viewfunction sharePrice() view returns (uint256)
sharePriceWaterMark
viewfunction sharePriceWaterMark() view returns (uint256)
sharesLockTime
viewfunction sharesLockTime() view returns (uint24)
signerRelayer
viewfunction signerRelayer() view returns (address)
symbol
viewfunction symbol() view returns (string)
THIS_CHAIN_ID
viewfunction THIS_CHAIN_ID() view returns (uint64)
totalAssets
viewfunction totalAssets() view returns (uint256 assets)
totalDebt
viewfunction totalDebt() view returns (uint256 assets)
totalDeposits
viewfunction totalDeposits() view returns (uint256 assets)
totalIdle
viewfunction totalIdle() view returns (uint256 assets)
totalLocalAssets
viewfunction totalLocalAssets() view returns (uint256 assets)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
totalWithdrawableAssets
viewfunction totalWithdrawableAssets() view returns (uint256 assets)
totalXChainAssets
viewfunction totalXChainAssets() view returns (uint256 assets)
treasury
viewfunction treasury() view returns (address)
vaults
viewfunction vaults(uint256) view returns (uint32 chainId, uint256 superformId, address oracle, uint8 decimals, uint128 totalDebt, address vaultAddress)
WITHDRAWAL_QUEUE_SIZE
viewfunction WITHDRAWAL_QUEUE_SIZE() view returns (uint256)
xChainWithdrawalQueue
viewfunction xChainWithdrawalQueue(uint256) view returns (uint256)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
deposit
nonpayablefunction deposit(uint256 assets, address receiver, address controller) returns (uint256 shares)
deposit
nonpayablefunction deposit(uint256 assets, address receiver) returns (uint256 shares)
fulfillSettledRequest
nonpayablefunction fulfillSettledRequest(address controller, uint256 requestedAssets, uint256 fulfilledAssets)
grantRoles
payablefunction grantRoles(address user, uint256 roles) payable
mint
nonpayablefunction mint(uint256 shares, address receiver, address controller) returns (uint256 assets)
mint
nonpayablefunction mint(uint256 shares, address receiver) returns (uint256 assets)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
processRedeemRequest
payablefunction processRedeemRequest(tuple params) payable
redeem
nonpayablefunction redeem(uint256 shares, address to, address controller) returns (uint256 assets)
renounceOwnership
payablefunction renounceOwnership() payable
renounceRoles
payablefunction renounceRoles(uint256 roles) payable
requestDeposit
nonpayablefunction requestDeposit(uint256 assets, address controller, address owner) returns (uint256 requestId)
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
requestRedeem
nonpayablefunction requestRedeem(uint256 shares, address controller, address owner) returns (uint256 requestId)
revokeRoles
payablefunction revokeRoles(address user, uint256 roles) payable
setDustThreshold
nonpayablefunction setDustThreshold(uint256 _dustThreshold)
setOperator
nonpayablefunction setOperator(address operator, bool approved) returns (bool success)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
withdraw
nonpayablefunction withdraw(uint256 assets, address to, address controller) returns (uint256 shares)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
Deposit
event Deposit(address indexed by, address indexed owner, uint256 assets, uint256 shares)
DepositRequest
event DepositRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address source, uint256 assets)
FulfillDepositRequest
event FulfillDepositRequest(address indexed controller, uint256 assets, uint256 shares)
FulfillRedeemRequest
event FulfillRedeemRequest(address indexed controller, uint256 shares, uint256 assets)
FulfillSettledRequest
event FulfillSettledRequest(address indexed controller, uint256 shares, uint256 assets)
OperatorSet
event OperatorSet(address indexed controller, address indexed operator, bool approved)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
ProcessRedeemRequest
event ProcessRedeemRequest(address indexed controller, uint256 shares)
RedeemRequest
event RedeemRequest(address indexed controller, address indexed owner, uint256 indexed requestId, address source, uint256 shares)
RolesUpdated
event RolesUpdated(address indexed user, uint256 indexed roles)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
Withdraw
event Withdraw(address indexed by, address indexed to, address indexed owner, uint256 assets, uint256 shares)
errors
AllowanceOverflow
error AllowanceOverflow()
AllowanceUnderflow
error AllowanceUnderflow()
AlreadyInitialized
error AlreadyInitialized()
AssetsNotLiquidated
error AssetsNotLiquidated()
DepositMoreThanMax
error DepositMoreThanMax()
ExcessiveSharesRequested
error ExcessiveSharesRequested()
InsufficientAllowance
error InsufficientAllowance()
InsufficientAssets
error InsufficientAssets()
InsufficientAvailableAssets
error InsufficientAvailableAssets()
InsufficientBalance
error InsufficientBalance()
InvalidController
error InvalidController()
InvalidOperator
error InvalidOperator()
InvalidPermit
error InvalidPermit()
InvalidZeroAssets
error InvalidZeroAssets()
InvalidZeroShares
error InvalidZeroShares()
MintMoreThanMax
error MintMoreThanMax()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoHandoverRequest
error NoHandoverRequest()
PermitExpired
error PermitExpired()
RedeemMoreThanMax
error RedeemMoreThanMax()
ReentrantCall
error ReentrantCall()
SharesInProcess
error SharesInProcess()
StaleSharePrice
error StaleSharePrice()
TotalSupplyOverflow
error TotalSupplyOverflow()
Unauthorized
error Unauthorized()
WithdrawMoreThanMax
error WithdrawMoreThanMax()
creation bytecode
0x6080346101145760016005556202a30060075560e081016001600160401b0381118282101761010057604052600181526089602082015260386040820152600a6060820152612105608082015261a4b160a082015261a86a60c08201525f5b600181106100b757505f905f5b600381106100865782605255604051615b5190816101198239f35b81519192909160019160209161ffff16600685901b90811b6001600160401b0390911b19909116179301910161006b565b5f805b600481106100d05750605182015560010161005e565b835160209094019361ffff16600682901b90811b6001600160401b0390911b1990921691909117906001016100ba565b634e487b7160e01b5f52604160045260245ffd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806288d3e5146104a457806301afcf6f1461062a57806301e1d1141461062557806302ba28301461062057806306fdde031461061b57806307a2d13a1461061657806307e2cea514610611578063081d89111461060c578063095ea7b3146106075780630a28a47714610481578063116191b61461060257806318160ddd146105fd578063183a4f6e146105f85780631a8bdc95146105f35780631c10893f146105ee5780631cd64df4146105e957806323b872dd146105e457806325692962146105df578063262abe77146105da57806326949984146105d557806328998af0146105d05780632de94807146105cb5780632e2d2984146105c65780632e5f4701146105c1578063313ce567146105bc5780633403c2fc146105b75780633644e515146105b257806338d52e0f146105ad57806339378cc3146105a8578063402d267d146104f957806346497776146105a35780634a4ee7b11461059e5780634cdad506146104815780634f2a078514610599578063514e62fc1461059457806353dc1dd31461058f57806354d1f13d1461058a578063558a72971461058557806355f575101461058057806360e653891461057b57806361d027b3146105765780636c5868e3146105715780636e25b9781461056c5780636e553f65146105675780636e76fc8f1461056257806370a082311461055d578063715018a61461055857806375b238fc146105535780637d41c86e1461054e5780637d882097146105495780637ecebe00146105445780638297f4311461053f57806385b77f451461053a578063872697291461053557806387788782146105305780638c64ea4a1461052b5780638da5cb5b14610526578063926d7d7f146105215780639403b6341461051c57806394bf804d1461051757806395d89b41146105125780639aa7df941461050d578063a6f7f5d614610508578063a9059cbb14610503578063ad7e55ba146104fe578063aff947c4146104f9578063b3d7f6b914610481578063b460af94146104f4578063b6363cf2146104ef578063ba087652146104ea578063bbc5d53d146104e5578063bbe875de146104e0578063c0a9444c146104db578063c0d5f3c1146104d6578063c3535b52146104d1578063c3702989146104cc578063c46bb80e146104c7578063c63d75b6146104c2578063c6e6f592146104bd578063ce96cb77146104b8578063d351e0f6146104b3578063d45d189c146104ae578063d505accf146104a9578063d905777e146104a4578063da39b3e71461049f578063dd62ed3e1461049a578063e30ec4fa14610495578063e4128b7114610490578063e8462e8f1461048b578063ec87621c14610486578063ef8b30f714610481578063f04e283e1461047c578063f28d67c814610477578063f2fde38b14610472578063f480a76e1461046d578063f9cd3ceb14610468578063fc7b9c1814610463578063fd967f471461045e5763fee81cf414610459575f80fd5b6122d0565b6122b4565b612294565b612270565b612248565b612209565b6121d2565b612181565b610862565b612166565b612149565b61211d565b612103565b6120d8565b6120bf565b610651565b611f1e565b611ee5565b611dbf565b611d9a565b611d7c565b611d41565b611d01565b611cac565b611c8f565b611c75565b611c3a565b611bff565b611bc4565b611b2b565b611ae2565b611a1a565b610d0f565b6119db565b611967565b611943565b61191d565b61182e565b611802565b6116b1565b611696565b61166a565b6115e1565b6115bd565b61159a565b61149d565b611406565b6113d0565b611396565b611253565b611238565b6111ef565b6111b9565b61119e565b611172565b6110f2565b610fee565b610fc2565b610f9c565b610f61565b610eb0565b610e50565b610e14565b610dd0565b610d93565b610d67565b610d4a565b610cd4565b610cac565b610c1c565b610bf7565b610bdc565b610bb7565b610b9e565b610b40565b610b22565b610b05565b610aca565b610a81565b6109a3565b61095e565b6108f8565b6108de565b6108c4565b61089f565b610877565b6107f3565b6107d6565b6107bb565b61079d565b61076a565b6106fc565b6106e2565b6106ac565b6001600160a01b0381160361064057565b5f80fd5b359061064f8261062f565b565b346106405760203660031901126106405760206106906004356106738161062f565b6001600160a01b03165f9081526003602052604090206001015490565b604051908152f35b634e487b7160e01b5f52603260045260245ffd5b3461064057602036600319011261064057600435601e8110156106405760209060100154604051908152f35b5f91031261064057565b34610640575f3660031901126106405760206106906123dd565b34610640575f366003190112610640576020604051601e8152f35b91908251928382525f5b848110610741575050825f602080949584010152601f8019910116010190565b80602080928401015182828601015201610721565b906020610767928181520190610717565b90565b34610640575f366003190112610640576107996107856124a7565b604051918291602083526020830190610717565b0390f35b34610640576020366003190112610640576020610690600435612568565b34610640575f36600319011261064057602060405160048152f35b34610640575f366003190112610640576020604e54604051908152f35b34610640576040366003190112610640576004356108108161062f565b60243590602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b34610640576020366003190112610640575f80fd5b34610640575f36600319011261064057600d546040516001600160a01b039091168152602090f35b34610640575f3660031901126106405760206805345cdf77eb68f44c54604051908152f35b6020366003190112610640576108dc60043533613b13565b005b34610640575f366003190112610640576020610690612635565b6040366003190112610640576004356109108161062f565b6024359061091c613325565b638b78c6d8600c525f526020600c2090815417809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3005b346106405760403660031901126106405760206109996004356109808161062f565b602435918291638b78c6d8600c525f526020600c205490565b1614604051908152f35b34610640576060366003190112610640576004356109c08161062f565b6024356109cc8161062f565b604435908260601b33602052637f5e9f208117600c526034600c209081549160018301610a5d575b506387a211a2915017600c526020600c208054808411610a505783900390555f526020600c20818154019055602052600c5160601c9060018060a01b03165f80516020615afc833981519152602080a360405160018152602090f35b63f4d678b85f526004601cfd5b828511610a7457846387a211a2930390555f6109f4565b6313be252b5f526004601cfd5b5f3660031901126106405763389a75e1600c52335f526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d5f80a2005b3461064057602036600319011261064057600435610ae78161062f565b60018060a01b03165f526059602052602060405f2054604051908152f35b34610640575f366003190112610640576020600754604051908152f35b34610640575f3660031901126106405760206040516301e185588152f35b34610640576020366003190112610640576020610690600435610b628161062f565b638b78c6d8600c525f526020600c205490565b60609060031901126106405760043590602435610b918161062f565b906044356107678161062f565b34610640576020610690610bb136610b75565b916126db565b34610640575f36600319011261064057602062ffffff600a5460381c16604051908152f35b34610640575f36600319011261064057602060405160128152f35b34610640575f36600319011261064057602060ff600a5460501c166040519015158152f35b34610640575f3660031901126106405760a0610c366124a7565b60208151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f825260208201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc66040820152466060820152306080820152206040518091602082019082520390f35b34610640575f36600319011261064057600b546040516001600160a01b039091168152602090f35b3461064057602036600319011261064057600435610cf18161062f565b60018060a01b03165f52605a602052602060405f2054604051908152f35b3461064057602036600319011261064057600435610d2c8161062f565b60018060a01b03165f526002602052602060405f2054604051908152f35b34610640575f366003190112610640576020604f54604051908152f35b6040366003190112610640576108dc600435610d828161062f565b60243590610d8e613325565b613b13565b3461064057602036600319011261064057600435610db08161062f565b60018060a01b03165f526055602052602060405f20541515604051908152f35b34610640576040366003190112610640576020600435610def8161062f565b610e0960243591638b78c6d8600c525f526020600c205490565b161515604051908152f35b34610640576020366003190112610640576020610690600435610e368161062f565b6001600160a01b03165f9081526001602052604090205490565b5f3660031901126106405763389a75e1600c52335f525f6020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c925f80a2005b60243590811515820361064057565b3590811515820361064057565b3461064057604036600319011261064057600435610ecd8161062f565b610ed5610e94565b6001600160a01b03821691338314610f5257335f9081526004602090815260408083206001600160a01b039094168352929052209015159060ff1981541660ff83161790556040519081527fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa26760203392a360405160018152602090f35b63ccea9e6f60e01b5f5260045ffd5b3461064057602036600319011261064057600435610f7e8161062f565b60018060a01b03165f526008602052602060405f2054604051908152f35b34610640575f3660031901126106405760206001600160401b0360065416604051908152f35b34610640575f36600319011261064057600a5460405160589190911c6001600160a01b03168152602090f35b346106405760603660031901126106405760043561100b8161062f565b602435604435600d546001600160a01b031633036110a15761104d7f7ad08399cb89049cdff84476cd1cb63b635e67f6e1c63c1354a7581b93efbb50926127a9565b61108f60018060a01b03851694855f52605c6020526110708360405f2054613452565b6001600160a01b0382165f908152605c60205260409020558383613462565b604080519182526020820192909252a2005b6282b42960e81b5f5260045ffd5b60206040818301928281528451809452019201905f5b8181106110d25750505090565b82516001600160e01b0319168452602093840193909201916001016110c5565b34610640575f36600319011261064057604051611110608082612371565b6003815260208101606036823781511561116d576369a8f07b60e11b905280516001101561116d57636c5868e360e01b60408201526107999061116161115582612758565b6356bf2add60e11b9052565b604051918291826110af565b610698565b346106405760403660031901126106405760206106906004356024356111978161062f565b33916126db565b34610640575f36600319011261064057602060405160028152f35b34610640576020366003190112610640576004356111d68161062f565b6387a211a2600c525f52602080600c2054604051908152f35b5f36600319011261064057611202613325565b5f638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35f638b78c6d81955005b34610640575f36600319011261064057602060405160018152f35b346106405761126136610b75565b82919215611387576001600160a01b0381165f90815260046020908152604080832033845290915290205460ff161561137f57905b6387a211a28260601b17600c526020600c208054808311610a50575f947f1fdc681a13d8c5da54e301c7ce6542dcde4581e4725043fdab2db12ddc5745069284611371930390553086526020600c2084815401905583602052600c5160601c9460018060a01b031694855f80516020615afc833981519152602080a36001600160a01b0381165f9081526001602052604090206113369085905b546123d0565b6001600160a01b0382165f908152600160205260409020556040805133815260208101959095526001600160a01b0390911693918291820190565b0390a46040515f8152602090f35b503390611296565b635a870a2560e01b5f5260045ffd5b34610640575f366003190112610640576009546001600160801b0381169060801c81018091116113cb57602090604051908152f35b6123ac565b34610640576020366003190112610640576004356113ed8161062f565b6338377508600c525f52602080600c2054604051908152f35b34610640575f36600319011261064057604c54600b546040516337cef79160e01b81526001600160a01b0391821660048201529160209183916024918391165afa801561149857610799915f91611469575b506040519081529081906020820190565b61148b915060203d602011611491575b6114838183612371565b810190612392565b5f611458565b503d611479565b6123a1565b34610640576114ab36610b75565b91801561158b5760018060a01b03600b54169260205f6064601c826040519887606052306040523360601b602c526323b872dd60601b600c525af13d1560015f511417161561157e576113717fbb58420bb8ce44e11b84e214cc0de10ce5e7c24d0355b2815c3d758b514cae72915f958660605260405261153f846113308760018060a01b03165f525f60205260405f2090565b6001600160a01b0386165f908152602081905260409020556040805133815260208101959095526001600160a01b039182169590911693918291820190565b637939f4245f526004601cfd5b63eb2b582f60e01b5f5260045ffd5b34610640575f366003190112610640576020610690670de0b6b3a7640000612568565b34610640575f36600319011261064057602061ffff600a5460181c16604051908152f35b3461064057602036600319011261064057600480355f9081526054602090815260409182902080546001820154600283015460038401549390960154855163ffffffff9093168352938201526001600160a01b038086169482019490945260a094851c60ff1660608201526001600160801b03909116608082015291169181019190915260c090f35b34610640575f36600319011261064057638b78c6d819546040516001600160a01b039091168152602090f35b34610640575f36600319011261064057602060405160108152f35b34610640576020366003190112610640576004355f60a06040516116d48161231a565b82815282602082015282604082015282606082015282608082015201525f52605460205261079960405f2061179c61178c6004604051936117148561231a565b805463ffffffff1685526001810154602086015260028101546001600160a01b03811660408701526117579061174d9060a01c60ff1690565b60ff166060870152565b61177e61176e60038301546001600160801b031690565b6001600160801b03166080870152565b01546001600160a01b031690565b6001600160a01b031660a0830152565b6040519182918291909160a060c082019363ffffffff815116835260208101516020840152600180831b03604082015116604084015260ff60608201511660608401526001600160801b03608082015116608084015281600180821b0391015116910152565b346106405760403660031901126106405760206106906004356024356118278161062f565b3391612ec1565b34610640575f366003190112610640576040515f600f548060011c9060018116908115611913575b6020831082146118ff5782855260208501919081156118e65750600114611894575b6107998461188881860382612371565b60405191829182610756565b600f5f9081529250907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8025b8184106118d25750500161188882611878565b8054848401526020909301926001016118bf565b60ff191682525090151560051b01905061188882611878565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611856565b34610640575f3660031901126106405760206001600160801b0360095416604051908152f35b34610640575f36600319011261064057602061ffff600a5460081c16604051908152f35b34610640576040366003190112610640576004356119848161062f565b602435906387a211a2600c52335f526020600c208054808411610a505783900390555f526020600c20818154019055602052600c5160601c335f80516020615afc833981519152602080a360405160018152602090f35b3461064057602036600319011261064057600435638b78c6d8600c52335f5260016020600c20541615611a0d57605055005b6382b429005f526004601cfd5b3461064057611a2836610b75565b90611a4f611a4a8360018060a01b03165f526003602052600160405f20015490565b612568565b8311611aae57611aa292611a6283613334565b60018060a01b0383165f526003602052611a9c60405f20826020604051611a888161233a565b600184549485835201549182910152613b58565b90613652565b60405190815260209150f35b6324da507f60e21b5f5260045ffd5b604090600319011261064057600435611ad58161062f565b906024356107678161062f565b3461064057602060ff611b1f611af736611abd565b6001600160a01b039182165f9081526004865260408082209290931681526020919091522090565b54166040519015158152f35b3461064057611b3936610b75565b6001600160a01b0381165f908152600360205260409020600101549091908311611bb557611ba992611b6a83613334565b60018060a01b0383165f526003602052611ba460208260405f20604051611b908161233a565b600182549283835201549384910152612fc2565b613652565b50604051908152602090f35b63232b212d60e11b5f5260045ffd5b3461064057602036600319011261064057600435611be18161062f565b60018060a01b03165f52605c602052602060405f2054604051908152f35b3461064057602036600319011261064057600435611c1c8161062f565b60018060a01b03165f526058602052602060405f2054604051908152f35b3461064057602036600319011261064057600435611c578161062f565b60018060a01b03165f52605b602052602060405f2054604051908152f35b34610640575f36600319011261064057602061069061278d565b34610640575f366003190112610640576020604d54604051908152f35b3461064057602036600319011261064057600435611cc98161062f565b60018060a01b03165f525f602052602060405f2054604051908152f35b90600782101561116d5760188260021c6051019260031b1690565b34610640576020366003190112610640576004356007811015610640576001600160401b03611d31602092611ce6565b90549060031b1c16604051908152f35b3461064057602036600319011261064057600435611d5e8161062f565b60018060a01b03165f526002602052602061069060405f20546127a9565b346106405760203660031901126106405760206106906004356127a9565b34610640576020366003190112610640576020610690611a4a6004356106738161062f565b6020366003190112610640576004356001600160401b03811161064057806004019060c0600319823603011261064057611df7613637565b600260055414611ed857611ebd611ec7926002600555602483013580155f14611ece5750611eb1611e2c8235610e368161062f565b935b611ea5611e3a846127d5565b93611e99611e4b60448501836127df565b611e92611e76611e5e60648801866127df565b9460a4611e6e60848a01836127df565b9801906127df565b97611e7f612594565b9a8b526001600160a01b031660208b0152565b3690612951565b60408801523690612b18565b60608601523690612c56565b60808401523690612e01565b60a0820152613818565b6001600555005b611eb19093611e2e565b6337ed32e85f526004601cfd5b34610640575f36600319011261064057602060405160078152f35b6084359060ff8216820361064057565b359060ff8216820361064057565b346106405760e036600319011261064057600435611f3b8161062f565b602435611f478161062f565b606435604435611f55611f00565b9260a4359160c435611f656124a7565b60208151910120938542116120b25760c0966040519860018060a01b031697889560018060a01b03169965383775081901600e52865f526020600c2098895480997f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452602084019081528d604085017fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68152606086019b468d52608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988525252888a525260a082015220604e526042602c205f5260ff1660205260405260605260208060805f60015afa93853d51036120a5577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594602094019055856303faf4f960a51b176040526034602c2055a3005b63ddafbaef5f526004601cfd5b631a15a3cc5f526004601cfd5b346106405760206106906120d236610b75565b91612ec1565b34610640576120e636611abd565b602052637f5e9f20600c525f5260206034600c2054604051908152f35b34610640575f366003190112610640576020610690612f3f565b3461064057602036600319011261064057600435601e81101561064057602090602e0154604051908152f35b34610640575f366003190112610640576020605054604051908152f35b34610640575f36600319011261064057602060405160088152f35b6020366003190112610640576004356121998161062f565b6121a1613325565b63389a75e1600c52805f526020600c2090815442116121c5575f6108dc92556135fa565b636f5e88185f526004601cfd5b34610640576020366003190112610640576004355f526054602052602060018060a01b03600460405f200154161515604051908152f35b6020366003190112610640576004356122218161062f565b612229613325565b8060601b1561223b576108dc906135fa565b637448fbae5f526004601cfd5b34610640575f36600319011261064057600c546040516001600160a01b039091168152602090f35b34610640575f36600319011261064057602061ffff600a5460281c16604051908152f35b34610640575f36600319011261064057602060095460801c604051908152f35b34610640575f3660031901126106405760206040516127108152f35b34610640576020366003190112610640576004356122ed8161062f565b63389a75e1600c525f52602080600c2054604051908152f35b634e487b7160e01b5f52604160045260245ffd5b60c081019081106001600160401b0382111761233557604052565b612306565b604081019081106001600160401b0382111761233557604052565b61016081019081106001600160401b0382111761233557604052565b90601f801991011681019081106001600160401b0382111761233557604052565b90816020910312610640575190565b6040513d5f823e3d90fd5b634e487b7160e01b5f52601160045260245ffd5b906201518082018092116113cb57565b919082018092116113cb57565b600d546123fa906001600160a01b03165b6001600160a01b031690565b60405163f08c58a360e01b815290602082600481845afa918215611498575f92612482575b50602060049160405192838092631f4814f160e11b82525afa80156114985761076792612453925f92612461575b506123d0565b61245b61278d565b906123d0565b61247b91925060203d602011611491576114838183612371565b905f61244d565b600491925061249f602091823d8411611491576114838183612371565b92915061241f565b604051905f600e548060011c9160018216801561255e575b6020841081146118ff578386528592602084019190811561254557506001146124f0575b5061064f92500383612371565b600e5f90815291507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd5b84831061252e575061064f9350015f6124e3565b80548284015286935060209092019160010161251a565b60ff191682525061064f93151560051b0190505f6124e3565b92607f16926124bf565b6125706123dd565b90600182018092116113cb576107679160016805345cdf77eb68f44c540191612fc2565b6040519061064f60c083612371565b6040519061064f61020083612371565b6040519061064f61016083612371565b9061064f6040516125d38161231a565b835463ffffffff1681526001840154602082015260028401546001600160a01b038116604083015260a090811c60ff166060830152909384919061261990600490611757565b6001600160a01b0316910152565b5f1981146113cb5760010190565b600954600b546001600160801b03909116905f9081906001600160a01b03165b601e8303612664575b50505090565b909192601e84101561116d5761269061268b8560100154851c5f52605460205260405f2090565b6125c3565b60a08101516126a7906001600160a01b03166123ee565b156126d4576126cd9161245b84836126c16126c795613055565b90613187565b93612627565b9190612655565b509261265e565b91906126e682613334565b6001600160a01b0382165f8181526002602052604090205490939081116127325761272e935f52600260205261272860405f20826020604051611a888161233a565b90613381565b5090565b63b3c61a8360e01b5f5260045ffd5b6001600160401b0381116123355760051b60200190565b80516002101561116d5760600190565b805182101561116d5760209160051b010190565b60ff16604d81116113cb57600a0a90565b612795612635565b61279d612f3f565b81018091116113cb5790565b6805345cdf77eb68f44c5490600182018092116113cb576107679160016127ce6123dd565b0191612fc2565b356107678161062f565b90359060be1981360301821215610640570190565b9080601f8301121561064057813561280b81612741565b926128196040519485612371565b81845260208085019260051b82010192831161064057602001905b8282106128415750505090565b6020809161284e84611f10565b815201910190612834565b6001600160401b03811161233557601f01601f191660200190565b6001600160401b0381160361064057565b359061064f82612874565b919060c08382031261064057604051906128a98261231a565b819380356001600160401b0381116106405781019082601f83011215610640578135926128d584612859565b906128e36040519283612371565b84825260208585010111610640575f60208560a096828897018386013783010152845261291260208201610644565b602085015261292360408201610644565b604085015261293460608201611f10565b606085015261294560808201612885565b60808501520135910152565b919060c08382031261064057612965612594565b9280356001600160401b03811161064057826129829183016127f4565b8452602081013560208501526040810135604085015260608101356001600160401b0381116106405760a0926129b9918301612890565b60608501526129ca60808201610ea3565b6080850152013560a0830152565b9080601f830112156106405781356129ef81612741565b926129fd6040519485612371565b81845260208085019260051b82010192831161064057602001905b828210612a255750505090565b8135815260209182019101612a18565b9080601f83011215610640578135612a4c81612741565b92612a5a6040519485612371565b81845260208085019260051b820101918383116106405760208201905b838210612a8657505050505090565b81356001600160401b03811161064057602091612aa887848094880101612890565b815201910190612a77565b9080601f83011215610640578135612aca81612741565b92612ad86040519485612371565b81845260208085019260051b82010192831161064057602001905b828210612b005750505090565b60208091612b0d84610ea3565b815201910190612af3565b919060c08382031261064057612b2c612594565b9280356001600160401b0381116106405782612b499183016127f4565b845260208101356001600160401b0381116106405782612b6a9183016129d8565b602085015260408101356001600160401b0381116106405782612b8e9183016129d8565b604085015260608101356001600160401b0381116106405782612bb2918301612a35565b606085015260808101356001600160401b0381116106405760a0926129ca918301612ab3565b9080601f83011215610640578135612bef81612741565b92612bfd6040519485612371565b81845260208085019260051b820101918383116106405760208201905b838210612c2957505050505090565b81356001600160401b03811161064057602091612c4b878480948801016127f4565b815201910190612c1a565b919060c08382031261064057612c6a612594565b9280356001600160401b0381116106405782612b49918301612bd8565b9080601f83011215610640578135612c9e81612741565b92612cac6040519485612371565b81845260208085019260051b820101918383116106405760208201905b838210612cd857505050505090565b81356001600160401b03811161064057602091612cfa878480948801016129d8565b815201910190612cc9565b9080601f83011215610640578135612d1c81612741565b92612d2a6040519485612371565b81845260208085019260051b820101918383116106405760208201905b838210612d5657505050505090565b81356001600160401b03811161064057602091612d7887848094880101612a35565b815201910190612d47565b9080601f83011215610640578135612d9a81612741565b92612da86040519485612371565b81845260208085019260051b820101918383116106405760208201905b838210612dd457505050505090565b81356001600160401b03811161064057602091612df687848094880101612ab3565b815201910190612dc5565b919060c08382031261064057612e15612594565b9280356001600160401b0381116106405782612e32918301612bd8565b845260208101356001600160401b0381116106405782612e53918301612c87565b602085015260408101356001600160401b0381116106405782612e77918301612c87565b604085015260608101356001600160401b0381116106405782612e9b918301612d05565b606085015260808101356001600160401b0381116106405760a0926129ca918301612d83565b9190612ecc82613334565b60018060a01b03821692835f526002602052612eeb60405f20546127a9565b8111612f3057612f2b935f526002602052612f2660208260405f20604051612f128161233a565b600182549283835201549384910152613b58565b613381565b905090565b636a69595960e01b5f5260045ffd5b600b545f9081906001600160a01b03165b601e8203612f5d57505090565b9091601e83101561116d57612f8161268b84602e01545f52605460205260405f2090565b60a08101516001600160a01b031615612fbb5782816126c1612fa293613055565b81018091116113cb57612fb59092612627565b90612f50565b5091505090565b81810292918115828504821417830215612fdd575050900490565b82905f1981840985811086019003920990825f03831692818111156130485783900480600302600218808202600203028082026002030280820260020302808202600203028082026002030280910260020302936001848483030494805f0304019211900302170290565b63ae47f7025f526004601cfd5b805163ffffffff1663ffffffff6130836130776006546001600160401b031690565b6001600160401b031690565b9116036130f05760a001516130a2906123ee906001600160a01b031681565b6040516370a0823160e01b81523060048201529060209082908180602481015b03915afa908115611498575f916130d7575090565b610767915060203d602011611491576114838183612371565b600d546130c291602091829061310e906001600160a01b03166123ee565b910151604051627eeac760e11b8152306004820152602481019190915292839190829081906044820190565b9190826040910312610640576020825192015161076781612874565b818102929181159184041417156113cb57565b8115613173570490565b634e487b7160e01b5f52601260045260245ffd5b604081810151825160a0840151835163a6c0cacd60e01b815263ffffffff90921660048301526001600160a01b0390811660248301529586166044820152939492939283916064918391165afa9283156114985760606131f96132029261076796613207955f9161320d575b50613156565b93015160ff1690565b61277c565b90613169565b61322f915060403d604011613234575b6132278183612371565b81019061313a565b6131f3565b503d61321d565b6040808201516132a4949293929061325b906001600160a01b03166123ee565b845160a0860151845163a6c0cacd60e01b815263ffffffff90921660048301526001600160a01b0390811660248301529290921660448301529094859190829081906064820190565b03915afa8015611498575f935f916132f4575b506001600160401b036132ca91166123c0565b42116132e55761320260606131f96132079361076796613156565b6367fbea6760e01b5f5260045ffd5b6001600160401b0394506132ca915061331b9060403d604011613234576132278183612371565b94909491506132b7565b638b78c6d819543303611a0d57565b60018060a01b031680331415908161335d575b5061334e57565b6336abb4df60e11b5f5260045ffd5b5f90815260046020908152604080832033845290915281205460ff16159150613347565b6001600160a01b0384165f90815260026020526040902080548290038155600101805483900390556805345cdf77eb68f44c54909493919290808401908110613445576805345cdf77eb68f44c556387a211a2600c52805f526020600c2083815401905582602052600c5160601c5f5f80516020615afc833981519152602080a35f85815260208490526001600160a01b0391821692909116907fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d790604090a39190565b63e5cfe9575f526004601cfd5b9081039081111561076757505f90565b9060018060a01b03831692835f52600160205260405f20548084115f1461352357505f5b6001600160a01b0382165f9081526001602090815260408083209390935560039052208054838101929083106113cb579190556001600160a01b03165f9081526003602052604090206001019182548181018091116113cb577fc0379cead112188a28ca9da4d419c1265736a0ac35564bfe708086deeab60f34935561351e6040519283928360209093929193604081019481520152565b0390a2565b83810390811115613486576123ac565b6001600160a01b0383165f90815260016020526040902090929190548381039081116113cb576001600160a01b0383165f9081526001602090815260408083209390935560039052208054828101919082106113cb57556001600160a01b0382165f9081526003602052604090206001019182548481018091116113cb579092556040805193845260208401919091526001600160a01b03909116917fc0379cead112188a28ca9da4d419c1265736a0ac35564bfe708086deeab60f34918190810161351e565b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d81955565b638b78c6d8600c52335f5260106020600c20541615611a0d57565b6001600160a01b038085165f90815260036020908152604082208054859003815560010180548690039055600b546014879052603485905263a9059cbb60601b835294979693959490926044916010918491165af13d1560015f51141716156136fb575f603452825f528460205260018060a01b03169060018060a01b0316817ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db60405fa49190565b6390b8ec185f526004601cfd5b6040519061371760e083612371565b60e0368337565b6040519060e061372e8184612371565b6103c0835f5b8381106137415750505050565b6020906040516137518582612371565b843682378184015201613734565b6137676125a3565b9061377061371e565b825261377a61371e565b602083015261378761371e565b6040830152613794613708565b60608301525f60808301525f60a08301525f60c08301525f60e08301525f6101008301525f6101208301525f6101408301525f6101608301525f6101808301525f6101a08301525f6101c08301525f6101e0830152565b919082039182116113cb57565b906001600160801b03809116911603906001600160801b0382116113cb57565b61382061375f565b9060095461385861383d61384961383d846001600160801b031690565b6001600160801b031690565b92610100860193845260801c90565b9161012084019283526020810191613879610e36845160018060a01b031690565b80835111613b04578251845190916138b9916138b2906001600160a01b03165b6001600160a01b03165f908152605c6020526040902090565b54906137eb565b10613af5576138c88251612568565b9061014086019182526138d96123dd565b9160e0870192835280516138eb61278d565b10613ae6578161391c9161393893518151808210155f14613a47575050855160a08a01525160c08901525b51614c15565b6001600160801b03166001600160801b03196009541617600955565b61397f61396460c087019561391661391c6139538951614c15565b6009546001600160801b03166137f8565b6001600160801b036009549181199060801b16911617600955565b61399761398a6123dd565b91516080870151906137eb565b10613a38578151815160405190815261064f95613a32939092613a21926001600160a01b03909116907f1daeae2d963a51a0c9059cafccc84e380ca1f1762153d1f2172574311424f5d590602090a26139f860a082519401938451906137eb565b8551613a1890613a10906001600160a01b0316613899565b9182546123d0565b90555130614c3a565b51925191516001600160a01b031690565b91613533565b633c1a422f60e21b5f5260045ffd5b613a5192506137eb565b6080890152805180613ac9575b50613a6888613bd4565b613a7188613f79565b6101a0880151613aba575b6101c0880151613a8c575b613916565b613aa1613a9d6101e08a0151151590565b1590565b15613ab057613a878886614995565b613a87888661454d565b613ac488866141d5565b613a7c565b80613adb9160c08b0152855190613b7b565b60a08901525f613a5e565b6359f5886d60e11b5f5260045ffd5b632101e46560e01b5f5260045ffd5b63673d3a1b60e11b5f5260045ffd5b638b78c6d8600c525f526020600c2090815490811618809155600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe265f80a3565b929190613b66828286612fc2565b9309613b6e57565b9060010190811561304857565b6805345cdf77eb68f44c54600181018091116113cb576001610767930191612fc2565b60405190602e5f835b601e8210613bbe5750505061064f6103c083612371565b6001602081928554815201930191019091613ba7565b60405160105f825b601e8210613f0f57505050613bf36103c082612371565b600b546006546001600160401b031691906001600160a01b0316606084018360408601608087016020880161012089015f5b601e8103613c4b575b505050505050505050505f61064f91613c45613b9e565b90614c91565b613c55818a613f68565b5115613f0a57835115613f0a578686613c8361268b613c74858e613f68565b515f52605460205260405f2090565b8d613c978c613c9184613055565b8461323b565b90898d613cac8b518590818110908218021890565b938415613ee957613ce4613cdb613cc7885163ffffffff1690565b63ffffffff165f52605760205260405f2090565b54809951613f25565b5193613d0085613cfa8b60208b01519451613f25565b51613f68565b528b5110613efa5750613d1284613055565b898115613ee95793613d4584613cfa8a613d80968596613d3e613d959c9a613cfa85613d8c9e51613f25565b5251613f25565b52613d77613d7082613d6461383d60808801516001600160801b031690565b90818110908218021890565b8a516137eb565b89528a516137eb565b89525163ffffffff1690565b63ffffffff1690565b03613dcb575b90613dc691613dc0895191613dba613db38285613f25565b5160010190565b92613f25565b52612627565b613c25565b6101a08c018051158015908e81613edb575b5015613e21575060019052613dc691905b8c6001613dfc838c51613f25565b511015613e0d575b50909150613d9b565b6101e0613e1b910160019052565b8c613e04565b613e31575b5090613dc691613dee565b91908c5f938d5f905b8c60078310613e73575b505050613dc6948303613e5b575b50509091613e26565b613e6c915f6101c092520160019052565b8c5f613e52565b82613e85919895939496979851613f25565b5115159081613eb5575b50613ea45750600101918e919493928e613e3a565b915091613dc6949392948e8c613e44565b613ed191506001600160401b03165f52605760205260405f2090565b548214158f613e8f565b6101c001511590508e613ddd565b5050505050505050613dc690612627565b613f059084866159ef565b613d12565b613c2e565b6001602081928554815201930191019091613bdc565b90600781101561116d5760051b0190565b90613f4082612741565b613f4d6040519182612371565b8281528092613f5e601f1991612741565b0190602036910137565b90601e81101561116d5760051b0190565b613fa5613f8e6006546001600160401b031690565b6001600160401b03165f52605760205260405f2090565b549060608101613fb6838251613f25565b51156141d057806001613fcb85809451613f25565b5103614070575081614052613fea61010093602061406c960151613f25565b51519461402d61400b614001836040870151613f25565b5151928551613f25565b515196614025600461177e8a5f52605460205260405f2090565b90309161516a565b9561403c60e085015183613b7b565b61404b60a086019182516123d0565b9052614fd7565b60c081016140618582516123d0565b9052019182516123d0565b9052565b9061407b9151613f25565b5161408581613f36565b9061408f81613f36565b905f945f5b8281106140eb57505050916140dc6140bf61010093856140b761406c9751613f36565b903092615051565b9460c083016140cf8782516123d0565b905260e083015190613b7b565b61406160a083019182516123d0565b80828751906140f991613f25565b519061410491613f68565b51614117905f52605460205260405f2090565b600401546001600160a01b031661412e8287612768565b6001600160a01b039091169052808260208801519061414c91613f25565b519061415791613f68565b516141628286612768565b52808287519061417191613f25565b519061417c91613f68565b518183604089019982828c519061419291613f25565b519061419d91613f68565b516141a7916123d0565b9951906141b391613f25565b51906141be91613f68565b516141c891614fd7565b600101614094565b505050565b6141e6613a9d6101e0840151151590565b156142f2575f5b600781106141fa57505050565b61421961420682611ce6565b90546001600160401b039160031b1c1690565b6001600160401b036142366130776006546001600160401b031690565b9116146142e95761424b816060850151613f25565b5161425b57600101915b916141ed565b61064f92816142db6142726142066142e195611ce6565b61428d816001600160401b03165f52605760205260405f2090565b549361429a848251613f25565b5151966142ab856020840151613f25565b5151602082015189906142d39060409081906001600160a01b03169501519501978851613f25565b5151946154f4565b51613f25565b515190614fd7565b60010191614255565b5f9291925b60078110614306575b50509050565b61431261420682611ce6565b6001600160401b0361432f6130776006546001600160401b031690565b91161461444b5760608401614345828251613f25565b516143565750600101925b926142f7565b92614365614206839693611ce6565b90614387614374878551613f25565b51614380888851613f25565b5190615223565b916143a5614399886020870151613f25565b51614380898951613f25565b5f9590865b85518810156143fb576143f36001916143ec8a613cfa8e8c6142db60406143d28f8790612768565b519201916143e586613cfa868651613f25565b5190614fd7565b51906123d0565b9701966143aa565b959491939861443d919397509761438061444399614435816040606061442a60208c015160018060a01b031690565b9a01519a0151613f25565b519251613f25565b956153b4565b805f80614300565b60010192614350565b9061445e82612741565b61446b6040519182612371565b8281526020819361447e601f1991612741565b0191015f5b82811061448f57505050565b606082820152602001614483565b906144a782612741565b6144b46040519182612371565b82815280926144c5601f1991612741565b01905f5b8281106144d557505050565b6020906040516144e481612355565b606081526060838201526060604082015260608082015260606080820152606060a0820152606060c0820152606060e08201525f6101008201525f6101208201526060610140820152828285010152016144c9565b60405190614548602083612371565b5f8252565b91905f925f5b6060830151600782101561458d578161456b91613f25565b51614579575b600101614553565b93614585600191612627565b949050614571565b50509261459981614454565b6145a282613f36565b6145ab8361449d565b905f805b600781106148745750506145cb6145c585613f36565b94614454565b945f5b600781106145ea57505060a08061064f979801510151926156b3565b936060829697929893980197614601868a51613f25565b5115614861578589519061461491613f25565b5161461e90613f36565b988a8789519061462d91613f25565b518883519061463b91613f25565b5161464591615223565b809b8960208c01519061465791613f25565b518a85519061466591613f25565b5161466f91615223565b9060a08401938c85516020015161018082015161468b91612768565b518651604001516101808301516146a191612768565b51908751606001516101808401516146b891612768565b51928851608001519061018001516146cf91612768565b516020909401516001600160a01b0316956146e86125b3565b9788526020880152604087015260608601526080850152614707614539565b60a085015260c084015260e08301526001600160a01b03166101008201525f610120820152614734614539565b6101408201526101808a01519061474b828a612768565b526147569088612768565b50515161018089015161476891612768565b516101808901519061477a8286612768565b526147859084612768565b50868060208a01519061479791613f25565b519151906147a491613f25565b516147ae91615223565b610180880151906147bf8286612768565b526147ca9084612768565b505f5b895181101561483257808961482b6148248b61481e8f614813878f613cfa906147fb60019c61018096612768565b516142db60408901916143e586613cfa868651613f25565b519201518095612768565b516123d0565b918c612768565b52016147cd565b509398929750936001909695919661484e610180840151612627565b61018084015201905b90979291976145ce565b9398929750909594909360010190614857565b614886816060899b95969b0151613f25565b51614898575b600101979291976145af565b906148cb6001916148c66148ae61420686611ce6565b6148b88389612768565b906001600160401b03169052565b612627565b91905061488c565b906148dd82612741565b6148ea6040519182612371565b82815280926148fb601f1991612741565b01905f5b82811061490b57505050565b60209060405161491a81612355565b5f81525f838201525f60408201525f606082015260405161493a8161231a565b606081525f848201525f60408201525f60608201525f60808201525f60a08201526080820152606060a08201525f60c08201525f60e08201525f6101008201525f6101208201526060610140820152828285010152016148ff565b91905f925f5b606083015160078210156149d557816149b391613f25565b516149c1575b60010161499b565b936149cd600191612627565b9490506149b9565b5050926149e181614454565b906149eb81613f36565b946149f5826148d3565b915f805b60078110614bd0575050614a0c90613f36565b935f5b60078110614a2d5750509460a0608061064f96970151015192615894565b80614a3e6001926060850151613f25565b5115614bc95760408301614bb4614a56838351613f25565b515191610180860192614a6a84518c612768565b52614b9b614b8688614b7b8b8a614b53614a958b6020614a8b828651613f25565b5151940151613f25565b5151614b3c6080870196878d614ab2602083510151825190612768565b51614b066020614af7614af1614acf604088510151875190612768565b51956080614ae460608a510151835190612768565b5198510151905190612768565b51151590565b9501516001600160a01b031690565b95614b0f6125b3565b9889526020890152604088015260608701526080860152614b2e614539565b60a0860152151560c0850152565b5f60e08401526001600160a01b0316610100830152565b5f610120820152614b62614539565b610140820152614b7489518093612768565b528c612768565b505151855190612768565b51845190614b94828d612768565b528a612768565b506142e184614bab818951613f25565b51519251613f25565b614bbe8151612627565b905201905b90614a0f565b0190614bc3565b614bde816060890151613f25565b51614bec575b6001016149f9565b90614c0d816148c68b6148b8600195614c0761420689611ce6565b92612768565b919050614be4565b600160801b811015614c2d576001600160801b031690565b6335278d125f526004601cfd5b6387a211a2600c52805f526020600c2091825492838211610a5057815f94039055806805345cdf77eb68f44c54036805345cdf77eb68f44c55825260018060a01b03165f80516020615afc833981519152602083a3565b600b549192915f91906001600160a01b031691614cb66006546001600160401b031690565b946001600160401b038616915b601e8103614cd5575b50505050505050565b614cdf8183613f68565b5115614faa578580614f9b575b614f5d5760808401805115614f5757614d0b61268b613c748486613f68565b84614d1988613c9184613055565b91614d2c84518490818110908218021890565b938415614f4957614d44613cc7835163ffffffff1690565b549460608a0194614d56878751613f25565b51908b614d6d83613cfa8b60208a01519451613f25565b52835110614f38578a614d7f85613055565b8015614f26579280614db884613cfa8c604087614dfa9c9a614db0613d8c9d9b613cfa866020614dee9e0151613f25565b520151613f25565b528c614de5610120614ddb84613d6461383d60808b01516001600160801b031690565b92019182516137eb565b905282516137eb565b90525163ffffffff1690565b03614e1c575b51614e179291613dc090613dba613db38285613f25565b614cc3565b6101a0860180511515801580614f0f575b15614e725750614e17939291614e46613dc09260019052565b6001614e53848351613f25565b511015614e65575b9192935050614e00565b60016101e0890152614e5b565b614e86575b5090613dc0614e179392614e46565b5f805b60078110614ec0575b5091613dc0918493614e17969503614eaf575b5091929350614e77565b5f905260016101c08901525f614ea5565b614ecb818551613f25565b51151580614eea575b614ee057600101614e89565b9050613dc0614e92565b50614f068c6001600160401b03165f52605760205260405f2090565b54811415614ed4565b50614f21613a9d6101c08a0151151590565b614e2d565b505050505050505050614e1790612627565b8a614f448d84876159ef565b614d7f565b5050505050614e1790612627565b50614ccc565b50505092505050614f8d610160614ddb608084015f815191526101408501614f868282516137eb565b90526127a9565b90525f808080808080614ccc565b50608084015160505411614cec565b505050925050506080614fc8610140830151610100840151906137eb565b9101525f808080808080614ccc565b90815f5260546020526001600160801b03600360405f200154168110155f1461502e57506150045f614c15565b905f5260546020526001600160801b03600360405f200191166001600160801b0319825416179055565b61500490825f5260546020526001600160801b03600360405f2001541603614c15565b5f949391929190855b8151871015615162576001600160a01b036150758884612768565b51166150eb6150848988612768565b516020866150928c8a612768565b51600b549095906150ad9030906001600160a01b0316615ad6565b604051635d043b2960e11b815260048101959095523060248601526001600160a01b03909216604485015292939092849182905f9082906064820190565b03925af19182156114985761511c92615146575b50600b546151179030906001600160a01b0316615ad6565b6137eb565b9081106151375781018091116113cb5760019096019561505a565b6396d8043360e01b5f5260045ffd5b61515d9060203d8111611491576114838183612371565b6150ff565b955050505050565b600b5491926151c9926020929061518b9030906001600160a01b0316615ad6565b604051635d043b2960e11b815260048101969096523060248701526001600160a01b03909216604486015290939283919082905f9082906064820190565b03926001600160a01b03165af1801561149857615206575b50600b546151f99030906001600160a01b0316615ad6565b9081039081116113cb5790565b61521e9060203d602011611491576114838183612371565b6151e1565b919061522e81613f36565b925f5b82811061523d57505050565b8061524a60019284613f68565b516152558288612768565b5201615231565b90602080835192838152019201905f5b8181106152795750505090565b825184526020938401939092019160010161526c565b90602080835192838152019201905f5b8181106152ac5750505090565b825160ff1684526020938401939092019160010161529f565b9060a0806152dc845160c0855260c0850190610717565b93600180831b036020820151166020850152600180831b03604082015116604085015260ff60608201511660608501526001600160401b036080820151166080850152015191015290565b9080602083519182815201916020808360051b8301019401925f915b83831061535257505050505090565b9091929394602080615370600193601f1986820301875289516152c5565b97019301930191939290615343565b90602080835192838152019201905f5b81811061539c5750505090565b8251151584526020938401939092019160010161538f565b9091939560018060a01b03600d54169560a0880190815195883b1561064057604051998a988997889763721c807960e01b89526001600160401b031660048901526024880160e0905260e4880161540a9161525c565b87810360031901604489015261541f9161525c565b6001600160a01b039092166064870152858203600319016084870152805160c080845261544f919084019061528f565b60208201519083810360208501526154669161525c565b604082015190838103604085015261547d9161525c565b606082015190838103606085015261549491615327565b90608001519082810360808401526154ab9161537f565b92519060a0015260a48401526003198382030160c48401526154cc9161525c565b03915a945f95f18015611498576154e05750565b806154ee5f61064f93612371565b806106d8565b919492909260018060a01b03600d54169260a0860195865192853b15610640575f976001600160401b03956040519a8b998a9889976307d5423b60e11b89521660048801526024870152604486015260018060a01b0316606485015260c06084850152608061559f615573855160c060c489015261018488019061528f565b602086015160e48801526040860151610104880152606086015187820360c319016101248901526152c5565b93015115156101448501525161016484015260a483015203925af18015611498576154e05750565b9080602083519182815201916020808360051b8301019401925f915b8383106155f257505050505090565b9091929394602080615610600193601f19868203018752895161528f565b970193019301919392906155e3565b90602080835192838152019201905f5b81811061563c5750505090565b82516001600160401b031684526020938401939092019160010161562f565b9080602083519182815201916020808360051b8301019401925f915b83831061568657505050505090565b90919293946020806156a4600193601f19868203018752895161525c565b97019301930191939290615677565b9491909360018060a01b03600d541694853b156106405760405163db3e958d60e01b815260a0600482015296879594939291615709916156f79060a48901906155c7565b8781036003190160248901529061561f565b600319868203016044870152825180825260208201916020808360051b8301019501925f915b83831061577d57505050505061576c859361575a5f989694869460031986830301606487015261525c565b8381036003190160848501529061565b565b03925af18015611498576154e05750565b91939697985091939460208061587f600193601f198682030187528a519061014061584461583261582061580e6157fc6157ea6157d86157c88a516101608b526101608b019061525c565b8c8b01518a82038e8c015261525c565b60408a015189820360408b015261525c565b606089015188820360608a015261525c565b60808801518782036080890152615327565b60a087015186820360a0880152610717565b60c086015185820360c087015261537f565b60e085015184820360e086015261537f565b610100808501516001600160a01b031690840152925b610120818101516001600160a01b031690840152015190610140818403910152610717565b98019301930190928a9897969594929361572f565b600d5490946001600160a01b03909116939291843b156106405760405163190a21a960e11b8152608060048201529586949392916158ec916158da9060848801906155c7565b8681036003190160248801529061561f565b600319858203016044860152825180825260208201916020808360051b8301019501925f915b838310615939575050505050918361576c81935f979560031984830301606485015261525c565b91939697509193946020806159db600193601f198682030187528a519081518152838201518482015260408201516040820152606082015160608201526101406159a9615997608085015161016060808601526101608501906152c5565b60a085015184820360a0860152610717565b60c0808501511515908401529260e081810151151590840152610100818101516001600160a01b03169084015261585a565b980193019301909289979695949293615912565b6040818101519293615a5693615a0d906001600160a01b03166123ee565b835160a0850151845163a6c0cacd60e01b815263ffffffff90921660048301526001600160a01b0390811660248301529290921660448301529093849190829081906064820190565b03915afa8015611498575f925f91615aa5575b506001600160401b03615a7c91166123c0565b42116106405761076792615a9a6132026060615aa094015160ff1690565b90613156565b613169565b6001600160401b039350615a7c9150615acc9060403d604011613234576132278183612371565b9390939150615a69565b602460106020939284936014526370a0823160601b5f525afa601f3d1116602051029056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205f001058ed1b9ead33b66fa52934d9470874f0ed632a7d325b71ae34dc29a84564736f6c634300081a0033