0 txs
21 calls
constructor
constructor(address _owner, address _vault, address _accountant, address _weth, address _lzEndPoint, address _delegate, address _lzToken)
functions
accountant
viewfunction accountant() view returns (address)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
assetData
viewfunction assetData(address) view returns (bool allowDeposits, bool allowWithdraws, uint16 sharePremium)
authority
viewfunction authority() view returns (address)
beforeTransfer
viewfunction beforeTransfer(address from, address to, address operator) view
beforeTransfer
viewfunction beforeTransfer(address from) view
composeMsgSender
viewfunction composeMsgSender() view returns (address sender)
depositNonce
viewfunction depositNonce() view returns (uint96)
endpoint
viewfunction endpoint() view returns (address)
fromDenyList
viewfunction fromDenyList(address) view returns (bool)
getAmountCanBeReceived
viewfunction getAmountCanBeReceived(uint32 _srcEid) view returns (uint256 inboundAmountInFlight, uint256 amountCanBeReceived)
getAmountCanBeSent
viewfunction getAmountCanBeSent(uint32 _dstEid) view returns (uint256 outboundAmountInFlight, uint256 amountCanBeSent)
idToChains
viewfunction idToChains(uint32) view returns (bool allowMessagesFrom, bool allowMessagesTo, uint128 messageGasLimit)
inboundRateLimits
viewfunction inboundRateLimits(uint32 srcEid) view returns (uint256 amountInFlight, uint256 lastUpdated, uint256 limit, uint256 window)
isPaused
viewfunction isPaused() view returns (bool)
nativeWrapper
viewfunction nativeWrapper() view returns (address)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
operatorDenyList
viewfunction operatorDenyList(address) view returns (bool)
outboundRateLimits
viewfunction outboundRateLimits(uint32 dstEid) view returns (uint256 amountInFlight, uint256 lastUpdated, uint256 limit, uint256 window)
owner
viewfunction owner() view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
previewFee
viewfunction previewFee(uint96 shareAmount, address to, bytes bridgeWildCard, address feeToken) view returns (uint256 fee)
publicDepositHistory
viewfunction publicDepositHistory(uint256) view returns (bytes32)
shareLockPeriod
viewfunction shareLockPeriod() view returns (uint64)
shareUnlockTime
viewfunction shareUnlockTime(address) view returns (uint256)
toDenyList
viewfunction toDenyList(address) view returns (bool)
vault
viewfunction vault() view returns (address)
addChain
nonpayablefunction addChain(uint32 chainId, bool allowMessagesFrom, bool allowMessagesTo, address targetTeller, uint128 messageGasLimit)
allowAll
nonpayablefunction allowAll(address user)
allowFrom
nonpayablefunction allowFrom(address user)
allowMessagesFromChain
nonpayablefunction allowMessagesFromChain(uint32 chainId, address targetTeller)
allowMessagesToChain
nonpayablefunction allowMessagesToChain(uint32 chainId, address targetTeller, uint128 messageGasLimit)
allowOperator
nonpayablefunction allowOperator(address user)
allowTo
nonpayablefunction allowTo(address user)
bridge
payablefunction bridge(uint96 shareAmount, address to, bytes bridgeWildCard, address feeToken, uint256 maxFee) payable
bulkDeposit
nonpayablefunction bulkDeposit(address depositAsset, uint256 depositAmount, uint256 minimumMint, address to) returns (uint256 shares)
bulkWithdraw
nonpayablefunction bulkWithdraw(address withdrawAsset, uint256 shareAmount, uint256 minimumAssets, address to) returns (uint256 assetsOut)
denyAll
nonpayablefunction denyAll(address user)
denyFrom
nonpayablefunction denyFrom(address user)
denyOperator
nonpayablefunction denyOperator(address user)
denyTo
nonpayablefunction denyTo(address user)
deposit
payablefunction deposit(address depositAsset, uint256 depositAmount, uint256 minimumMint) payable returns (uint256 shares)
depositAndBridge
payablefunction depositAndBridge(address depositAsset, uint256 depositAmount, uint256 minimumMint, address to, bytes bridgeWildCard, address feeToken, uint256 maxFee) payable returns (uint256 sharesBridged)
depositAndBridgeWithPermit
payablefunction depositAndBridgeWithPermit(address depositAsset, uint256 depositAmount, uint256 minimumMint, uint256 deadline, uint8 v, bytes32 r, bytes32 s, address to, bytes bridgeWildCard, address feeToken, uint256 maxFee) payable returns (uint256 sharesBridged)
depositWithPermit
nonpayablefunction depositWithPermit(address depositAsset, uint256 depositAmount, uint256 minimumMint, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns (uint256 shares)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
pause
nonpayablefunction pause()
refundDeposit
nonpayablefunction refundDeposit(uint256 nonce, address receiver, address depositAsset, uint256 depositAmount, uint256 shareAmount, uint256 depositTimestamp, uint256 shareLockUpPeriodAtTimeOfDeposit)
removeChain
nonpayablefunction removeChain(uint32 chainId)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setChainGasLimit
nonpayablefunction setChainGasLimit(uint32 chainId, uint128 messageGasLimit)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setInboundRateLimits
nonpayablefunction setInboundRateLimits(tuple[] _rateLimitConfigs)
setOutboundRateLimits
nonpayablefunction setOutboundRateLimits(tuple[] _rateLimitConfigs)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setShareLockPeriod
nonpayablefunction setShareLockPeriod(uint64 _shareLockPeriod)
stopMessagesFromChain
nonpayablefunction stopMessagesFromChain(uint32 chainId)
stopMessagesToChain
nonpayablefunction stopMessagesToChain(uint32 chainId)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateAssetData
nonpayablefunction updateAssetData(address asset, bool allowDeposits, bool allowWithdraws, uint16 sharePremium)
events
AllowFrom
event AllowFrom(address indexed user)
AllowOperator
event AllowOperator(address indexed user)
AllowTo
event AllowTo(address indexed user)
AssetDataUpdated
event AssetDataUpdated(address indexed asset, bool allowDeposits, bool allowWithdraws, uint16 sharePremium)
AuthorityUpdated
event AuthorityUpdated(address indexed user, address indexed newAuthority)
BulkDeposit
event BulkDeposit(address indexed asset, uint256 depositAmount)
BulkWithdraw
event BulkWithdraw(address indexed asset, uint256 shareAmount)
ChainAdded
event ChainAdded(uint256 chainId, bool allowMessagesFrom, bool allowMessagesTo, address targetTeller)
ChainAllowMessagesFrom
event ChainAllowMessagesFrom(uint256 chainId, address targetTeller)
ChainAllowMessagesTo
event ChainAllowMessagesTo(uint256 chainId, address targetTeller)
ChainRemoved
event ChainRemoved(uint256 chainId)
ChainSetGasLimit
event ChainSetGasLimit(uint256 chainId, uint128 messageGasLimit)
ChainStopMessagesFrom
event ChainStopMessagesFrom(uint256 chainId)
ChainStopMessagesTo
event ChainStopMessagesTo(uint256 chainId)
DenyFrom
event DenyFrom(address indexed user)
DenyOperator
event DenyOperator(address indexed user)
DenyTo
event DenyTo(address indexed user)
Deposit
event Deposit(uint256 indexed nonce, address indexed receiver, address indexed depositAsset, uint256 depositAmount, uint256 shareAmount, uint256 depositTimestamp, uint256 shareLockPeriodAtTimeOfDeposit)
DepositRefunded
event DepositRefunded(uint256 indexed nonce, bytes32 depositHash, address indexed user)
InboundRateLimitsChanged
event InboundRateLimitsChanged((uint32 peerEid, uint256 limit, uint256 window)[] rateLimitConfigs)
MessageReceived
event MessageReceived(bytes32 indexed messageId, uint256 shareAmount, address indexed to)
MessageSent
event MessageSent(bytes32 indexed messageId, uint256 shareAmount, address indexed to)
OutboundRateLimitsChanged
event OutboundRateLimitsChanged((uint32 peerEid, uint256 limit, uint256 window)[] rateLimitConfigs)
OwnershipTransferred
event OwnershipTransferred(address indexed user, address indexed newOwner)
Paused
event Paused()
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
Unpaused
event Unpaused()
errors
CrossChainTellerWithGenericBridge__UnsafeCastToUint96
error CrossChainTellerWithGenericBridge__UnsafeCastToUint96()
InboundRateLimitExceeded
error InboundRateLimitExceeded()
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
LayerZeroTeller__BadFeeToken
error LayerZeroTeller__BadFeeToken()
LayerZeroTeller__FeeExceedsMax
error LayerZeroTeller__FeeExceedsMax(uint256 chainSelector, uint256 fee, uint256 maxFee)
LayerZeroTeller__MessagesNotAllowedFrom
error LayerZeroTeller__MessagesNotAllowedFrom(uint256 chainSelector)
LayerZeroTeller__MessagesNotAllowedFromSender
error LayerZeroTeller__MessagesNotAllowedFromSender(uint256 chainSelector, address sender)
LayerZeroTeller__MessagesNotAllowedTo
error LayerZeroTeller__MessagesNotAllowedTo(uint256 chainSelector)
LayerZeroTeller__ZeroMessageGasLimit
error LayerZeroTeller__ZeroMessageGasLimit()
LzTokenUnavailable
error LzTokenUnavailable()
MessageLib__ShareAmountOverflow
error MessageLib__ShareAmountOverflow()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OutboundRateLimitExceeded
error OutboundRateLimitExceeded()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TellerWithMultiAssetSupport__AssetNotSupported
error TellerWithMultiAssetSupport__AssetNotSupported()
TellerWithMultiAssetSupport__BadDepositHash
error TellerWithMultiAssetSupport__BadDepositHash()
TellerWithMultiAssetSupport__CannotDepositNative
error TellerWithMultiAssetSupport__CannotDepositNative()
TellerWithMultiAssetSupport__DualDeposit
error TellerWithMultiAssetSupport__DualDeposit()
TellerWithMultiAssetSupport__MinimumAssetsNotMet
error TellerWithMultiAssetSupport__MinimumAssetsNotMet()
TellerWithMultiAssetSupport__MinimumMintNotMet
error TellerWithMultiAssetSupport__MinimumMintNotMet()
TellerWithMultiAssetSupport__Paused
error TellerWithMultiAssetSupport__Paused()
TellerWithMultiAssetSupport__PermitFailedAndAllowanceTooLow
error TellerWithMultiAssetSupport__PermitFailedAndAllowanceTooLow()
TellerWithMultiAssetSupport__ShareLockPeriodTooLong
error TellerWithMultiAssetSupport__ShareLockPeriodTooLong()
TellerWithMultiAssetSupport__SharePremiumTooLarge
error TellerWithMultiAssetSupport__SharePremiumTooLarge()
TellerWithMultiAssetSupport__SharesAreLocked
error TellerWithMultiAssetSupport__SharesAreLocked()
TellerWithMultiAssetSupport__SharesAreUnLocked
error TellerWithMultiAssetSupport__SharesAreUnLocked()
TellerWithMultiAssetSupport__TransferDenied
error TellerWithMultiAssetSupport__TransferDenied(address from, address to, address operator)
TellerWithMultiAssetSupport__ZeroAssets
error TellerWithMultiAssetSupport__ZeroAssets()
TellerWithMultiAssetSupport__ZeroShares
error TellerWithMultiAssetSupport__ZeroShares()
creation bytecode
0x610140604052600160025534801562000016575f80fd5b506040516200547138038062005471833981016040819052620000399162000237565b5f80546001600160a01b0389166001600160a01b0319918216811783556001805490921690915560405185928592849284928d928d928d928d9286928692869286928692919033907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908490a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350506001600160a01b03831660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa15801562000126573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200014c9190620002c7565b6200015990600a620003ff565b60c0526001600160a01b0391821660a052811660e05288811661010052871695506200019e94505050505057604051632d618d8160e21b815260040160405180910390fd5b6101005160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620001e4575f80fd5b505af1158015620001f7573d5f803e3d5ffd5b5050506001600160a01b0390951661012052506200040f9950505050505050505050565b80516001600160a01b038116811462000232575f80fd5b919050565b5f805f805f805f60e0888a0312156200024e575f80fd5b62000259886200021b565b965062000269602089016200021b565b955062000279604089016200021b565b945062000289606089016200021b565b935062000299608089016200021b565b9250620002a960a089016200021b565b9150620002b960c089016200021b565b905092959891949750929550565b5f60208284031215620002d8575f80fd5b815160ff81168114620002e9575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200034457815f1904821115620003285762000328620002f0565b808516156200033657918102915b93841c939080029062000309565b509250929050565b5f826200035c57506001620003f9565b816200036a57505f620003f9565b81600181146200038357600281146200038e57620003ae565b6001915050620003f9565b60ff841115620003a257620003a2620002f0565b50506001821b620003f9565b5060208310610133831016604e8410600b8410161715620003d3575081810a620003f9565b620003df838362000304565b805f1904821115620003f557620003f5620002f0565b0290505b92915050565b5f620002e960ff8416836200034c565b60805160a05160c05160e0516101005161012051614f80620004f15f395f81816135cb0152613af601525f818161081f015281816110230152818161274801528181613d8101528181613ed70152818161411401526141cb01525f818161040a01528181610e3901528181610eb601528181610f040152611c7401525f81816119570152612f4601525f818161072d015281816118e80152612f6801525f8181610ca601528181610eda015281816119b501528181611cae01528181612cce0152818161304d01528181613388015281816134280152613c4e0152614f805ff3fe60806040526004361061039d575f3560e01c80637a9e5e4b116101de578063bf7e214f11610108578063de35f5cb1161009d578063f2fde38b1161006d578063f2fde38b14610c57578063f51b1aca14610c76578063fbfa77cf14610c95578063ff7bd03d14610cc8575f80fd5b8063de35f5cb14610bb4578063e83931af14610beb578063e96e38e214610c0a578063f07f287d14610c29575f80fd5b8063cab716e8116100d8578063cab716e814610af4578063d182221614610b07578063d555f36814610b76578063d7424e3314610b95575f80fd5b8063bf7e214f14610a78578063c272198d14610a97578063c29d2f1014610ab6578063ca5eb5e114610ad5575f80fd5b80639d5744201161017e578063b187bd261161014e578063b187bd26146109fc578063b5ba618214610a1c578063b92d0eff14610a3b578063bb0b6a5314610a4d575f80fd5b80639d574420146109795780639fdb11b614610998578063a924bf61146109be578063abd626b0146109dd575f80fd5b80638da5cb5b116101b95780638da5cb5b146108fe5780638dfd8ba11461091c57806394f512891461093b5780639a94d3d01461094e575f80fd5b80637a9e5e4b146108945780637d25a05e146108b35780638456cb59146108ea575f80fd5b80633400288b116102ca57806346b563f41161025f57806355b56c0c1161022f57806355b56c0c146107ce5780635e280f111461080e5780635f45bac814610841578063703d376814610860575f80fd5b806346b563f4146106fd5780634fb3ccc51461071c57806351c32a881461074f57806355a2d64d146107af575f80fd5b80633e64ce991161029a5780633e64ce99146106465780633f4ba83a1461066557806341fee44a1461067957806345ad6063146106de575f80fd5b80633400288b146105ca57806334dafd6b146105e95780633b575407146106085780633d935d9e14610627575f80fd5b806317442b70116103405780631ba9a458116103105780631ba9a4581461053f578063202eac571461055e57806326a64b401461057d5780632c524c42146105ab575f80fd5b806317442b70146104b65780631899ea81146104d657806318aed921146105015780631b62636c14610520575f80fd5b80630efe6a8b1161037b5780630efe6a8b1461044457806312056e2d1461046557806313137d65146104845780631568fc5814610497575f80fd5b806304ded84a146103a157806305921740146103e45780630b48a8b8146103f9575b5f80fd5b3480156103ac575f80fd5b506103cf6103bb366004614311565b60086020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103f76103f2366004614386565b610ce7565b005b348015610404575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103db565b610457610452366004614403565b610d8d565b6040519081526020016103db565b348015610470575f80fd5b506103f761047f366004614449565b610f96565b6103f761049236600461447a565b611021565b3480156104a2575f80fd5b506103f76104b136600461453b565b6110dc565b3480156104c1575f80fd5b506040805160018082526020820152016103db565b3480156104e1575f80fd5b506104576104f0366004614311565b60066020525f908152604090205481565b34801561050c575f80fd5b506103f761051b366004614311565b6111b1565b34801561052b575f80fd5b506103f761053a366004614311565b6112b9565b34801561054a575f80fd5b506103f7610559366004614311565b611335565b348015610569575f80fd5b506103f761057836600461456c565b6113ae565b348015610588575f80fd5b506103cf610597366004614311565b60076020525f908152604090205460ff1681565b3480156105b6575f80fd5b506103f76105c5366004614311565b611455565b3480156105d5575f80fd5b506103f76105e43660046145a1565b6114d1565b3480156105f4575f80fd5b506103f76106033660046145d6565b611510565b348015610613575f80fd5b506103f7610622366004614311565b611664565b348015610632575f80fd5b5061045761064136600461464d565b6116e0565b348015610651575f80fd5b506104576106603660046146ad565b6117de565b348015610670575f80fd5b506103f7611a6b565b348015610684575f80fd5b506106bd610693366004614311565b60036020525f908152604090205460ff8082169161010081049091169062010000900461ffff1683565b604080519315158452911515602084015261ffff16908201526060016103db565b3480156106e9575f80fd5b506103f76106f83660046146f4565b611ad3565b348015610708575f80fd5b506103f761071736600461470d565b611b5c565b348015610727575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561075a575f80fd5b5061078f6107693660046146f4565b600b6020525f908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016103db565b3480156107ba575f80fd5b506103f76107c93660046146f4565b611d66565b3480156107d9575f80fd5b5061078f6107e83660046146f4565b600c6020525f908152604090208054600182015460028301546003909301549192909184565b348015610819575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b34801561084c575f80fd5b506103f761085b366004614311565b611e0c565b34801561086b575f80fd5b5061087f61087a3660046146f4565b611e85565b604080519283526020830191909152016103db565b34801561089f575f80fd5b506103f76108ae366004614311565b611ee5565b3480156108be575f80fd5b506108d26108cd3660046145a1565b611fc9565b6040516001600160401b0390911681526020016103db565b3480156108f5575f80fd5b506103f7611fd1565b348015610909575f80fd5b505f5461042c906001600160a01b031681565b348015610927575f80fd5b506103f761093636600461476d565b61203f565b6104576109493660046147c1565b612158565b348015610959575f80fd5b50610457610968366004614885565b60056020525f908152604090205481565b348015610984575f80fd5b506104576109933660046146ad565b612291565b3480156109a3575f80fd5b506004546108d290600160601b90046001600160401b031681565b3480156109c9575f80fd5b506103f76109d8366004614311565b612356565b3480156109e8575f80fd5b506103f76109f736600461489c565b6123cf565b348015610a07575f80fd5b506004546103cf90600160a01b900460ff1681565b348015610a27575f80fd5b506103f7610a363660046148e4565b6124a4565b348015610a46575f80fd5b503061042c565b348015610a58575f80fd5b50610457610a673660046146f4565b600a6020525f908152604090205481565b348015610a83575f80fd5b5060015461042c906001600160a01b031681565b348015610aa2575f80fd5b5061087f610ab13660046146f4565b6125a1565b348015610ac1575f80fd5b506103f7610ad0366004614311565b6125f7565b348015610ae0575f80fd5b506103f7610aef366004614311565b6126f8565b610457610b02366004614926565b6127a2565b348015610b12575f80fd5b50610b50610b213660046146f4565b600d6020525f908152604090205460ff808216916101008104909116906201000090046001600160801b031683565b60408051931515845291151560208401526001600160801b0316908201526060016103db565b348015610b81575f80fd5b506103f7610b903660046146f4565b6128c9565b348015610ba0575f80fd5b50610457610baf3660046149b8565b612949565b348015610bbf575f80fd5b50600454610bd3906001600160601b031681565b6040516001600160601b0390911681526020016103db565b348015610bf6575f80fd5b506103f7610c05366004614311565b612994565b348015610c15575f80fd5b506103f7610c24366004614a2d565b612a20565b348015610c34575f80fd5b506103cf610c43366004614311565b60096020525f908152604090205460ff1681565b348015610c62575f80fd5b506103f7610c71366004614311565b612aab565b348015610c81575f80fd5b506103f7610c90366004614a2d565b612b26565b348015610ca0575f80fd5b5061042c7f000000000000000000000000000000000000000000000000000000000000000081565b348015610cd3575f80fd5b506103cf610ce2366004614a9b565b612bb1565b610cfc335f356001600160e01b031916612be5565b610d215760405162461bcd60e51b8152600401610d1890614ab5565b60405180910390fd5b600254600114610d435760405162461bcd60e51b8152600401610d1890614adb565b60028055600454600160a01b900460ff1615610d725760405163e0f9e71d60e01b815260040160405180910390fd5b610d80868686868686612c8b565b5050600160025550505050565b5f610da3335f356001600160e01b031916612be5565b610dbf5760405162461bcd60e51b8152600401610d1890614ab5565b600254600114610de15760405162461bcd60e51b8152600401610d1890614adb565b600280555f610def85612dc5565b90505f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03871601610f2b57345f03610e375760405163259be69560e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004015f604051808303818588803b158015610e90575f80fd5b505af1158015610ea2573d5f803e3d5ffd5b50349850610f019350506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691507f0000000000000000000000000000000000000000000000000000000000000000905087612e80565b507f0000000000000000000000000000000000000000000000000000000000000000945030610f4d565b3415610f4a57604051631cf02cf960e21b815260040160405180910390fd5b50335b610f5b868686843387612f02565b9250610f88338787866004600c9054906101000a90046001600160401b03166001600160401b03166130c1565b505060016002559392505050565b610fab335f356001600160e01b031916612be5565b610fc75760405162461bcd60e51b8152600401610d1890614ab5565b6203f480816001600160401b03161115610ff457604051631fac010160e21b815260040160405180910390fd5b600480546001600160401b03909216600160601b0267ffffffffffffffff60601b19909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316331461106c576040516391ac5e4f60e01b8152336004820152602401610d18565b6020870180359061108690611081908a6146f4565b6131f0565b146110c45761109860208801886146f4565b60405163309afaf360e21b815263ffffffff909116600482015260208801356024820152604401610d18565b6110d38787878787878761322b565b50505050505050565b6110f1335f356001600160e01b031916612be5565b61110d5760405162461bcd60e51b8152600401610d1890614ab5565b806001600160801b03165f036111365760405163c80ed59560e01b815260040160405180910390fd5b63ffffffff82165f818152600d6020908152604091829020805462010000600160901b031916620100006001600160801b038716908102919091178255835194855291840191909152917f0aa48359f83e8464fda3f4ea4bd3f2d6af01e90b46ab9464aa7d538e1772947a91015b60405180910390a1505050565b6111c6335f356001600160e01b031916612be5565b6111e25760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f8181526007602090815260408083208054600160ff1991821681179092556008845282852080548216831790556009909352818420805490931617909155517fd658022b1a3aaf6ad3b3c615253712807f21a8f7bc3e4996e10618175d4afb2b9190a26040516001600160a01b038216907f79fc685a7dbabb75a67df5e69a90602cef1f19bc465b060eab1ac56685e04a13905f90a26040516001600160a01b038216907f3afb02134e37f7205acf470adc2fc4ebb70614b1599a602d069790915380e2aa905f90a250565b6112ce335f356001600160e01b031916612be5565b6112ea5760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260096020526040808220805460ff19166001179055517f3afb02134e37f7205acf470adc2fc4ebb70614b1599a602d069790915380e2aa9190a250565b61134a335f356001600160e01b031916612be5565b6113665760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260096020526040808220805460ff19169055517f77cb944c14da76928795279d1519ce9150085a06e0a53c61d5a86fc4e0fd57c69190a250565b6113c3335f356001600160e01b031916612be5565b6113df5760405162461bcd60e51b8152600401610d1890614ab5565b63ffffffff82165f908152600d60205260409020805460ff19166001178155611411836001600160a01b03841661331e565b6040805163ffffffff851681526001600160a01b03841660208201527fe925de263dcdbdc20307c9ab92758ed8cc0edf3d173dad4a3aa54c070f27a54391016111a4565b61146a335f356001600160e01b031916612be5565b6114865760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260076020526040808220805460ff19166001179055517fd658022b1a3aaf6ad3b3c615253712807f21a8f7bc3e4996e10618175d4afb2b9190a250565b6114e6335f356001600160e01b031916612be5565b6115025760405162461bcd60e51b8152600401610d1890614ab5565b61150c828261331e565b5050565b611525335f356001600160e01b031916612be5565b6115415760405162461bcd60e51b8152600401610d1890614ab5565b82801561155557506001600160801b038116155b156115735760405163c80ed59560e01b815260040160405180910390fd5b60408051606081018252851515815284151560208083019182526001600160801b0385811684860190815263ffffffff8b165f908152600d90935294909120925183549251945161ffff1990931690151561ff00191617610100941515949094029390931762010000600160901b031916620100009190931602919091179055611606856001600160a01b03841661331e565b6040805163ffffffff871681528515156020820152841515818301526001600160a01b038416606082015290517f5dbe727bffd24a6d61a5aeef919510389c66c0deeaa82634862cf4f098961fb89181900360800190a15050505050565b611679335f356001600160e01b031916612be5565b6116955760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260086020526040808220805460ff19166001179055517f79fc685a7dbabb75a67df5e69a90602cef1f19bc465b060eab1ac56685e04a139190a250565b5f6116f6335f356001600160e01b031916612be5565b6117125760405162461bcd60e51b8152600401610d1890614ab5565b6002546001146117345760405162461bcd60e51b8152600401610d1890614adb565b600280558773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601611777576040516316df5df960e31b815260040160405180910390fd5b5f6117818a612dc5565b90506117918a8a8989898961336b565b61179f8a8a8a333386612f02565b92506117cc338b8b866004600c9054906101000a90046001600160401b03166001600160401b03166130c1565b50506001600255979650505050505050565b5f6117f4335f356001600160e01b031916612be5565b6118105760405162461bcd60e51b8152600401610d1890614ab5565b600454600160a01b900460ff161561183b5760405163e0f9e71d60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600360209081526040918290208251606081018452905460ff80821615158352610100820416151592820183905262010000900461ffff16928101929092526118a55760405163645fd19f60e11b815260040160405180910390fd5b845f036118c557604051630ea3153160e21b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b03878116600483015261197b917f00000000000000000000000000000000000000000000000000000000000000009091169063820973da90602401602060405180830381865afa15801561192f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119539190614aff565b86907f00000000000000000000000000000000000000000000000000000000000000006134c3565b91508382101561199e576040516302620f6160e61b815260040160405180910390fd5b6040516318457e6160e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318457e61906119f29086908a90879033908c90600401614b16565b5f604051808303815f87803b158015611a09575f80fd5b505af1158015611a1b573d5f803e3d5ffd5b50505050856001600160a01b03167fdcc60b41ff1c604459e6aa4a7299817416b19fc586a392f111646e26597c4af986604051611a5a91815260200190565b60405180910390a250949350505050565b611a80335f356001600160e01b031916612be5565b611a9c5760405162461bcd60e51b8152600401610d1890614ab5565b6004805460ff60a01b191690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933905f90a1565b611ae8335f356001600160e01b031916612be5565b611b045760405162461bcd60e51b8152600401610d1890614ab5565b63ffffffff81165f818152600d6020908152604091829020805461ff0019168155915192835290917fc45af64a13a09ef916a1114c59589294ec9c3095f2bfbbb093a7a96656858ded91015b60405180910390a15050565b611b71335f356001600160e01b031916612be5565b611b8d5760405162461bcd60e51b8152600401610d1890614ab5565b80611b988342614b5d565b10611bb657604051634c1eef1760e11b815260040160405180910390fd5b604080516001600160a01b038089166020830152871691810191909152606081018590526080810184905260a0810183905260c081018290525f9060e00160408051601f1981840301815291815281516020928301205f8b815260059093529120549091508114611c3a5760405163fa174ecb60e01b815260040160405180910390fd5b5f888152600560205260408120556001600160a01b03861673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14611c725785611c94565b7f00000000000000000000000000000000000000000000000000000000000000005b6040516318457e6160e01b81529096506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318457e6190611ceb908a908a908a9083908b90600401614b16565b5f604051808303815f87803b158015611d02575f80fd5b505af1158015611d14573d5f803e3d5ffd5b50505050866001600160a01b0316887faf98ea774275cadfa3e477a7b52cba03e01197445a76bd5d0d561608708c362483604051611d5491815260200190565b60405180910390a35050505050505050565b611d7b335f356001600160e01b031916612be5565b611d975760405162461bcd60e51b8152600401610d1890614ab5565b63ffffffff81165f908152600d60205260408120805471ffffffffffffffffffffffffffffffffffff19169055611dcf90829061331e565b60405163ffffffff821681527f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d5906020015b60405180910390a150565b611e21335f356001600160e01b031916612be5565b611e3d5760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260086020526040808220805460ff19169055517f039bcf51833310242b8b7c6aa0fbabf1bf2b5e5270807ee020f1920ef200666b9190a250565b63ffffffff81165f908152600c6020908152604080832081516080810183528154808252600183015494820185905260028301549382018490526003909201546060820181905285949193611edb9392916134de565b9250925050915091565b5f546001600160a01b0316331480611f76575060015460405163b700961360e01b81526001600160a01b039091169063b700961390611f3790339030906001600160e01b03195f351690600401614b70565b602060405180830381865afa158015611f52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f769190614b9d565b611f7e575f80fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198905f90a350565b5f5b92915050565b611fe6335f356001600160e01b031916612be5565b6120025760405162461bcd60e51b8152600401610d1890614ab5565b6004805460ff60a01b1916600160a01b1790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752905f90a1565b612054335f356001600160e01b031916612be5565b6120705760405162461bcd60e51b8152600401610d1890614ab5565b6103e861ffff8216111561209757604051636c5cde8760e01b815260040160405180910390fd5b6040805160608082018352851515808352851515602080850182815261ffff8881168789018181526001600160a01b038e165f818152600387528b902099518a549551925161ffff1990961690151561ff00191617610100921515929092029190911763ffff0000191662010000949093169390930291909117909655865193845290830191909152938101929092527fe08301321781ac43935a2099b2c3fd42de0a0ee87a519cac00e8c9cecd26ff12910160405180910390a250505050565b5f61216e335f356001600160e01b031916612be5565b61218a5760405162461bcd60e51b8152600401610d1890614ab5565b6002546001146121ac5760405162461bcd60e51b8152600401610d1890614adb565b600280558c73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038216016121ef576040516316df5df960e31b815260040160405180910390fd5b5f6121f98f612dc5565b90506122098f8f8e8e8e8e61336b565b6122178f8f8f333386612f02565b925050612245338f8f856004600c9054906101000a90046001600160401b03166001600160401b03166130c1565b6001600160601b0382111561226d576040516389588ab360e01b815260040160405180910390fd5b61227b828888888888612c8b565b5060016002559c9b505050505050505050505050565b5f6122a7335f356001600160e01b031916612be5565b6122c35760405162461bcd60e51b8152600401610d1890614ab5565b6002546001146122e55760405162461bcd60e51b8152600401610d1890614adb565b600280555f6122f386612dc5565b9050612303868686338786612f02565b9150856001600160a01b03167f6f9b974223f85a1ae805c33b8b519039e2435481d949db1110de151a94d587af8660405161234091815260200190565b60405180910390a2506001600255949350505050565b61236b335f356001600160e01b031916612be5565b6123875760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f81815260076020526040808220805460ff19169055517fae893dda71e2eee548f8291f458cceae4bd22b56a79906928591e4420444c0e99190a250565b6001600160a01b0383165f9081526007602052604090205460ff168061240c57506001600160a01b0382165f9081526008602052604090205460ff165b8061242e57506001600160a01b0381165f9081526009602052604090205460ff165b1561246757604051632821264f60e01b81526001600160a01b038085166004830152808416602483015282166044820152606401610d18565b6001600160a01b0383165f9081526006602052604090205442101561249f5760405163f64059db60e01b815260040160405180910390fd5b505050565b6124b9335f356001600160e01b031916612be5565b6124d55760405162461bcd60e51b8152600401610d1890614ab5565b806001600160801b03165f036124fe5760405163c80ed59560e01b815260040160405180910390fd5b63ffffffff83165f908152600d60205260409020805461010071ffffffffffffffffffffffffffffffffff0019909116620100006001600160801b0385160217178155612554846001600160a01b03851661331e565b6040805163ffffffff861681526001600160a01b03851660208201527f34fe916485e02ec88e487b0e611e5c9bacabba9e3eaae7a900aa08be8197d419910160405180910390a150505050565b63ffffffff81165f908152600b6020908152604080832081516080810183528154808252600183015494820185905260028301549382018490526003909201546060820181905285949193611edb9392916134de565b61260c335f356001600160e01b031916612be5565b6126285760405162461bcd60e51b8152600401610d1890614ab5565b6001600160a01b0381165f818152600760209081526040808320805460ff199081169091556008835281842080548216905560099092528083208054909216909155517fae893dda71e2eee548f8291f458cceae4bd22b56a79906928591e4420444c0e99190a26040516001600160a01b038216907f039bcf51833310242b8b7c6aa0fbabf1bf2b5e5270807ee020f1920ef200666b905f90a26040516001600160a01b038216907f77cb944c14da76928795279d1519ce9150085a06e0a53c61d5a86fc4e0fd57c6905f90a250565b61270d335f356001600160e01b031916612be5565b6127295760405162461bcd60e51b8152600401610d1890614ab5565b60405163ca5eb5e160e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b158015612789575f80fd5b505af115801561279b573d5f803e3d5ffd5b5050505050565b5f6127b8335f356001600160e01b031916612be5565b6127d45760405162461bcd60e51b8152600401610d1890614ab5565b6002546001146127f65760405162461bcd60e51b8152600401610d1890614adb565b600280558873eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601612839576040516316df5df960e31b815260040160405180910390fd5b5f6128438b612dc5565b90506128538b8b8b333386612f02565b9250612880338c8c866004600c9054906101000a90046001600160401b03166001600160401b03166130c1565b6001600160601b038311156128a8576040516389588ab360e01b815260040160405180910390fd5b6128b6838989898989612c8b565b5050600160025598975050505050505050565b6128de335f356001600160e01b031916612be5565b6128fa5760405162461bcd60e51b8152600401610d1890614ab5565b63ffffffff81165f818152600d6020908152604091829020805460ff19168155915192835290917f1cb867ed6a020e020ea220d4f48bb8e36552abf9095e093e377d33933f2b31e49101611b50565b604080518082019091526001600160601b03861681526001600160a01b03851660208201525f908161297a82613559565b9050612988818787876135a0565b98975050505050505050565b6001600160a01b0381165f9081526007602052604090205460ff16156129e557604051632821264f60e01b81526001600160a01b03821660048201525f602482018190526044820152606401610d18565b6001600160a01b0381165f90815260066020526040902054421015612a1d5760405163f64059db60e01b815260040160405180910390fd5b50565b612a35335f356001600160e01b031916612be5565b612a515760405162461bcd60e51b8152600401610d1890614ab5565b61150c8282808060200260200160405190810160405280939291908181526020015f905b82821015612aa157612a9260608302860136819003810190614bec565b81526020019060010190612a75565b505050505061376f565b612ac0335f356001600160e01b031916612be5565b612adc5760405162461bcd60e51b8152600401610d1890614ab5565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b612b3b335f356001600160e01b031916612be5565b612b575760405162461bcd60e51b8152600401610d1890614ab5565b61150c8282808060200260200160405190810160405280939291908181526020015f905b82821015612ba757612b9860608302860136819003810190614bec565b81526020019060010190612b7b565b5050505050613861565b5f60208201803590600a908390612bc890866146f4565b63ffffffff16815260208101919091526040015f20541492915050565b6001545f906001600160a01b03168015801590612c6c575060405163b700961360e01b81526001600160a01b0382169063b700961390612c2d90879030908890600401614b70565b602060405180830381865afa158015612c48573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c6c9190614b9d565b80612c8357505f546001600160a01b038581169116145b949350505050565b612c96335f336123cf565b6040516318457e6160e01b81525f600482018190526024820181905260448201523360648201526001600160601b03871660848201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906318457e619060a4015f604051808303815f87803b158015612d17575f80fd5b505af1158015612d29573d5f803e3d5ffd5b5050604080518082019091526001600160601b03891681526001600160a01b038816602082015291505f9050612d5e82613559565b90505f612d6e8288888888613953565b6040516001600160601b038b1681529091506001600160a01b0389169082907fe0ec62d39b054dc2fd626dbc271483735df6e6fa1ef8389754bf8ab27a75eab29060200160405180910390a3505050505050505050565b604080516060810182525f8082526020820181905291810191909152600454600160a01b900460ff1615612e0c5760405163e0f9e71d60e01b815260040160405180910390fd5b506001600160a01b0381165f908152600360209081526040918290208251606081018452905460ff8082161515808452610100830490911615159383019390935262010000900461ffff1692810192909252612e7b5760405163645fd19f60e11b815260040160405180910390fd5b919050565b5f60405163095ea7b360e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505080612efc5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610d18565b50505050565b5f855f03612f235760405163259be69560e11b815260040160405180910390fd5b604051634104b9ed60e11b81526001600160a01b038881166004830152612fd9917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000169063820973da90602401602060405180830381865afa158015612fad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fd19190614aff565b8891906134c3565b90505f826040015161ffff1611612ff05780613013565b61301382604001516127106130059190614c2d565b829061ffff166127106134c3565b9050848110156130365760405163097b2ad560e31b815260040160405180910390fd5b604051631ceb5d1960e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906339d6ba329061308a9087908b908b9089908890600401614b16565b5f604051808303815f87803b1580156130a1575f80fd5b505af11580156130b3573d5f803e3d5ffd5b505050509695505050505050565b600480545f919082906130dc906001600160601b0316614c4f565b82546001600160601b039182166101009390930a8381029202191617909155905081156131805761310d8242614c74565b6001600160a01b038781165f81815260066020908152604091829020949094558051938401919091529087169082015260608101859052608081018490524260a082015260c0810183905260e00160408051601f1981840301815291815281516020928301205f84815260059093529120555b846001600160a01b0316866001600160a01b0316827fe96d7872363f475d18b2f5390caaa5eaa96b2d38e42c62afe4ac08ebd2b13c3a878742886040516131e0949392919093845260208401929092526040830152606082015260800190565b60405180910390a4505050505050565b63ffffffff81165f908152600a602052604081205480611fcb5760405163f6ff4fb760e01b815263ffffffff84166004820152602401610d18565b5f600d8161323c60208b018b6146f4565b63ffffffff16815260208082019290925260409081015f208151606081018352905460ff808216151580845261010083049091161515948301949094526201000090046001600160801b03169181019190915291506132c4576132a260208901896146f4565b6040516315b73a2960e21b815263ffffffff9091166004820152602401610d18565b5f6132d186880188614885565b90506133096132e360208b018b6146f4565b6040805180820190915260a084901c81526001600160a01b038416602082015251613ba6565b6133138882613c1b565b505050505050505050565b63ffffffff82165f818152600a6020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9101611b50565b60405163d505accf60e01b81523360048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018790526064820186905260ff8516608483015260a4820184905260c4820183905287169063d505accf9060e4015f604051808303815f87803b1580156133f6575f80fd5b505af1925050508015613407575060015b6134bb57604051636eb1769f60e11b81523360048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015286919088169063dd62ed3e90604401602060405180830381865afa158015613478573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061349c9190614aff565b10156134bb576040516301b8851f60e41b815260040160405180910390fd5b505050505050565b5f825f1904841183021582026134d7575f80fd5b5091020490565b5f80806134eb8642614b5d565b90508381106134ff575f925084915061354f565b5f8461350b8388614c87565b6135159190614c9e565b90508088111561352e576135298189614b5d565b613530565b5f5b935083861115613549576135448487614b5d565b61354b565b5f5b9250505b5094509492505050565b80515f906001600160601b03101561358457604051633524486360e01b815260040160405180910390fd5b81516020909201516001600160a01b031660a09290921b171790565b5f6001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061360057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561361e57604051637f3cd08160e11b815260040160405180910390fd5b5f61362b848601866146f4565b63ffffffff81165f908152600d60209081526040918290208251606081018452905460ff8082161515835261010082041615159282018390526201000090046001600160801b031692810192909252919250906136a35760405163420eae3760e01b815263ffffffff83166004820152602401610d18565b5f876040516020016136b791815260200190565b60405160208183030381529060405290505f6136ff83604001515f6136f860408051600360f01b602082015281516002818303018152602290910190915290565b9190613d07565b90505f61372e8584846001600160a01b038b1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415613d6c565b90506001600160a01b03871673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1461375e578060200151613761565b80515b9a9950505050505050505050565b5f5b8151811015613831575f600b5f84848151811061379057613790614cbd565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f2090506137dc8383815181106137cb576137cb614cbd565b60200260200101515f01515f613e4a565b8282815181106137ee576137ee614cbd565b602002602001015160200151816002018190555082828151811061381457613814614cbd565b602090810291909101015160400151600390910155600101613771565b507f55254e344b7fc8e2e038c1f7f20a1c7afe659c1a3bbfc4e35dd1ca9bba0ca0a081604051611e019190614cd1565b5f5b8151811015613923575f600c5f84848151811061388257613882614cbd565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f2090506138ce8383815181106138bd576138bd614cbd565b60200260200101515f01515f613ba6565b8282815181106138e0576138e0614cbd565b602002602001015160200151816002018190555082828151811061390657613906614cbd565b602090810291909101015160400151600390910155600101613863565b507f983af742b0b5ca79aa5c0be76cea126e1baf3139ecd04624deac13853c4bebde81604051611e019190614cd1565b5f80613961858701876146f4565b90506139958161398f896040805180820190915260a082901c81526001600160a01b03909116602082015290565b51613e4a565b63ffffffff81165f908152600d60209081526040918290208251606081018452905460ff8082161515835261010082041615159282018390526201000090046001600160801b031692810192909252613a095760405163420eae3760e01b815263ffffffff83166004820152602401610d18565b5f88604051602001613a1d91815260200190565b60405160208183030381529060405290505f613a5e83604001515f6136f860408051600360f01b602082015281516002818303018152602290910190915290565b90505f613a8d8584846001600160a01b038c1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415613d6c565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03891601613af4578051871015613aef57805160405163f5ac3fa760e01b815263ffffffff87166004820152602481019190915260448101889052606401610d18565b613b87565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031603613b6e578681602001511115613aef57602081015160405163f5ac3fa760e01b815263ffffffff87166004820152602481019190915260448101889052606401610d18565b604051637f3cd08160e11b815260040160405180910390fd5b5f613b958685858533613ea6565b519c9b505050505050505050505050565b63ffffffff82165f908152600c6020526040812080546001820154600283015460038401549394938493613bdd93909290916134de565b9150915080841115613c0257604051636a526abb60e01b815260040160405180910390fd5b613c0c8483614c74565b83555050426001909101555050565b60408051808201825260a083901c8082526001600160a01b03808516602084018190529351631ceb5d1960e11b815292937f0000000000000000000000000000000000000000000000000000000000000000909116926339d6ba3292613c8a925f928392839291600401614b16565b5f604051808303815f87803b158015613ca1575f80fd5b505af1158015613cb3573d5f803e3d5ffd5b5050505080602001516001600160a01b0316837fb944fddc61d7fedb8b736790454ba972000703b0d21c7481d6dbf95b7c2cc2f1835f0151604051613cfa91815260200190565b60405180910390a3505050565b6060836003613d16825f613fac565b61ffff1614613d4957613d29815f613fac565b604051633a51740d60e01b815261ffff9091166004820152602401610d18565b5f613d548585614008565b9050613d6286600183614081565b9695505050505050565b604080518082019091525f80825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff168152602001613dce896131f0565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401613e03929190614d7c565b6040805180830381865afa158015613e1d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e419190614e4c565b95945050505050565b63ffffffff82165f908152600b6020526040812080546001820154600283015460038401549394938493613e8193909290916134de565b9150915080841115613c02576040516324292aa760e01b815260040160405180910390fd5b613eae6142af565b5f613ebb845f01516140ea565b602085015190915015613ed557613ed58460200151614111565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff168152602001613f258c6131f0565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b8152600401613f60929190614d7c565b60806040518083038185885af1158015613f7c573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613fa19190614e66565b979650505050505050565b5f613fb8826002614c74565b83511015613fff5760405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606401610d18565b50016002015190565b60606001600160801b0382161561405057604080516001600160801b0319608086811b8216602084015285901b1660308201520160405160208183030381529060405261407a565b6040516001600160801b0319608085901b1660208201526030016040516020818303038152906040525b9392505050565b6060836003614090825f613fac565b61ffff16146140a357613d29815f613fac565b8460016140b085516141f0565b6140bb906001614eae565b86866040516020016140d1959493929190614ec9565b6040516020818303038152906040529150509392505050565b5f81341461410d576040516304fb820960e51b8152346004820152602401610d18565b5090565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa15801561416e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141929190614f2f565b90506001600160a01b0381166141bb576040516329b99a9560e11b815260040160405180910390fd5b61150c6001600160a01b038216337f00000000000000000000000000000000000000000000000000000000000000008561421e565b5f61ffff82111561410d576040516306dfcc6560e41b81526010600482015260248101839052604401610d18565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f51141617169150508061279b5760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610d18565b60405180606001604052805f80191681526020015f6001600160401b031681526020016142ed60405180604001604052805f81526020015f81525090565b905290565b6001600160a01b0381168114612a1d575f80fd5b8035612e7b816142f2565b5f60208284031215614321575f80fd5b813561407a816142f2565b80356001600160601b0381168114612e7b575f80fd5b5f8083601f840112614352575f80fd5b5081356001600160401b03811115614368575f80fd5b60208301915083602082850101111561437f575f80fd5b9250929050565b5f805f805f8060a0878903121561439b575f80fd5b6143a48761432c565b955060208701356143b4816142f2565b945060408701356001600160401b038111156143ce575f80fd5b6143da89828a01614342565b90955093505060608701356143ee816142f2565b80925050608087013590509295509295509295565b5f805f60608486031215614415575f80fd5b8335614420816142f2565b95602085013595506040909401359392505050565b6001600160401b0381168114612a1d575f80fd5b5f60208284031215614459575f80fd5b813561407a81614435565b5f60608284031215614474575f80fd5b50919050565b5f805f805f805f60e0888a031215614490575f80fd5b61449a8989614464565b96506060880135955060808801356001600160401b03808211156144bc575f80fd5b6144c88b838c01614342565b909750955060a08a013591506144dd826142f2565b90935060c089013590808211156144f2575f80fd5b506144ff8a828b01614342565b989b979a50959850939692959293505050565b803563ffffffff81168114612e7b575f80fd5b80356001600160801b0381168114612e7b575f80fd5b5f806040838503121561454c575f80fd5b61455583614512565b915061456360208401614525565b90509250929050565b5f806040838503121561457d575f80fd5b61458683614512565b91506020830135614596816142f2565b809150509250929050565b5f80604083850312156145b2575f80fd5b6145bb83614512565b946020939093013593505050565b8015158114612a1d575f80fd5b5f805f805f60a086880312156145ea575f80fd5b6145f386614512565b94506020860135614603816145c9565b93506040860135614613816145c9565b92506060860135614623816142f2565b915061463160808701614525565b90509295509295909350565b803560ff81168114612e7b575f80fd5b5f805f805f805f60e0888a031215614663575f80fd5b873561466e816142f2565b96506020880135955060408801359450606088013593506146916080890161463d565b925060a0880135915060c0880135905092959891949750929550565b5f805f80608085870312156146c0575f80fd5b84356146cb816142f2565b9350602085013592506040850135915060608501356146e9816142f2565b939692955090935050565b5f60208284031215614704575f80fd5b61407a82614512565b5f805f805f805f60e0888a031215614723575f80fd5b873596506020880135614735816142f2565b95506040880135614745816142f2565b969995985095966060810135965060808101359560a0820135955060c0909101359350915050565b5f805f8060808587031215614780575f80fd5b843561478b816142f2565b9350602085013561479b816145c9565b925060408501356147ab816145c9565b9150606085013561ffff811681146146e9575f80fd5b5f805f805f805f805f805f806101608d8f0312156147dd575f80fd5b6147e78d356142f2565b8c359b5060208d01359a5060408d0135995060608d0135985061480c60808e0161463d565b975060a08d0135965060c08d0135955061482960e08e01356142f2565b60e08d013594506001600160401b036101008e01351115614848575f80fd5b6148598e6101008f01358f01614342565b909450925061486b6101208e01614306565b91506101408d013590509295989b509295989b509295989b565b5f60208284031215614895575f80fd5b5035919050565b5f805f606084860312156148ae575f80fd5b83356148b9816142f2565b925060208401356148c9816142f2565b915060408401356148d9816142f2565b809150509250925092565b5f805f606084860312156148f6575f80fd5b6148ff84614512565b9250602084013561490f816142f2565b915061491d60408501614525565b90509250925092565b5f805f805f805f8060e0898b03121561493d575f80fd5b8835614948816142f2565b975060208901359650604089013595506060890135614966816142f2565b945060808901356001600160401b03811115614980575f80fd5b61498c8b828c01614342565b90955093505060a08901356149a0816142f2565b8092505060c089013590509295985092959890939650565b5f805f805f608086880312156149cc575f80fd5b6149d58661432c565b945060208601356149e5816142f2565b935060408601356001600160401b038111156149ff575f80fd5b614a0b88828901614342565b9094509250506060860135614a1f816142f2565b809150509295509295909350565b5f8060208385031215614a3e575f80fd5b82356001600160401b0380821115614a54575f80fd5b818501915085601f830112614a67575f80fd5b813581811115614a75575f80fd5b866020606083028501011115614a89575f80fd5b60209290920196919550909350505050565b5f60608284031215614aab575f80fd5b61407a8383614464565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b5f60208284031215614b0f575f80fd5b5051919050565b6001600160a01b039586168152938516602085015260408401929092529092166060820152608081019190915260a00190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115611fcb57611fcb614b49565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b5f60208284031215614bad575f80fd5b815161407a816145c9565b604051606081016001600160401b0381118282101715614be657634e487b7160e01b5f52604160045260245ffd5b60405290565b5f60608284031215614bfc575f80fd5b614c04614bb8565b614c0d83614512565b815260208301356020820152604083013560408201528091505092915050565b61ffff828116828216039080821115614c4857614c48614b49565b5092915050565b5f6001600160601b03808316818103614c6a57614c6a614b49565b6001019392505050565b80820180821115611fcb57611fcb614b49565b8082028115828204841417611fcb57611fcb614b49565b5f82614cb857634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603260045260245ffd5b602080825282518282018190525f919060409081850190868401855b82811015614d22578151805163ffffffff16855286810151878601528501518585015260609093019290850190600101614ced565b5091979650505050505050565b5f5b83811015614d49578181015183820152602001614d31565b50505f910152565b5f8151808452614d68816020860160208601614d2f565b601f01601f19169290920160200192915050565b6040815263ffffffff8351166040820152602083015160608201525f604084015160a06080840152614db160e0840182614d51565b90506060850151603f198483030160a0850152614dce8282614d51565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b5f60408284031215614e04575f80fd5b604051604081018181106001600160401b0382111715614e3257634e487b7160e01b5f52604160045260245ffd5b604052825181526020928301519281019290925250919050565b5f60408284031215614e5c575f80fd5b61407a8383614df4565b5f60808284031215614e76575f80fd5b614e7e614bb8565b825181526020830151614e9081614435565b6020820152614ea28460408501614df4565b60408201529392505050565b61ffff818116838216019080821115614c4857614c48614b49565b5f8651614eda818460208b01614d2f565b6001600160f81b031960f888811b82169285019283526001600160f01b031960f089901b16600184015286901b1660038201528351614f20816004840160208801614d2f565b01600401979650505050505050565b5f60208284031215614f3f575f80fd5b815161407a816142f256fea26469706673582212200216655861d29097518938c81858a539139f28246f820f0e447622517a4ed44164736f6c63430008150033000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e00000000000000000000000008c6f91e2b681faf5e17227f2a44c307b3c1364c000000000000000000000000c315d6e14ddcdc7407784e2caf815d131bc1d3e700000000000000000000000053000000000000000000000000000000000000040000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e0000000000000000000000000000000000000000000000000000000000000000