0 txs
11 calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
approvedCollateral
viewfunction approvedCollateral() view returns (address)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
dataStore
viewfunction dataStore() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
depositCount
viewfunction depositCount() view returns (uint256)
depositFee
viewfunction depositFee() view returns (uint256)
depositManager
viewfunction depositManager() view returns (address)
exchangeRouter
viewfunction exchangeRouter() view returns (address)
feeDebt
viewfunction feeDebt() view returns (uint256)
freeDeposited18
viewfunction freeDeposited18() view returns (uint256)
getApprovedCollateralToken
viewfunction getApprovedCollateralToken() view returns (address)
getAUM
viewfunction getAUM() view returns (uint256 aum, uint256 supplyVirtual)
getExchangeRouter
viewfunction getExchangeRouter() view returns (address)
getLPTokenAskPrice
viewfunction getLPTokenAskPrice(uint256 tradingFee, uint256 gasFee) view returns (uint256 askPrice)
getLPTokenBidPrice
viewfunction getLPTokenBidPrice(uint256 tradingFee, uint256 gasFee) view returns (uint256 bidPrice)
getNAVPrice
viewfunction getNAVPrice() view returns (uint256)
getOpenedPositionsInfo
viewfunction getOpenedPositionsInfo() view returns (tuple[] openedPositions)
getOrderHandler
viewfunction getOrderHandler() view returns (address)
getOrderVault
viewfunction getOrderVault() view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUnderlyingAsset
viewfunction getUnderlyingAsset() view returns (address)
getWatermark
viewfunction getWatermark() view returns (uint256 watermark)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastMgmtFeeAccrual
viewfunction lastMgmtFeeAccrual() view returns (uint256)
managementFee
viewfunction managementFee() view returns (uint256)
mgmtFeeLPVirtual
viewfunction mgmtFeeLPVirtual() view returns (uint256)
name
viewfunction name() view returns (string)
orderHandler
viewfunction orderHandler() view returns (address)
orderVault
viewfunction orderVault() view returns (address)
performanceFee
viewfunction performanceFee() view returns (uint256)
platformFee
viewfunction platformFee() view returns (uint256)
platformTreasury
viewfunction platformTreasury() view returns (address)
reader
viewfunction reader() view returns (address)
receiverFee
viewfunction receiverFee() view returns (address)
reservedDeposited
viewfunction reservedDeposited() view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
totalDeposited
viewfunction totalDeposited() view returns (uint256)
totalExecutionFees
viewfunction totalExecutionFees() view returns (uint256)
totalSupply
viewfunction totalSupply() view returns (uint256)
underlyingAsset
viewfunction underlyingAsset() view returns (address)
watermarkDenominator
viewfunction watermarkDenominator() view returns (uint256)
watermarkNumerator
viewfunction watermarkNumerator() view returns (uint256)
withdrawalFee
viewfunction withdrawalFee() view returns (uint256)
withdrawalIntents
viewfunction withdrawalIntents(address, uint256) view returns (uint256 nonce, uint256 amountLP, uint256 tradingFee, uint256 gasFeeUsd, uint256 gasFeeETH, uint256 createdAt, bool exists, bool prepared)
withdrawalLocks
viewfunction withdrawalLocks(address, uint256) view returns (uint256 amountToBurn, uint256 clearAmountToWithdraw, uint256 realizedFee, uint256 platformFeeAmount, uint256 withdrawalFeeAmount, uint256 reserved)
withdrawNonce
viewfunction withdrawNonce(address) view returns (uint256)
accrueManagementFee
nonpayablefunction accrueManagementFee()
approve
nonpayablefunction approve(address spender, uint256 value) returns (bool)
claimManagementFee
nonpayablefunction claimManagementFee(uint256 amount)
consumeExecutionFee
nonpayablefunction consumeExecutionFee(uint256 amount)
createOrderThroughVault
nonpayablefunction createOrderThroughVault(tuple order)
deposit
payablefunction deposit(uint256 amount, uint256 tradingFee, uint256 gasFeeUsd, uint256 gasFeeETH) payable
finalizeWithdraw
nonpayablefunction finalizeWithdraw(address user, uint256 nonce)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(tuple _vaultData, address _underlyingAsset, address _vaultAssetManager, address _platformTreasury, uint256 _platformFee, address _depositManager, address _beManager, tuple _gmxContractData, address _defaultAdmin)
prepareWithdrawFor
nonpayablefunction prepareWithdrawFor(address user, uint256 nonce) returns (tuple lock)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
requestWithdraw
payablefunction requestWithdraw(uint256 amount, uint256 tradingFee, uint256 gasFeeUsd, uint256 gasFeeETH) payable
rescueFunds
nonpayablefunction rescueFunds(address token, address recipient, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setDepositManagerSC
nonpayablefunction setDepositManagerSC(address _depositManager)
setGMXContracts
nonpayablefunction setGMXContracts(tuple _GMXContractData)
setPlatformFee
nonpayablefunction setPlatformFee(uint256 _platformFee)
setPlatformTreasury
nonpayablefunction setPlatformTreasury(address _platformTreasury)
setReceiverFee
nonpayablefunction setReceiverFee(address _receiverFee)
setUnderlyingAsset
nonpayablefunction setUnderlyingAsset(address _underlyingAsset)
setVaultNaming
nonpayablefunction setVaultNaming(string _name, string _symbol)
syncExternalInflow
nonpayablefunction syncExternalInflow() returns (uint256 accounted18)
transfer
nonpayablefunction transfer(address to, uint256 value) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 value) returns (bool)
vaultTopUp
nonpayablefunction vaultTopUp(uint256 amount6)
withdrawToDepositManager
nonpayablefunction withdrawToDepositManager(uint256 amount18)
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
AssetUpdated
event AssetUpdated(address indexed asset, address indexed admin)
Deposited
event Deposited(address indexed depositor, uint256 amountUSDT, uint256 amountToMint, uint256 flatFee, uint256 tradingFee, uint256 executionFee)
DepositManagerSCSet
event DepositManagerSCSet(address indexed depositManager, address indexed admin)
DepositWithdrawalFeeSet
event DepositWithdrawalFeeSet(uint256 depositFee, uint256 withdrawalFee, address indexed admin)
ExternalInflowRecognized
event ExternalInflowRecognized(uint256 accounted18, address indexed manager)
FundsRescued
event FundsRescued(address indexed token, address indexed recipient, uint256 amount, address indexed manager)
GMXContractsUpdated
event GMXContractsUpdated(address approvedCollateral, address indexed exchangeRouter, address indexed orderVault, address orderHandler, address indexed reader, address dataStore, address admin)
Initialized
event Initialized(uint64 version)
ManagementFeeAccrued
event ManagementFeeAccrued(uint256 daysElapsed, uint256 lpTokensOwed, uint256 currentTimestamp)
ManagementFeeClaimed
event ManagementFeeClaimed(address indexed manager, uint256 amount, uint256 platformFee)
ManagementFeeSet
event ManagementFeeSet(uint256 managementFee, address indexed admin)
ManagerWithdrawal
event ManagerWithdrawal(address indexed depositManager, uint256 amount18)
PerformanceFeeSet
event PerformanceFeeSet(uint256 performanceFee, address indexed admin)
PlatformFeeSet
event PlatformFeeSet(uint256 platformFee, address indexed admin)
PlatformTreasurySet
event PlatformTreasurySet(address indexed platformTreasury, address indexed admin)
ReceiverFeeSet
event ReceiverFeeSet(address indexed receiverFee, address indexed admin)
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)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
VaultInitialized
event VaultInitialized(string name, string symbol, address indexed underlyingAsset, address indexed exchangeRouter, address indexed orderVault, address reader, address dataStore, address assetManager, address receiverFee, address platformTreasury, uint256 lastMgmtFeeAccrual)
VaultNamingSet
event VaultNamingSet(string name, string symbol, address indexed admin)
WithdrawalPreparedLocked
event WithdrawalPreparedLocked(address indexed user, uint256 nonce, uint256 amountToBurn, uint256 clearAmountToWithdraw, uint256 realizedFee, uint256 flatFee)
WithdrawalRequested
event WithdrawalRequested(address indexed user, uint256 nonce, uint256 lpAmount, uint256 tradingFee, uint256 gasFeeUSD, uint256 gasFeeETH)
Withdrawn
event Withdrawn(address indexed withdrawer, uint256 amountLP, uint256 amountUSDT, uint256 realizedFee)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AccrualTooEarly
error AccrualTooEarly()
AlreadyPrepared
error AlreadyPrepared()
EmptyInitializeTokenParams
error EmptyInitializeTokenParams()
ERC20InsufficientAllowance
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
ERC20InsufficientBalance
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed)
ERC20InvalidApprover
error ERC20InvalidApprover(address approver)
ERC20InvalidReceiver
error ERC20InvalidReceiver(address receiver)
ERC20InvalidSender
error ERC20InvalidSender(address sender)
ERC20InvalidSpender
error ERC20InvalidSpender(address spender)
FailedCall
error FailedCall()
IncorrectExecutionFee
error IncorrectExecutionFee()
IncorrectFeePercentage
error IncorrectFeePercentage()
InsufficientBalance
error InsufficientBalance()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InsufficientDepositedBalance
error InsufficientDepositedBalance()
InvalidClaimAmount
error InvalidClaimAmount()
InvalidInitialization
error InvalidInitialization()
NoSuchIntent
error NoSuchIntent()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
ZeroAddress
error ZeroAddress()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6080806040523460aa575f5160206147fe5f395f51905f525460ff8160401c16609b576002600160401b03196001600160401b038216016049575b60405161474f90816100af8239f35b6001600160401b0319166001600160401b039081175f5160206147fe5f395f51905f525581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80603a565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f3560e01c90816301ffc9a714612a375750806306fdde0314612992578063095ea7b31461291357806312e8e2c3146128ef578063143af47714611dd757806318160ddd146128c65780631b206b7314611b715780631b5339d0146128a95780631cb8581814610698578063203b4d7f1461288257806323b872dd146127c057806324571e8c146126c9578063248a9ca3146126925780632505c3d9146124c457806325671dcb1461249b57806326232a2e1461247e5780632742f253146123e65780632c9873a2146123c95780632dfdf0b5146123ac5780632f0c7a111461238f5780632f2ff15d14612345578063313ce5671461232a5780633143ebfa1461205057806336568abe1461200c5780634a17506114611ff35780635d9f4eaf14610bac578063660d0d6714611fcb57806367a5279314611fae5780636c4a658e14611ecf5780636c7ac9d814611ea75780636ccae05414611dff5780636d45d11914611dd75780636dc7b0a114611db15780636f997ecf14611d945780636fb0af3314611bdd57806370a0823114611b995780637158da7c14611b7157806372c771a0146116cb5780637416b198146116b25780637cd86d601461168e57806381d16d7714610edb5780638778878214610ebe578063885aef8814610e955780638bc7e8c414610e7857806391d1485414610e2357806393845e461461065357806395d89b4114610d495780639ae4116b14610ce25780639c338ab714610caa578063a217fddf14610c90578063a6f7f5d614610c73578063a9059cbb14610c42578063ac7f099914610c28578063ad0344cf14610c0b578063b22c211414610bee578063b53b363e14610bd4578063b584830514610bac578063b819dedd14610b8a578063c18cd62614610aca578063c331f24314610aa1578063c7abd40b14610a55578063cbb113eb146109da578063cd82c0791461089f578063d4fc42c614610877578063d547741f14610828578063d6b3f61414610792578063dd62ed3e1461074b578063ded9a0b1146106e8578063e138818c146106c0578063e3a261d014610698578063e4259cba1461067b578063f132f9f714610653578063f34fd6c614610633578063fa4ec1c8146103825763ff50abdc14610361575f61000f565b3461037e575f36600319011261037e576020603854604051908152f35b5f80fd5b3461037e57602036600319011261037e576004356001600160401b03811161037e57803603906101e060031983011261037e576103bd61353d565b60018060a01b03600954169060405192636996807b60e01b84526020600485015281600401359060e2190181121561037e576101e060248501526102e48401929082016001600160a01b0361041460048301612ae0565b166102048601526001600160a01b0361042f60248301612ae0565b166102248601526001600160a01b0361044a60448301612ae0565b166102448601526001600160a01b0361046560648301612ae0565b166102648601526001600160a01b0361048060848301612ae0565b166102848601526001600160a01b0361049b60a48301612ae0565b166102a486015260c481013590602219368290030182121561037e576004910101602081359101936001600160401b03821161037e578160051b3603851361037e57819060e06102c488015252610304850193905f5b81811061060d57505050602482013560448501526044820135606485015260648201356084850152608482013560a485015260a482013560c485015260c482013560e485015260e4820135610104850152610104820135610124850152610124820135600981101561037e5761014485015261014482013592600384101561037e575f858094926101c482946020986101648501526105936101648201613403565b15156101848501526105a86101848201613403565b15156101a48501526105bd6101a48201613403565b15158285015201356101e483015203925af18015610602576105db57005b602090813d83116105fb575b6105f18183612c1a565b8101031261037e57005b503d6105e7565b6040513d5f823e3d90fd5b909194602080600192838060a01b036106258a612ae0565b1681520196019291016104f1565b3461037e575f36600319011261037e5761064b61345f565b61001a613321565b3461037e575f36600319011261037e576003546040516001600160a01b039091168152602090f35b3461037e575f36600319011261037e576020603c54604051908152f35b3461037e575f36600319011261037e576009546040516001600160a01b039091168152602090f35b3461037e575f36600319011261037e576001546040516001600160a01b039091168152602090f35b3461037e57604036600319011261037e576004356001600160401b03811161037e57610718903690600401612b9a565b602435916001600160401b03831161037e5761073b61001a933690600401612b9a565b9290916107466134ce565b61405f565b3461037e57604036600319011261037e57610764612ab4565b61077561076f612aca565b91612b4c565b9060018060a01b03165f52602052602060405f2054604051908152f35b3461037e5760e036600319011261037e576107ab613410565b6004356001600160a01b038116810361037e576024356001600160a01b038116810361037e576044356001600160a01b038116810361037e576064356001600160a01b038116810361037e57608435916001600160a01b038316830361037e5760a435936001600160a01b038516850361037e5761001a9561442a565b3461037e57604036600319011261037e5761001a600435610847612aca565b9061087261086d825f525f5160206146e35f395f51905f52602052600160405f20015490565b6135ac565b613eb2565b3461037e575f36600319011261037e576007546040516001600160a01b039091168152602090f35b3461037e575f36600319011261037e576108b761345f565b6039546008546040516370a0823160e01b81523060048201529190602090839060249082906001600160a01b03165afa918215610602575f926109a4575b50610902602092306137aa565b818082111561099c5761091491612e1c565b60385491808311156109955761092a9083612e1c565b8082111561098c5761093b91612e1c565b905b818061094e575b5050604051908152f35b61095791612c3b565b6038556040518181527f7f319a77c1364e2a26bdae37a5890366fa4cb9da0db2e7c3eb6935b459c363f8833392a28281610944565b50505f9061093d565b505f61092a565b50505f610914565b91506020823d6020116109d2575b816109bf60209383612c1a565b8101031261037e579051906109026108f5565b3d91506109b2565b3461037e57604036600319011261037e576001600160a01b036109fb612ab4565b165f52604460205260405f206024355f5260205260c060405f2080549060018101549060028101546003820154906005600484015493015493604051958652602086015260408501526060840152608083015260a0820152f35b3461037e57602036600319011261037e57600435610a7161353d565b603a5490818111610a9257610a898161001a93612e1c565b603a5533613920565b63451fd27960e01b5f5260045ffd5b3461037e57602036600319011261037e5761001a610abd612ab4565b610ac56134ce565b6143dc565b3461037e57602036600319011261037e57600435610ae661370e565b610aee61353d565b80151580610b79575b15610b6a57610b0881603854612e1c565b603855600854610b2b9064e8d4a5100083049033906001600160a01b0316613f4e565b6040519081527f415399643e9d8df40e848b3be0959c026ba54cfcb48113bd991e7150a1ee764b60203392a260015f5160206147035f395f51905f5255005b631e9acf1760e31b5f5260045ffd5b50610b8261317e565b811115610af7565b3461037e575f36600319011261037e576020610ba46132ea565b604051908152f35b3461037e575f36600319011261037e576004546040516001600160a01b039091168152602090f35b3461037e575f36600319011261037e576020610ba4613244565b3461037e575f36600319011261037e576020603f54604051908152f35b3461037e575f36600319011261037e576020603e54604051908152f35b3461037e575f36600319011261037e576020610ba461317e565b3461037e57604036600319011261037e57610c68610c5e612ab4565b602435903361363d565b602060405160018152f35b3461037e575f36600319011261037e576020600d54604051908152f35b3461037e575f36600319011261037e5760206040515f8152f35b3461037e57602036600319011261037e576001600160a01b03610ccb612ab4565b165f526042602052602060405f2054604051908152f35b3461037e57602036600319011261037e57600435610cfe61353d565b8015610d3a57600854610d3591610d2d91610d27908290309033906001600160a01b0316613746565b306137aa565b603854612c3b565b603855005b631f2a200560e01b5f5260045ffd5b3461037e575f36600319011261037e576040515f604154610d6981612bc7565b8084529060018116908115610dff5750600114610da1575b610d9d83610d9181850382612c1a565b60405191829182612a8a565b0390f35b91905060415f527f7c9785e8241615bc80415d89775984a1337d15dc1bf4ce50f41988b2a2b336a7915f905b808210610de557509091508101602001610d91610d81565b919260018160209254838588010152019101909291610dcd565b60ff191660208086019190915291151560051b84019091019150610d919050610d81565b3461037e57604036600319011261037e57610e3c612aca565b6004355f525f5160206146e35f395f51905f5260205260405f209060018060a01b03165f52602052602060ff60405f2054166040519015158152f35b3461037e575f36600319011261037e576020600b54604051908152f35b3461037e57602036600319011261037e5761001a610eb1612ab4565b610eb9613410565b614387565b3461037e575f36600319011261037e576020600e54604051908152f35b3461037e576101e036600319011261037e576004356001600160401b03811161037e578060040160e0600319833603011261037e57610f18612aca565b6044356001600160a01b038116929083810361037e576064356001600160a01b038116929083810361037e5760a435926001600160a01b038416840361037e5760c435906001600160a01b038216820361037e5760e03660e319011261037e576101c435946001600160a01b038616860361037e575f5160206147235f395f51905f52549960ff8b60401c16159a6001600160401b03811680159081611686575b600114908161167c575b159081611673575b506116645767ffffffffffffffff1981166001175f5160206147235f395f51905f52558b611638575b50610fff868061306b565b959061102860248401976110206110168a8c61306b565b94909236916130b8565b9236916130b8565b906110316145f7565b6110396145f7565b8051906001600160401b03821161152d576110615f5160206146435f395f51905f5254612bc7565b601f81116115c9575b50602090601f831160011461154c5761109a92915f9183611541575b50508160011b915f199060031b1c19161790565b5f5160206146435f395f51905f52555b8051906001600160401b03821161152d576110d25f5160206146835f395f51905f5254612bc7565b601f81116114be575b50602090601f83116001146114415761110a92915f91836114365750508160011b915f199060031b1c19161790565b5f5160206146835f395f51905f52555b6111226145f7565b61112a6145f7565b60015f5160206147035f395f51905f52556111436145f7565b61114b6145f7565b6111566084356135f2565b60448201356101f4811161141c5780600d556040519081527f3e91f398a3c99e1fb473fe0ec35281e3f3f554de8c68b1f8fc3dd9d487de683a60203392a26064820135610bb8811161141c5780600e556040519081527fbdcca652710148b6782af4a3b1fa57efa2b5fde4cd25e5ead24025ecb83c0e0c60203392a260848201359060a483013560c88311158061142b575b1561141c5760c494836112369261123b95600a5580600b5560405191825260208201527f4d20cc92f8da4efad2944b02daae6139b78f066443559da4f5fd29fadd5dbec660403392a2614387565b614016565b0191611249610ac58461314a565b61125288613a17565b60e435916001600160a01b038316830361037e5761126e6130ee565b90611277613105565b9761014435906001600160a01b038216820361037e577fbf43dc37d6852611eeb6d52886dbd30e0c3031e6edca94c248298a5e5fe19a08996112e7966112e1956112db946112d6936112c761311c565b926112d0613133565b9461442a565b613a60565b50613afc565b50613bb5565b506113086112f5848061306b565b90611300858761306b565b92909161405f565b42603f55611321611319848061306b565b93909461306b565b61132c9691966130ee565b98611335613105565b9361137b61134161311c565b9961135361134d613133565b9361314a565b9461136d6040519a8b9a6101008c526101008c019161315e565b9189830360208b015261315e565b6001600160a01b03998a1660408801529089166060870152608086019190915290871660a085015260c08401919091524260e084015290851696851695909416930390a46113c557005b68ff0000000000000000195f5160206147235f395f51905f5254165f5160206147235f395f51905f52557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b631b25fd6f60e11b5f5260045ffd5b5060c88111156111e8565b015190508f80611086565b90601f198316915f5160206146835f395f51905f525f52815f20925f5b8181106114a6575090846001959493921061148e575b505050811b015f5160206146835f395f51905f525561111a565b01515f1960f88460031b161c191690558e8080611474565b9293602060018192878601518155019501930161145e565b5f5160206146835f395f51905f525f527f46a2803e59a4de4e7a4c574b1243f25977ac4c77d5a1a4a609b5394cebb4a2aa601f840160051c81019160208510611523575b601f0160051c01905b81811061151857506110db565b5f815560010161150b565b9091508190611502565b634e487b7160e01b5f52604160045260245ffd5b015190505f80611086565b90601f198316915f5160206146435f395f51905f525f52815f20925f5b8181106115b15750908460019594939210611599575b505050811b015f5160206146435f395f51905f52556110aa565b01515f1960f88460031b161c191690558f808061157f565b92936020600181928786015181550195019301611569565b5f5160206146435f395f51905f525f527f2ae08a8e29253f69ac5d979a101956ab8f8d9d7ded63fa7a83b16fc47648eab0601f840160051c8101916020851061162e575b601f0160051c01905b818110611623575061106a565b5f8155600101611616565b909150819061160d565b68ffffffffffffffffff191668010000000000000001175f5160206147235f395f51905f52558b610ff4565b63f92ee8a960e01b5f5260045ffd5b9050158d610fcb565b303b159150610fc3565b8d9150610fb9565b3461037e57602036600319011261037e5761001a6116aa612ab4565b611236613410565b3461037e576020610ba46116c536612b84565b9061303a565b3461037e57604036600319011261037e576116e4612ab4565b6024356116ef61370e565b6116f761345f565b6001600160a01b038216918215611b6257825f52604360205260405f20825f52602052600660405f20015460ff81169081611b54575b5015611b4557825f52604460205260405f20825f5260205260405f209060405161175681612bff565b825481526001830154928360208301526002810154928360408401526003820154908160608501526005600484015493846080870152015460a085019081526117ac846117a7856117a78a8c612c3b565b612c3b565b6008546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa80156106025782915f91611b0e575b506117f290306137aa565b10610b6a57603854818110611aff576118116118199351603954612e1c565b603955612e1c565b6038558351908880611a8d575f905f5160206146c35f395f51905f526020856118536118a5975f5160206146a35f395f51905f5254612c3b565b5f5160206146a35f395f51905f52555b805f5160206146a35f395f51905f5254035f5160206146a35f395f51905f5255604051908152a360085464e8d4a51000880491906001600160a01b0316613f4e565b80611a62575b5080611a38575b508115801561198a575b50611974907f75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a2194865f52604460205260405f20815f526020525f6005604082208281558260018201558260028201558260038201558260048201550155865f52604360205260405f20905f526020525f60066040822082815582600182015582600282015582600382015582600482015582600582015501555191604051938493846040919493926060820195825260208201520152565b0390a260015f5160206147035f395f51905f5255005b906103e88302918383046103e8141715611a24577f75e161b3e824b114fc1a33274bd7091918dd4e639cede50b78b15a4eea956a2194611a1c61271061197494046119fb6119d88288612e1c565b600854600154919364e8d4a510009004916001600160a01b039081169116613f4e565b6008545f5464e8d4a51000909204916001600160a01b039081169116613f4e565b9450906118bc565b634e487b7160e01b5f52601160045260245ffd5b6008545f54611a5c9264e8d4a510009004916001600160a01b039182169116613f4e565b856118b2565b600854600154611a879264e8d4a510009004916001600160a01b039182169116613f4e565b866118ab565b5f929192525f5160206146635f395f51905f5260205260405f2054818110611ae657895f5160206146c35f395f51905f526020846118a596955f958587525f5160206146635f395f51905f528452036040862055611863565b8963391434e360e21b5f5260045260245260445260645ffd5b631925414d60e11b5f5260045ffd5b9150506020813d602011611b3d575b81611b2a60209383612c1a565b8101031261037e575181906117f26117e7565b3d9150611b1d565b6304c9cd7960e31b5f5260045ffd5b60ff915060081c168461172d565b63d92e233d60e01b5f5260045ffd5b3461037e575f36600319011261037e576008546040516001600160a01b039091168152602090f35b3461037e57602036600319011261037e576001600160a01b03611bba612ab4565b165f525f5160206146635f395f51905f52602052602060405f2054604051908152f35b611be636612b2e565b919092611bf161370e565b8015610d3a5783151580611d8b575b80611d81575b15610a9257335f525f5160206146635f395f51905f526020528060405f205410610b6a57611c3683603a54612c3b565b603a55823411611d69575b335f52604260205260405f2093611c588554612e5a565b809555604051936101008501918583106001600160401b0384111761152d577fd70e0005b315294a70b1f42e1f6dde7d6cc82bb247753f8f15517f60ba56b621956119749360405287815287600660208301928784526040810189815260608201868152608083019088825260a084019242845260c08501976001895260e08601975f8952335f52604360205260405f20905f5260205260405f2095518655516001860155516002850155516003840155516004830155516005820155019151151560ff8019845416911617825551151561ff0082549160081b169061ff0019161790556040519485943398869192608093969594919660a084019784526020840152604083015260608201520152565b611d7c611d768434612e1c565b33613920565b611c41565b5082341015611c06565b50821515611c00565b3461037e575f36600319011261037e576020603a54604051908152f35b3461037e575f36600319011261037e576040611dcb612f85565b82519182526020820152f35b3461037e575f36600319011261037e576006546040516001600160a01b039091168152602090f35b3461037e57611e0d36612af4565b9190611e1761370e565b611e1f613410565b6001600160a01b038116918215611b62578315610d3a576001600160a01b031690838215611e9057611e519183613f4e565b6040519283527f2098976920827f095c56419969a63d95c46499f652b474df5dc8b5433faa64b260203394a460015f5160206147035f395f51905f5255005b90504710610d3a57611ea28383613920565b611e51565b3461037e575f36600319011261037e576002546040516001600160a01b039091168152602090f35b3461037e57602036600319011261037e57600435611eeb6134ce565b8015801580611fa2575b15611f9357611f0682603e54612e1c565b603e556103e88202908282046103e8141715611a24576040611f4e6127107fa8a159dd0cf19b28c401534c96d4fb088f6c68389b4516260c1ad227d3726e7c93048094612e1c565b600154611f659085906001600160a01b03166139a8565b5f54611f7b9082906001600160a01b03166139a8565b60018060a01b035f54169382519182526020820152a2005b63843ce46b60e01b5f5260045ffd5b50603e54821115611ef5565b3461037e575f36600319011261037e576020600a54604051908152f35b3461037e575f36600319011261037e576005546040516001600160a01b039091168152602090f35b3461037e576020610ba461200636612b84565b90612e68565b3461037e57604036600319011261037e57612025612aca565b336001600160a01b038216036120415761001a90600435613eb2565b63334bd91960e11b5f5260045ffd5b3461037e57604036600319011261037e57612069612ab4565b602435905f60a060405161207c81612bff565b82815282602082015282604082015282606082015282608082015201526120a161345f565b6001600160a01b0316908115611b6257815f52604360205260405f20815f5260205260405f20916006830190815460ff811615611b455760081c60ff1661231b57612110670de0b6b3a76400006121076001870154966003600282015491015490613db2565b87939193612e29565b04612710612120600c5483612e29565b0492600b548015155f146123135761213b6127109184612e29565b04945b6121488686612c3b565b6121528185612e1c565b9361215b61317e565b80821161230b5750975b61217189603954612c3b565b6039555f958a61217f6132ea565b809211612289575b5050604051996121968b612bff565b8a5260208a0194855260408a0195865260608a0196875260808a0197885260a08a01988952835f52604460205260405f20815f5260205260405f20918a51928381558651948560018301558851918260028201558a5160038201558b5160048201558c51906005015561ff001981541661010017905560405194859461223b94869192608093969594919660a084019784526020840152604083015260608201520152565b037f64c501d50b809875062248719ee850f909d214e9a86d2263541d6c1f903995c591a2604051955186525160208601525160408501525160608401525160808301525160a082015260c090f35b6122db9197506122d26122cb6122aa670de0b6b3a764000093603b54612e29565b6122c55f5160206146a35f395f51905f5254603e5490612c3b565b90612e3c565b988d612e29565b04603c54612e1c565b603c556122ea8a603d54612e1c565b603d5585806122fa575b8a612187565b6123049195612e1c565b93856122f4565b905097612165565b505f9461213e565b631da090b960e31b5f5260045ffd5b3461037e575f36600319011261037e57602060405160128152f35b3461037e57604036600319011261037e5761001a600435612364612aca565b9061238a61086d825f525f5160206146e35f395f51905f52602052600160405f20015490565b613d27565b3461037e575f36600319011261037e576020603b54604051908152f35b3461037e575f36600319011261037e576020603754604051908152f35b3461037e575f36600319011261037e576020603d54604051908152f35b3461037e57604036600319011261037e576001600160a01b03612407612ab4565b165f52604360205260405f206024355f5260205261010060405f2060ff815491600181015490600281015460038201546004830154916006600585015494015494604051978852602088015260408701526060860152608085015260a0840152818116151560c084015260081c16151560e0820152f35b3461037e575f36600319011261037e576020600c54604051908152f35b3461037e57602036600319011261037e5761001a6124b7612ab4565b6124bf613410565b613a17565b6124cd36612b2e565b91906124d761370e565b8315610d3a57823410610a92576124f161250a918361303a565b93610d278160018060a01b036008541630903390613746565b612710612519600c5483612e29565b6008546001549290910493916125449164e8d4a510008604916001600160a01b039081169116613f4e565b612556612550836138d9565b84612c3b565b5f5160206146a35f395f51905f525490939015612687576125779083612e1c565b93670de0b6b3a7640000850294808604670de0b6b3a76400001490151715611a245764e8d4a5100061197492612635670de0b6b3a764000061262c6125e7896125e18d7f0a5c854539f6e93fcd4a8397bfae8bdb751b4e819840f1c8681e6ad7ff19c5b59d612e3c565b99612e1c565b9a6125f48c603854612c3b565b603855612602603754612e5a565b60375561261187603a54612c3b565b603a55863411612675575b61262689336139a8565b88612e29565b04603c54612c3b565b603c5561264485603d54612c3b565b603d55046040519485943398869192608093969594919660a084019784526020840152604083015260608201520152565b612682611d768834612e1c565b61261c565b506125778383612e1c565b3461037e57602036600319011261037e576020610ba46004355f525f5160206146e35f395f51905f52602052600160405f20015490565b3461037e575f36600319011261037e576126e1612c5c565b6040518091602082016020835281518091526020604084019201905f5b81811061270c575050500390f35b9193509160206101a06001926101808751858060a01b038151168352858060a01b03858201511685840152858060a01b036040820151166040840152606081015160608401526080810151608084015260a081015160a084015260c081015160c084015260e081015160e084015261010081015161010084015261012081015161012084015261014081015161014084015261016081015161016084015201516101808201520194019101918493926126fe565b3461037e576127ce36612af4565b906127d883612b4c565b335f9081526020919091526040902054925f1984106127fc575b610c68935061363d565b828410612867576001600160a01b0381161561285457331561284157610c689361282582612b4c565b60018060a01b0333165f526020528360405f20910390556127f2565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b3461037e575f36600319011261037e575f546040516001600160a01b039091168152602090f35b3461037e575f36600319011261037e576020603954604051908152f35b3461037e575f36600319011261037e5760205f5160206146a35f395f51905f5254604051908152f35b3461037e57602036600319011261037e57612908613410565b61001a6004356135f2565b3461037e57604036600319011261037e5761292c612ab4565b602435903315612854576001600160a01b03169081156128415761294f33612b4c565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b3461037e575f36600319011261037e576040515f6040546129b281612bc7565b8084529060018116908115610dff57506001146129d957610d9d83610d9181850382612c1a565b91905060405f527f352feee0eea125f11f791c1b77524172e9bc20f1b719b6cef0fc24f64db8e15e915f905b808210612a1d57509091508101602001610d91610d81565b919260018160209254838588010152019101909291612a05565b3461037e57602036600319011261037e576004359063ffffffff60e01b821680920361037e57602091637965db0b60e01b8114908115612a79575b5015158152f35b6301ffc9a760e01b14905083612a72565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361037e57565b602435906001600160a01b038216820361037e57565b35906001600160a01b038216820361037e57565b606090600319011261037e576004356001600160a01b038116810361037e57906024356001600160a01b038116810361037e579060443590565b608090600319011261037e5760043590602435906044359060643590565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b604090600319011261037e576004359060243590565b9181601f8401121561037e578235916001600160401b03831161037e576020838186019501011161037e57565b90600182811c92168015612bf5575b6020831014612be157565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612bd6565b60c081019081106001600160401b0382111761152d57604052565b90601f801991011681019081106001600160401b0382111761152d57604052565b91908201809211611a2457565b51906001600160a01b038216820361037e57565b6007546005546001600160a01b03918216911642620151808101908110611a245760845f926040519485938492633be7d8b160e11b8452600484015230602484015285604484015260648301525afa908115610602575f91612cbc575090565b90503d805f833e612ccd8183612c1a565b81019060208183031261037e578051906001600160401b03821161037e570181601f8201121561037e578051906001600160401b03821161152d5760405192612d1c60208460051b0185612c1a565b82845260206101a081860194028301019181831161037e57602001925b828410612d47575050505090565b6101a08483031261037e57604051906101a08201908282106001600160401b0383111761152d576101a092602092604052612d8187612c48565b8152612d8e838801612c48565b83820152612d9e60408801612c48565b6040820152606087015160608201526080870151608082015260a087015160a082015260c087015160c082015260e087015160e0820152610100870151610100820152610120870151610120820152610140870151610140820152610160870151610160820152610180870151610180820152815201930192612d39565b91908203918211611a2457565b81810292918115918404141715611a2457565b8115612e46570490565b634e487b7160e01b5f52601260045260245ffd5b5f198114611a245760010190565b90612e71612f85565b9290918315612f75576117a7612ea29264e8d4a5100080612710612e97600b5489612e29565b049404910492612c3b565b80821115612f6c57612eb391612e1c565b905b670de0b6b3a7640000820291801592818104670de0b6b3a764000014841715611a245782612ee291612e3c565b92612eeb6132ea565b9081851190811591612f64575b50612f5e57612f1a612f1161271092612f289596612e1c565b600e5490612e29565b0490808211612f5657612e1c565b90670de0b6b3a7640000820291808304670de0b6b3a76400001490151715611a2457612f5391612e3c565b90565b905080612e1c565b50505090565b90505f612ef8565b50505f90612eb5565b50505050670de0b6b3a764000090565b612fa05f5160206146a35f395f51905f5254603e5490612c3b565b8015613033576008546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa908115610602575f91612fff575b50612fee612ffc91306137aa565b612ff6613fb1565b90612c3b565b91565b90506020813d60201161302b575b8161301a60209383612c1a565b8101031261037e5751612fee612fe0565b3d915061300d565b505f905f90565b90613043612f85565b928315612f7557612f28926117a7612ff69264e8d4a5100080612710612e97600a5489612e29565b903590601e198136030182121561037e57018035906001600160401b03821161037e5760200191813603831361037e57565b6001600160401b03811161152d57601f01601f191660200190565b9291926130c48261309d565b916130d26040519384612c1a565b82948184528183011161037e578281602093845f960137010152565b610104356001600160a01b038116810361037e5790565b610124356001600160a01b038116810361037e5790565b610164356001600160a01b038116810361037e5790565b610184356001600160a01b038116810361037e5790565b356001600160a01b038116810361037e5790565b908060209392818452848401375f828201840152601f01601f1916010190565b603954603854818082111561323b5761319691612e1c565b905b6008546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015610602575f90613207575b6131dc9150306137aa565b90808211156131ff576131ee91612e1c565b808210156131fa575090565b905090565b50505f6131ee565b506020813d602011613233575b8161322160209383612c1a565b8101031261037e576131dc90516131d1565b3d9150613214565b50505f90613198565b61325f5f5160206146a35f395f51905f5254603e5490612c3b565b80156132dd576008546040516370a0823160e01b815230600482015290602090829060249082906001600160a01b03165afa8015610602575f906132a9575b612f289150306137aa565b506020813d6020116132d5575b816132c360209383612c1a565b8101031261037e57612f28905161329e565b3d91506132b6565b50670de0b6b3a764000090565b603d5480156132dd57603c5490670de0b6b3a7640000820291808304670de0b6b3a76400001490151715611a2457612f5391612e3c565b603f54620151806133328242612e1c565b049081156133f4576201518082028281046201518003611a245761335591612c3b565b603f555f5160206146a35f395f51905f525490613375603e548093612c3b565b91821580156133ea575b6133e5576133c86237b1d06133c07fb6047c4a8acec1d679476b5bf17087c280066c151f169e13900a51d60ae48d25956133bb86600d54612e29565b612e29565b048092612c3b565b603e556040805192835260208301919091524290820152606090a1565b505050565b50600d541561337f565b630e3eab8960e41b5f5260045ffd5b3590811515820361037e57565b335f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561344857565b63e2517d3f60e01b5f52336004525f60245260445ffd5b335f9081527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba602052604090205460ff161561349757565b63e2517d3f60e01b5f52336004527f205783d38d15a7146707395edcf4f3346fe724136da9a399f4abb11a50e4316c60245260445ffd5b335f9081527fabfb1ec8c42381afee05128ed5811500072b8098a9b8f446dc4d7cb03999b2fa602052604090205460ff161561350657565b63e2517d3f60e01b5f52336004527fab94653026d7bd93059ff32f30ba1cb25f9382d1d84ded269a1ac45ab78a555a60245260445ffd5b335f9081527fb3a67e6645a676896bf919af883d634e81ad9f93585964177bbbfac1f703a6c8602052604090205460ff161561357557565b63e2517d3f60e01b5f52336004527f99d82a97a0f1833c5aad79fce89e337a0da2cb0a4abeb99cf2a90fe3e687a98960245260445ffd5b5f8181525f5160206146e35f395f51905f526020908152604080832033845290915290205460ff16156135dc5750565b63e2517d3f60e01b5f523360045260245260445ffd5b80151580613632575b1561141c5780600c556040519081527f2c913b218a7fcc4905fb9f9dc3a7ecd1b0f9f8b086cdcd514f2fc4c88538993060203392a2565b5061271081106135fb565b6001600160a01b03169081156136fb576001600160a01b03169182156136e857815f525f5160206146635f395f51905f5260205260405f20548181106136cf57815f5160206146c35f395f51905f5292602092855f525f5160206146635f395f51905f5284520360405f2055845f525f5160206146635f395f51905f52825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b60025f5160206147035f395f51905f5254146137375760025f5160206147035f395f51905f5255565b633ee5aeb560e01b5f5260045ffd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261378f9161378a608483612c1a565b614560565b565b9081602091031261037e575160ff8116810361037e5790565b604051631b206b7360e01b81526001600160a01b03919091169190602081600481865afa908115610602575f91613894575b5060405163313ce56760e01b81529290602090849060049082906001600160a01b03165afa908115610602576004935f92613872575b506020906040519485809263313ce56760e01b82525afa91821561060257612f53935f93613841575b506145b8565b61386491935060203d60201161386b575b61385c8183612c1a565b810190613791565b915f61383b565b503d613852565b602091925061388d90823d841161386b5761385c8183612c1a565b9190613812565b90506020813d6020116138d1575b816138af60209383612c1a565b8101031261037e5751916001600160a01b038316830361037e579160206137dc565b3d91506138a2565b600a5490811561391a57612710916138f091612e29565b6008545f5492909104929161378f9164e8d4a510008504916001600160a01b039081169116613f4e565b50505f90565b814710613991575f918291829182916001600160a01b03165af13d15613989573d9061394b8261309d565b916139596040519384612c1a565b82523d5f602084013e5b1561396b5750565b80511561397a57805190602001fd5b63d6bda27560e01b5f5260045ffd5b606090613963565b504763cf47918160e01b5f5260045260245260445ffd5b6001600160a01b03169081156136e8575f5160206146c35f395f51905f526020826139e25f945f5160206146a35f395f51905f5254612c3b565b5f5160206146a35f395f51905f52558484525f5160206146635f395f51905f52825260408420818154019055604051908152a3565b6001600160a01b03168015611b6257600880546001600160a01b0319168217905533907f215169fe0f546947d8a4b9e988e166cee7fffaca3db0787886fba8275539b6cb5f80a3565b6001600160a01b0381165f9081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16613af7576001600160a01b03165f8181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391905f5160206146235f395f51905f528180a4600190565b505f90565b6001600160a01b0381165f9081527fabfb1ec8c42381afee05128ed5811500072b8098a9b8f446dc4d7cb03999b2fa602052604090205460ff16613af7576001600160a01b03165f8181527fabfb1ec8c42381afee05128ed5811500072b8098a9b8f446dc4d7cb03999b2fa60205260408120805460ff191660011790553391907fab94653026d7bd93059ff32f30ba1cb25f9382d1d84ded269a1ac45ab78a555a905f5160206146235f395f51905f529080a4600190565b6001600160a01b0381165f9081527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba602052604090205460ff16613af7576001600160a01b03165f8181527f9820777f3b5c4a55ba3649af6ff157717cfd4aa964ddedabebc16c5bafb84aba60205260408120805460ff191660011790553391907f205783d38d15a7146707395edcf4f3346fe724136da9a399f4abb11a50e4316c905f5160206146235f395f51905f529080a4600190565b6001600160a01b0381165f9081527fb3a67e6645a676896bf919af883d634e81ad9f93585964177bbbfac1f703a6c8602052604090205460ff16613af7576001600160a01b03165f8181527fb3a67e6645a676896bf919af883d634e81ad9f93585964177bbbfac1f703a6c860205260408120805460ff191660011790553391907f99d82a97a0f1833c5aad79fce89e337a0da2cb0a4abeb99cf2a90fe3e687a989905f5160206146235f395f51905f529080a4600190565b5f8181525f5160206146e35f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff1661391a575f8181525f5160206146e35f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291905f5160206146235f395f51905f529080a4600190565b919091613dbd612f85565b9390918415613e9f57906117a7613de49264e8d4a5100080612710612e97600b5489612e29565b80821115613e9657613df591612e1c565b915b670de0b6b3a7640000830292801593818104670de0b6b3a764000014851715611a245782613e2491612e3c565b9384613e2e6132ea565b9182871190811591613e8e575b50613e83575090612710613e55612f11612f289488612e1c565b0490808211613e7b575b670de0b6b3a7640000613e728584612e29565b04603b55612e1c565b905080613e5f565b5f603b559392505050565b90505f613e3b565b50505f91613df7565b5050509050670de0b6b3a7640000908190565b5f8181525f5160206146e35f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff161561391a575f8181525f5160206146e35f395f51905f52602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60405163a9059cbb60e01b60208201526001600160a01b03909216602483015260448083019390935291815261378f9161378a606483612c1a565b8051821015613f9d5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b613fb9612c5c565b90815115614011575f805b835182101561400457613ffc600191612ff6610180613fe38689613f89565b510151610140613ff3878a613f89565b51015190612c3b565b910190613fc4565b64e8d4a510009004925050565b5f9150565b6001600160a01b03168015611b6257600180546001600160a01b0319168217905533907f37ddbabd57ad0f251b23af616fe71e81f60f58736f83157ada05a6f2d85842d75f80a3565b909392938015158061437e575b1561436f576001600160401b03811161152d5761408a604054612bc7565b601f811161430c575b505f81601f811160011461428a57806140c0925f9161427f575b508160011b915f199060031b1c19161790565b6040555b6001600160401b03851161152d576140dd604154612bc7565b601f811161421c575b505f601f86116001146141745785614139817f87c97897a14699cad48ecddc82ec0a7c3c7e52ee5391a0a90ff8615f472f7391969798614164945f9161416957508160011b915f199060031b1c19161790565b6041555b61415460405194859460408652604086019161315e565b908382036020850152339661315e565b0390a2565b90508801355f6140ad565b601f1986169060415f527f7c9785e8241615bc80415d89775984a1337d15dc1bf4ce50f41988b2a2b336a7915f5b81811061420457509187917f87c97897a14699cad48ecddc82ec0a7c3c7e52ee5391a0a90ff8615f472f739196979861416494106141eb575b5050600181811b0160415561413d565b8701355f19600384901b60f8161c191690555f806141db565b9192602060018192868a0135815501940192016141a2565b60415f527f7c9785e8241615bc80415d89775984a1337d15dc1bf4ce50f41988b2a2b336a7601f870160051c81019160208810614275575b601f0160051c01905b81811061426a57506140e6565b5f815560010161425d565b9091508190614254565b90508401355f6140ad565b50601f1982169060405f52827f352feee0eea125f11f791c1b77524172e9bc20f1b719b6cef0fc24f64db8e15e925f5b8181106142f15750106142d8575b5050600181811b016040556140c4565b8301355f19600384901b60f8161c191690555f806142c8565b868401358555600190940193602093840193869350016142ba565b60405f527f352feee0eea125f11f791c1b77524172e9bc20f1b719b6cef0fc24f64db8e15e601f830160051c81019160208410614365575b601f0160051c01905b81811061435a5750614093565b5f815560010161434d565b9091508190614344565b63385f6a0760e11b5f5260045ffd5b5084151561406c565b6001600160a01b038116908115611b6257600280546001600160a01b031916831790556143b390613c6e565b5033907ff886cbfd90fd8b29911e08b35f308cfcbf0c910a06f7bc5f70d5cba1d719c2225f80a3565b6001600160a01b03168015611b6257806bffffffffffffffffffffffff60a01b5f5416175f5533907fcff86a97a3231a9ec4b7370084d673b007d820c5b8fe80b470705bf4733def795f80a3565b92936001600160a01b03909116928315158061454e575b8061453c575b8061452a575b80614518575b80614506575b15611b6257600780546001600160a01b039384166001600160a01b031991821681179092556009805482168717905560058054988516988216891790556003805495851695821686179055600480549785169782168817905560068054939094169216821790925560408051918252602082019590955293840194909452336060840152917f9bfe9ba86af9f1d350bc69b3d7c564fa649f4f08d3ee8c56ec3d3af412c311f090608090a4565b506001600160a01b0381161515614459565b506001600160a01b0386161515614453565b506001600160a01b038216151561444d565b506001600160a01b0385161515614447565b506001600160a01b0383161515614441565b905f602091828151910182855af115610602575f513d6145af57506001600160a01b0381163b155b61458f5750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415614588565b9060ff831660ff82168181145f146145d257505050905090565b10156145e55760ff91920316600a0a0290565b612f539260ff910316600a0a90612e3c565b60ff5f5160206147235f395f51905f525460401c161561461357565b631afcd79f60e31b5f5260045ffdfe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0352c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0452c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a164736f6c634300081d000af0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00