0 txs
13 calls
constructor
constructor(uint256 appVersion_, string port)
functions
appVersion
viewfunction appVersion() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getChainId
viewfunction getChainId(string localChannel, bool checksAppVersion) view returns (uint256 counterpartyChainId)
getPool
viewfunction getPool(uint256 localPoolId) view returns (address localPool)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
IBC_HANDLER_ROLE
viewfunction IBC_HANDLER_ROLE() view returns (bytes32)
ibcAddress
viewfunction ibcAddress() view returns (address)
onChanCloseInit
purefunction onChanCloseInit(tuple) pure
onChanOpenInit
viewfunction onChanOpenInit(tuple msg_) view returns (address, string version)
onChanOpenTry
viewfunction onChanOpenTry(tuple msg_) view returns (address, string)
onTimeoutPacket
purefunction onTimeoutPacket(tuple, address) pure
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
RELAYER_FEE_OWNER_ROLE
viewfunction RELAYER_FEE_OWNER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
TIMEOUT_TIMESTAMP
viewfunction TIMEOUT_TIMESTAMP() view returns (uint64)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
deposit
nonpayablefunction deposit(uint256 poolId, uint256 amountLD, address to)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(tuple param)
onAcknowledgementPacket
nonpayablefunction onAcknowledgementPacket(tuple, bytes, address)
onChanCloseConfirm
nonpayablefunction onChanCloseConfirm(tuple)
onChanOpenAck
nonpayablefunction onChanOpenAck(tuple msg_)
onChanOpenConfirm
nonpayablefunction onChanOpenConfirm(tuple msg_)
onRecvPacket
nonpayablefunction onRecvPacket(tuple packet, address) returns (bytes acknowledgement)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
transferPool
payablefunction transferPool(string srcChannel, uint256 srcPoolId, uint256 dstPoolId, uint256 amountLD, uint256 minAmountLD, bytes to, uint256 refuelAmount, tuple externalInfo, address refundTo) payable
transferToken
payablefunction transferToken(string srcChannel, string denom, uint256 amountLD, bytes to, uint256 refuelAmount, tuple externalInfo, address refundTo) payable
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawInstant
nonpayablefunction withdrawInstant(uint256 srcPoolId, uint256 amountLP, address to) returns (uint256 amountGD)
withdrawLocal
payablefunction withdrawLocal(string srcChannel, uint256 srcPoolId, uint256 dstPoolId, uint256 amountLP, bytes to, address refundTo) payable
withdrawRemote
payablefunction withdrawRemote(string srcChannel, uint256 srcPoolId, uint256 dstPoolId, uint256 amountLP, uint256 minAmountLD, bytes to, address refundTo) payable
events
Initialized
event Initialized(uint64 version)
RefuelDstCapped
event RefuelDstCapped(uint256 chainId, uint64 sequence, address to, uint256 requestAmount, uint256 actualAmount)
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)
Unrecoverable
event Unrecoverable(uint256 chainId, uint64 sequence)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
IBCModuleChannelCloseNotAllowed
error IBCModuleChannelCloseNotAllowed(string portId, string channelId)
IBCModuleChannelOrderNotAllowed
error IBCModuleChannelOrderNotAllowed(string portId, string channelId, uint8 order)
IBCModuleInvalidSender
error IBCModuleInvalidSender(address sender)
InvalidInitialization
error InvalidInitialization()
InvalidShortString
error InvalidShortString()
NotInitializing
error NotInitializing()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeTransferFromFailed
error SafeTransferFromFailed(bool success, bytes data)
StringTooLong
error StringTooLong(string str)
TokiCannotCloseChannel
error TokiCannotCloseChannel()
TokiCannotTimeoutPacket
error TokiCannotTimeoutPacket()
TokiChannelNotFound
error TokiChannelNotFound(string portId, string channelId)
TokiContractNotAllowed
error TokiContractNotAllowed(string name, address addr)
TokiDepeg
error TokiDepeg(uint256 poolId)
TokiDstChainIdNotAccepted
error TokiDstChainIdNotAccepted(uint256 dstChainId)
TokiDstOuterGasShouldBeZero
error TokiDstOuterGasShouldBeZero()
TokiExceed
error TokiExceed(string name, uint256 value, uint256 limit)
TokiExceedAdd
error TokiExceedAdd(string name, uint256 current, uint256 add, uint256 limit)
TokiFailToRefund
error TokiFailToRefund()
TokiFallbackUnauthorized
error TokiFallbackUnauthorized(address caller)
TokiFlowRateLimitExceed
error TokiFlowRateLimitExceed(uint256 current, uint256 add, uint256 limit)
TokiInsufficientAmount
error TokiInsufficientAmount(string name, uint256 value, uint256 needed)
TokiInsufficientPoolLiquidity
error TokiInsufficientPoolLiquidity(uint256 value, uint256 needed)
TokiInvalidAppVersion
error TokiInvalidAppVersion(uint256 expected, uint256 actual)
TokiInvalidBalanceDeficitFeeZone
error TokiInvalidBalanceDeficitFeeZone()
TokiInvalidPacketType
error TokiInvalidPacketType(uint8)
TokiInvalidProposedVersion
error TokiInvalidProposedVersion(string version)
TokiInvalidRecipientBytes
error TokiInvalidRecipientBytes()
TokiInvalidRetryType
error TokiInvalidRetryType(uint8)
TokiInvalidSafeZoneRange
error TokiInvalidSafeZoneRange(uint256 min, uint256 max)
TokiMock
error TokiMock(string message)
TokiNativeTransferIsFailed
error TokiNativeTransferIsFailed(address to, uint256 value)
TokiNoFee
error TokiNoFee()
TokiNoPeerPoolInfo
error TokiNoPeerPoolInfo()
TokiNoPool
error TokiNoPool(uint256 poolId)
TokiNoRevertReceive
error TokiNoRevertReceive()
TokiNotEnoughNativeFee
error TokiNotEnoughNativeFee(uint256 value, uint256 limit)
TokiPeerPoolInfoNotFound
error TokiPeerPoolInfoNotFound(uint256 chainId, uint256 poolId)
TokiPeerPoolIsAlreadyActive
error TokiPeerPoolIsAlreadyActive(uint256 chainId, uint256 poolId)
TokiPeerPoolIsNotReady
error TokiPeerPoolIsNotReady(uint256 peerChainId, uint256 peerPoolId)
TokiPeerPoolIsRegistered
error TokiPeerPoolIsRegistered(uint256 chainId, uint256 poolId)
TokiPoolRecvIsFailed
error TokiPoolRecvIsFailed(uint256 poolId)
TokiPoolWithdrawConfirmIsFailed
error TokiPoolWithdrawConfirmIsFailed(uint256 poolId)
TokiPriceIsExpired
error TokiPriceIsExpired(uint256 updatedAt)
TokiPriceIsNotPositive
error TokiPriceIsNotPositive(int256 value)
TokiRequireOrderedChannel
error TokiRequireOrderedChannel()
TokiRetryExpired
error TokiRetryExpired(uint256 expiryBlock)
TokiSamePool
error TokiSamePool(uint256 poolId, address pool)
TokiSlippageTooHigh
error TokiSlippageTooHigh(uint256 amountGD, uint256 eqReward, uint256 eqFee, uint256 minAmountGD)
TokiTransferIsFailed
error TokiTransferIsFailed(address token, address to, uint256 value)
TokiTransferIsStop
error TokiTransferIsStop()
TokiUnregisteredChainId
error TokiUnregisteredChainId(string channel)
TokiUnregisteredPoolId
error TokiUnregisteredPoolId(uint256 poolId)
TokiZeroAddress
error TokiZeroAddress(string message)
TokiZeroAmount
error TokiZeroAmount(string message)
TokiZeroValue
error TokiZeroValue(string message)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60e0604052346101f1576153378038038061001981610209565b9283398101906040818303126101f1578051602082015190916001600160401b0382116101f157019082601f830112156101f15781516001600160401b0381116101f557610070601f8201601f1916602001610209565b928184526020840194602083830101116101f157815f926020809301875e840101523060c052608052601f8151116101b557519051602082106101a5575b1760a0525f5160206153175f395f51905f525460ff8160401c16610196576002600160401b03196001600160401b03821601610140575b6040516150e8908161022f82396080518181816104b101528181610dc301528181610df20152818161164801528181611c7c015281816122410152612767015260a05181614bbb015260c0518181816110a801526111e90152f35b6001600160401b0319166001600160401b039081175f5160206153175f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f6100e5565b63f92ee8a960e01b5f5260045ffd5b5f198260200360031b1b166100ae565b60449060405192839163305a27a960e01b8352602060048401525180918160248501528484015e5f828201840152601f01601f19168101030190fd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b038111838210176101f55760405256fe608060405260043610612602575f3560e01c806301ffc9a71461021b578063068bcd8d146102165780630b7b4ccb1461021157806312f6ff6f1461020c57806314caf33a146102075780632301c6f514610202578063248a9ca3146101fd5780632f2ff15d146101f857806330693820146101f357806336568abe146101ee57806338c858bc146101e95780633bdd7583146101e45780633c7df3fb146101df5780634f1ef286146101da57806352c7157d146101d557806352d1902d146101d05780635e8438d8146101cb578063696a9bf4146101c65780636da937c4146101c157806381b174dc146101bc5780638dbdbe6d146101b757806391d14854146101b25780639ed1a871146101ad578063a217fddf146101a8578063a7a61e66146101a3578063ad3cb1cc1461019e578063b148b0fd14610199578063be967c3814610194578063cef1cb531461018f578063d547741f1461018a578063dbca82b914610185578063e9622896146101805763fb8b532e0361260257611980565b6118f1565b6117c5565b611791565b6116e0565b61166b565b611631565b6115ea565b611555565b61153b565b611494565b611436565b6112d2565b6112aa565b611289565b611255565b61122e565b6111d7565b6111ae565b611066565b611048565b610f07565b610eb5565b610e35565b610d13565b610b24565b610afe565b6106d1565b610580565b610434565b610371565b6102ca565b346102c65760203660031901126102c65760043563ffffffff60e01b81168091036102c65761027790630edfd02960e11b811490811561029d575b811561028c575b811561027b575b5060405190151581529081906020820190565b0390f35b630c7cf94360e21b1490505f610264565b633677d09160e01b8114915061025d565b90506301ffc9a760e01b811480156102b6575b90610256565b50631a5aa6fd60e21b81146102b0565b5f80fd5b346102c65760203660031901126102c65760206102e8600435611a05565b6040516001600160a01b039091168152f35b60206003198201126102c6576004356001600160401b0381116102c65760c090600401809203126102c65790565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b6001600160a01b03909116815260406020820181905261036e92910190610328565b90565b346102c65761037f366102fa565b610387612699565b600261039282611ac5565b61039b81611aa7565b036104255760a081016103b86103b18284611ad2565b3691610cb8565b916103c1612764565b928051801515918261040e575b50506103e3576040518061027785308361034c565b6103ed9250611ad2565b60405163c13622c960e01b815291829161040a9160048401611b04565b0390fd5b602091925001208351602085012014155f806103ce565b630d1a1f4160e21b5f5260045ffd5b346102c65760203660031901126102c6576004356001600160401b0381116102c6578060040190606060031982360301126102c657610471612699565b604481016104826103b18285611ad2565b60208151910120610491612764565b60208151910120036104db576104d760016104af6024850186611ad2565b7f00000000000000000000000000000000000000000000000000000000000000009391611b2b565b0155005b6103ed9083611ad2565b6001600160a01b038116036102c657565b60043590610503826104e5565b565b60243590610503826104e5565b60443590610503826104e5565b60643590610503826104e5565b60843590610503826104e5565b60a43590610503826104e5565b60c43590610503826104e5565b60e43590610503826104e5565b60609060031901126102c657600435906024359060443561036e816104e5565b346102c65761058e36610560565b61059992919261290b565b8215610649576020916064906001600160a01b03906105b790611a05565b604051631fe01e1360e11b815233600482015260248101969096526001600160a01b039093166044860152849283915f91165af1801561064457610277915f91610615575b50610605612940565b6040519081529081906020820190565b610637915060203d60201161063d575b61062f8183610c00565b810190611b63565b5f6105fc565b503d610625565b6119fa565b60405163495279c560e11b81526020600482015260086024820152670616d6f756e744c560c41b6044820152606490fd5b90816101209103126102c65790565b60406003198201126102c657600435906001600160401b0382116102c6576106b39160040161067a565b9060243561036e816104e5565b90602061036e928181520190610328565b346102c6576106df36610689565b506106e8612699565b6106f061290b565b60a0810161070b6107046103b18385611ad2565b6020015190565b60ff8116600181036108705750506107296103b161072e9284611ad2565b613495565b906080810161073d8183611ad2565b6107686040869493940191825194602088019561076387519260808b0151943691610cb8565b612e2b565b61077c60a086015160148082511491015191565b909290156107f857918493916107996107d997946107a197611ad2565b969095611b72565b92519051906060850151936107d460e060c0880151970151976107c2610c21565b60018152995f60208c01523691610cb8565b6136a2565b6102776107e4611b7c565b6107ec612940565b604051918291826106c0565b61084b92508061084060605f5160206150135f395f51905f52986108469561083b6108519961082a6103b1988d611ad2565b959091519351940151943691610cb8565b61359e565b85611ad2565b611c12565b91611b72565b604080519283526001600160401b0391909116602083015290a16107d9565b600281036108c3575050906108a16108966108916103b16108be9585611ad2565b613308565b916080810190611ad2565b919061076360408301519160606020850151940151943691610cb8565b6107d9565b60038103610944575050816108e96108e46103b161093f946108be96611ad2565b613124565b90608081016109266108fb8284611ad2565b9290936109216040870194855196602089019761076389519260808c0151943691610cb8565b611ad2565b9490925191519260a06060860151950151953691610cb8565b6131e7565b60048103610a4757505061095e6103b16109639284611ad2565b612da3565b90608081016109728183611ad2565b906109966020860192835192604088019361076385519260a08b0151943691610cb8565b6109aa60c086015160148082511491015191565b909390156109f957918493916107996108be97946109c797611ad2565b91519051916109f460806060870151960151966109e2610c21565b60018152985f60208b01523691610cb8565b612f1e565b610851935080610840610a425f5160206150135f395f51905f529861084b9661084696610a296103b1978c611ad2565b9490925191519260806060860151950151953691610cb8565b612ea2565b600503610ae85750610a5f6103b1610a649284611ad2565b612a9e565b610a78606082015160148082511491015191565b15610ac15790610a9b9183610a9360806108be960182611ad2565b949091611b72565b602084015190610abc60408601519360a06080880151970151973691610cb8565b612b9b565b50508061085161084b6108466103b160805f5160206150135f395f51905f52960185611ad2565b6329ee2f1560e11b5f5260ff1660045260245b5ffd5b346102c65760203660031901126102c6576020610b1c600435611bc4565b604051908152f35b346102c65760403660031901126102c657610b5d602435600435610b47826104e5565b610b58610b5382611bc4565b61271e565b613a16565b005b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b03821117610b8e57604052565b610b5f565b60c081019081106001600160401b03821117610b8e57604052565b60e081019081106001600160401b03821117610b8e57604052565b608081019081106001600160401b03821117610b8e57604052565b61010081019081106001600160401b03821117610b8e57604052565b90601f801991011681019081106001600160401b03821117610b8e57604052565b60405190610503604083610c00565b6040519061050361016083610c00565b6040519061050361014083610c00565b6040519061050360c083610c00565b6040519061050360e083610c00565b60405190610503608083610c00565b6040519061050361010083610c00565b6040519061050361012083610c00565b6001600160401b038111610b8e57601f01601f191660200190565b929192610cc482610c9d565b91610cd26040519384610c00565b8294818452818301116102c6578281602093845f960137010152565b9080601f830112156102c65781602061036e93359101610cb8565b801515036102c657565b346102c65760403660031901126102c6576004356001600160401b0381116102c657610d43903690600401610cee565b60243590610d5082610d09565b610d8f604051602081610d638186611be2565b7f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab502815203019020611bf4565b918251918215610e18575080610dea575b610daf57602090604051908152f35b602082015163d2b143bd60e01b5f526004527f000000000000000000000000000000000000000000000000000000000000000060245260445ffd5b5060208201517f00000000000000000000000000000000000000000000000000000000000000001415610da0565b6040516372943a3560e11b815290819061040a90600483016106c0565b346102c65760403660031901126102c657600435602435610e55816104e5565b336001600160a01b03821603610e6e57610b5d91613aab565b63334bd91960e11b5f5260045ffd5b908160409103126102c65790565b60206003198201126102c657600435906001600160401b0382116102c65761036e91600401610e7d565b346102c657610ec336610e8b565b50610b5d613b4b565b9181601f840112156102c6578235916001600160401b0383116102c657602083818601950101116102c657565b6101043590610503826104e5565b60c03660031901126102c6576004356001600160401b0381116102c657610f32903690600401610ecc565b602435604435926064356084356001600160401b0381116102c657610f5b903690600401610ecc565b909560a43594610f6a866104e5565b610f7261290b565b8315610649576001600160a01b0386161561101757601483036110085761100097610ffa93610fd993610fd3610fc9610fb4610faf368e8d610cb8565b611c56565b98610fc0368688610cb8565b9084888c613bb0565b9490933691610cb8565b93613c80565b92610fe2610c21565b95610feb6115d6565b87525f60208801523691610cb8565b90613dcc565b610b5d612940565b63128cca4160e21b5f5260045ffd5b604051636bc37c5f60e11b8152602060048201526008602482015267726566756e64546f60c01b6044820152606490fd5b346102c65761105636610e8b565b50632f1f531f60e21b5f5260045ffd5b60403660031901126102c65760043561107e816104e5565b6024356001600160401b0381116102c65761109d903690600401610cee565b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630811490811561118c575b5061117d576110e06126e2565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161115c575b5061112957634c9c8ce360e01b5f526001600160a01b03821660045260245ffd5b905f516020614f535f395f51905f52830361114857610b5d9250614dd2565b632a87526960e21b5f52600483905260245ffd5b61117691945060203d60201161063d5761062f8183610c00565b925f611108565b63703e46dd60e11b5f5260045ffd5b5f516020614f535f395f51905f52546001600160a01b0316141590505f6110d3565b346102c6576111bc36610689565b5050631c47ceeb60e21b5f5260045ffd5b5f9103126102c657565b346102c6575f3660031901126102c6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316300361117d5760206040515f516020614f535f395f51905f528152f35b346102c6575f3660031901126102c65760206040515f516020614ff35f395f51905f528152f35b346102c6575f3660031901126102c6575f5160206150535f395f51905f52546040516001600160a01b039091168152602090f35b346102c6575f3660031901126102c65760206040516001600160401b038152f35b346102c6576104d760016104af6112c036610e8b565b6112c8612699565b6020810190611ad2565b346102c6576112f86113046112e636610560565b92916112f394919461290b565b611a05565b6001600160a01b031690565b60405163feb56b1560e01b815290926020826004815f885af19081156106445761133f925f92611411575b508161133a9161403f565b614075565b604051637e062a3560e11b815292602084600481845afa9283156106445761137883836020966113af985f916113e4575b5033906140d0565b6040516340c10f1960e01b81526001600160a01b0390911660048201526024810192909252909283919082905f9082906044820190565b03925af18015610644576113c557610b5d612940565b6113dd9060203d60201161063d5761062f8183610c00565b505f611000565b6114049150883d8a1161140a575b6113fc8183610c00565b8101906119e5565b5f611370565b503d6113f2565b61133a91925061142f9060203d60201161063d5761062f8183610c00565b919061132f565b346102c65760403660031901126102c657602060ff61148860243560043561145d826104e5565b5f525f516020614fb35f395f51905f52845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b60e03660031901126102c6576004356001600160401b0381116102c6576114bf903690600401610ecc565b906024356001600160401b0381116102c6576114df903690600401610ecc565b9092906044356064356001600160401b0381116102c657611504903690600401610ecc565b916084359360a435976001600160401b0389116102c65761152c610b5d993690600401610e7d565b96611535610546565b98611cbc565b346102c6575f3660031901126102c65760206040515f8152f35b346102c657611563366102fa565b61156b612699565b600261157682611ac5565b61157f81611aa7565b036104255760a081016115956103b18284611ad2565b602081519101206115a4612764565b60208151910120036115cd576103b16115c09161027793611ad2565b604051918291308361034c565b6103ed91611ad2565b604051906115e5602083610c00565b5f8252565b346102c6575f3660031901126102c65761027760405161160b604082610c00565b60058152640352e302e360dc1b6020820152604051918291602083526020830190610328565b346102c6575f3660031901126102c65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346102c6575f3660031901126102c65760206040517ffc37dbc4b77b0a9e098017fe20cac5f35a3b75421a51f54b2f6c481ab04e9bb18152f35b6001600160401b038116036102c657565b6101043590610503826116a5565b6101243590610503826116a5565b6101443590610503826116a5565b346102c6576101603660031901126102c657610b5d6116fd610c30565b6117056104f6565b815261170f610505565b602082015261171c610512565b604082015261172961051f565b606082015261173661052c565b6080820152611743610539565b60a0820152611750610546565b60c082015261175d610553565b60e082015261176a6116b6565b6101008201526117786116c4565b6101208201526117866116d2565b610140820152611f0d565b346102c65760403660031901126102c657610b5d6024356004356117b4826104e5565b6117c0610b5382611bc4565b613aab565b60e03660031901126102c6576004356001600160401b0381116102c6576117f0903690600401610ecc565b60243590604435906064359060843560a4356001600160401b0381116102c65761181e903690600401610ecc565b60c4359461182b866104e5565b61183361290b565b8015610649576001600160a01b0386161561101757611000986118ec978961187c6118ca976118aa95611866888a614186565b84611875610faf368e8a610cb8565b9e8f6142d1565b949093611887610c21565b996118906115d6565b8b525f60208c01526118a0610c40565b9d8e523691610cb8565b60208c015260408b015260608a0152608089015260a08801523691610cb8565b60c08501525f60e08501526101008401526001600160a01b0316610120830152565b614455565b6101203660031901126102c6576004356001600160401b0381116102c65761191d903690600401610cee565b6044359060243560643560843560a4356001600160401b0381116102c657611949903690600401610ecc565b9160c4359360e435976001600160401b0389116102c657611971610b5d993690600401610e7d565b9661197a610ef9565b9861251a565b346102c65760603660031901126102c6576004356001600160401b0381116102c6576119b090369060040161067a565b506024356001600160401b0381116102c6576119d0903690600401610ecc565b50506119dd6044356104e5565b610b5d613b4b565b908160209103126102c6575161036e816104e5565b6040513d5f823e3d90fd5b7f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab5045460405163068bcd8d60e01b815260048101839052929190602090849060249082906001600160a01b03165afa928315610644575f93611a86575b506001600160a01b03831615611a745750565b630f24c65560e21b5f5260045260245ffd5b611aa091935060203d60201161140a576113fc8183610c00565b915f611a61565b60031115611ab157565b634e487b7160e01b5f52602160045260245ffd5b3560038110156102c65790565b903590601e19813603018212156102c657018035906001600160401b0382116102c6576020019181360383136102c657565b90918060409360208452816020850152848401375f828201840152601f01601f1916010190565b60209082604051938492833781017f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50281520301902090565b908160209103126102c6575190565b3561036e816116a5565b60405190611b8b602083610c00565b5f808352366020840137565b5f527f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50b60205260405f2090565b5f525f516020614fb35f395f51905f52602052600160405f20015490565b805191908290602001825e015f815290565b90604051611c0181610b73565b602060018294805484520154910152565b90611c26604051602081610d638187611be2565b51918215611c315750565b6040516372943a3560e11b81526020600482015290819061040a906024830190610328565b90611c6a604051602081610d638187611be2565b8051928315611c3157506020018051907f0000000000000000000000000000000000000000000000000000000000000000809203611ca6575050565b5163d2b143bd60e01b5f5260045260245260445ffd5b90949198959697939298611cce61290b565b8315611e96576001600160a01b0387161561101757611ced8884614186565b611d00611cfa8680611ad2565b906141d2565b611d0d602086013561421d565b611d1b610faf368885610cb8565b9789611d268a611b97565b5410611e49575f5160206150935f395f51905f5254611d4d906001600160a01b03166112f8565b6001600160a01b03811615611e155760405163dbb5313f60e01b8152600481018b90523360248201526044810196909652602090869060649082905f905af194851561064457611de49b611dde96611dd696611dbd958e945f93611dec575b50611dbd90611dc593943691610cb8565b943691610cb8565b90611dd0368a611ec7565b93614260565b913690611ec7565b93613eb3565b610503612940565b611dc5935090611e0d611dbd9260203d60201161063d5761062f8183610c00565b935090611dac565b604051636bc37c5f60e11b815260206004820152600b60248201526a746f6b656e457363726f7760a81b6044820152606490fd5b89611e538a611b97565b546040516338d06e1d60e01b815260606004820152600c60648201526b1c99599d595b105b5bdd5b9d60a21b60848201526024810192909252604482015260a490fd5b60405163495279c560e11b8152602060048201526008602482015267185b5bdd5b9d131160c21b6044820152606490fd5b9190916040818403126102c65760405190611ee182610b73565b81938135916001600160401b0383116102c657611f046020939284938301610cee565b84520135910152565b5f5160206150735f395f51905f5254906001600160401b03611f3e604084901c60ff1615936001600160401b031690565b1680159081612031575b6001149081612027575b15908161201e575b5061200f57611f9d9082611f9460016001600160401b03195f5160206150735f395f51905f525416175f5160206150735f395f51905f5255565b611feb57612039565b611fa357565b5f5160206150735f395f51905f52805460ff60401b19169055604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b5f5160206150735f395f51905f52805460ff60401b1916600160401b179055612039565b63f92ee8a960e01b5f5260045ffd5b9050155f611f5a565b303b159150611f52565b839150611f48565b612041614e71565b612049614e71565b612051614e71565b61205a33613857565b50805161206f906001600160a01b03166138cd565b506080810151612087906001600160a01b0316613955565b5080516120ce906120a0906001600160a01b03166112f8565b5f5160206150535f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b602081015161212a906120e9906001600160a01b03166112f8565b7f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50480546001600160a01b0319166001600160a01b0392909216919091179055565b604081015161217390612145906001600160a01b03166112f8565b5f5160206150935f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60608101516121cf9061218e906001600160a01b03166112f8565b7f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50680546001600160a01b0319166001600160a01b0392909216919091179055565b60a0810151612218906121ea906001600160a01b03166112f8565b5f5160206150335f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60c081018051612232906112f8906001600160a01b031681565b60405163b148b0fd60e01b81527f000000000000000000000000000000000000000000000000000000000000000092916001600160a01b031690602081600481855afa908115610644575f916124fb575b5083036124bb5750517f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50080546001600160a01b0319166001600160a01b0392831617905560e0830180519092916122de916112f89182911681565b60405163b148b0fd60e01b8152602081600481855afa908115610644575f9161249c575b50820361243a575050517f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50180546001600160a01b0319166001600160a01b039092169190911790556105039061240190610140906123a261236e6101008301516001600160401b031690565b6001600160401b03166001600160401b03195f516020614f935f395f51905f525416175f516020614f935f395f51905f5255565b6123f36123ba6101208301516001600160401b031690565b5f516020614f935f395f51905f52805467ffffffffffffffff60401b191660409290921b67ffffffffffffffff60401b16919091179055565b01516001600160401b031690565b5f516020614f935f395f51905f52805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b9060206004926040519384809263b148b0fd60e01b82525afa90811561064457610afb925f9261247b575b5063d2b143bd60e01b5f52600452602452604490565b61249591925060203d60201161063d5761062f8183610c00565b9083612465565b6124b5915060203d60201161063d5761062f8183610c00565b5f612302565b8260206004926040519384809263b148b0fd60e01b82525afa90811561064457610afb925f9261247b575063d2b143bd60e01b5f52600452602452604490565b612514915060203d60201161063d5761062f8183610c00565b5f612283565b9190929795939998969961252c61290b565b8815611e96576001600160a01b038816156110175761254b8587614186565b612558611cfa8880611ad2565b612565602088013561421d565b61256e83611c56565b988b6125798b611b97565b54106125f857936125d093836125a26118ec9b9a9894611de49e9f986125e19b978f879061451b565b93909260206125af610c40565b9e8f528e015260408d015260608c015260808b015260a08a01523691610cb8565b60c087015260e08601523690611ec7565b6101008401526001600160a01b0316610120830152565b8b611e538b611b97565b6126165f356001600160e01b03191661465e565b15612665577f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab501545f9081906001600160a01b03165b368280378136915af43d5f803e15612661573d5ff35b3d5ffd5b7f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab500545f9081906001600160a01b031661264b565b335f9081525f516020614f735f395f51905f52602052604090205460ff16156126be57565b63e2517d3f60e01b5f52336004525f516020614ff35f395f51905f5260245260445ffd5b335f9081525f516020614f335f395f51905f52602052604090205460ff161561270757565b63e2517d3f60e01b5f52336004525f60245260445ffd5b5f8181525f516020614fb35f395f51905f526020908152604080832033845290915290205460ff161561274e5750565b63e2517d3f60e01b5f523360045260245260445ffd5b5f7f00000000000000000000000000000000000000000000000000000000000000008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8110156128e8575b806d04ee2d6d415b85acef8100000000600a9210156128cc575b662386f26fc100008110156128b7575b6305f5e1008110156128a5575b612710811015612895575b6064811015612886575b101561287b575b612835602161280a60018501614770565b938401015b5f1901916f181899199a1a9b1b9c1cb0b131b232b360811b600a82061a8353600a900490565b908115612845576128359061280f565b505060405164746f6b692d60d81b60208201529061036e90829061286d906025830190611be2565b03601f198101835282610c00565b6001909101906127f9565b600290606490049301926127f2565b60049061271090049301926127e8565b6008906305f5e10090049301926127dd565b601090662386f26fc1000090049301926127d0565b6020906d04ee2d6d415b85acef810000000090049301926127c0565b506040915072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b81046127a6565b5f516020614fd35f395f51905f525c6129315760015f516020614fd35f395f51905f525d565b633ee5aeb560e01b5f5260045ffd5b5f5f516020614fd35f395f51905f525d565b6040519061295f82610b73565b5f602083606081520152565b519060ff821682036102c657565b92919261298582610c9d565b916129936040519384610c00565b8294818452818301116102c6578281602093845f96015e010152565b9080601f830112156102c657815161036e92602001612979565b9190916040818403126102c657604051906129e382610b73565b81938151916001600160401b0383116102c657612a0660209392849383016129af565b84520151910152565b9160c0838303126102c657612a238361296b565b9260208101516001600160401b0381116102c657810183601f820112156102c65783816020612a5493519101612979565b9260408201519260608301516001600160401b0381116102c65782612a7a9185016129af565b9260808101519260a08201516001600160401b0381116102c65761036e92016129c9565b612ae690604051612aae81610b93565b5f8152606060208201525f60408201526060808201525f608082015260a0612ad4612952565b91015260208082518301019101612a0f565b93612afe612af5949294610c50565b60ff9097168752565b602086015260408501526060840152608083015260a082015290565b90602080612b318451604085526040850190610328565b93015191015290565b98979692612b6e906001600160401b0360e09894612b9698948d521660208c015261010060408c01526101008b0190610328565b60608a01949094526001600160a01b0316608089015260a088015286820360c0880152612b1a565b930152565b95909193949295612bab81611c56565b5f5160206150935f395f51905f5254909190612bcf906001600160a01b03166112f8565b803b156102c657604051634b91ad0f60e11b81526001600160a01b0389166004820152602481018a9052905f908290604490829084905af19081612cf6575b50612c735750612c1e6112f83081565b93843b156102c6575f809793612c4d9282956040519b8c9a8b998a9863346c294b60e11b8a5260048a01612b3a565b03925af1801561064457612c5f575b50565b80612c6d5f61050393610c00565b806111cd565b92600496979295506020612c9d6112f85f5160206150935f395f51905f525460018060a01b031690565b604051637e062a3560e11b815298899182905afa91821561064457610503985f988994612cd5575b506001600160a01b0316946148cc565b612cef91945060203d60201161140a576113fc8183610c00565b925f612cc5565b80612c6d5f612d0493610c00565b5f612c0e565b60405190612d1782610b73565b5f6020838281520152565b91908260409103126102c657604051612d3a81610b73565b6020808294805184520151910152565b90610100828203126102c657612d5f8261296b565b92602083015192604081015192606082015192608083015192612d858360a08301612d22565b9260e08201516001600160401b0381116102c65761036e92016129af565b612def90606060c0604051612db781610bae565b5f81525f60208201525f60408201525f838201525f6080820152612dd9612d0a565b60a0820152015260208082518301019101612d4a565b94612e0a612e01959295949394610c5f565b60ff9098168852565b602087015260408601526060850152608084015260a083015260c082015290565b612e3a612e4091939293611c56565b92611a05565b6001600160a01b0316803b156102c6575f9283608492612e89604051978896879563397187b560e11b875260048701526024860152604485019060208091805184520151910152565b5af1801561064457612e985750565b5f61050391610c00565b612eb1612eb791959495611c56565b91611a05565b6001600160a01b031690813b156102c6575f60a49281956040519788968795630b81d85f60e41b875260048701526024860152836044860152606485015260848401525af1801561064457612e985750565b908160209103126102c6575161036e81610d09565b612f2f909794919397959295611c56565b90612f3986611a05565b5f9060018060a01b0316846020848c612fa68d612f568d51151590565b60405163606e503760e11b8152600481018c905260248101949094526001600160a01b0390941660448401526064830195909552608482019490945290151560a4820152918290819060c4820190565b03815f865af15f91816130f3575b506130eb5750865161307f575b505b15612fd3575b5050505050505050565b6020612fdf6112f83081565b950151853b156102c657604051637788276b60e01b815260048101939093526001600160401b039094166024830152604482019590955260648101969096526001600160a01b03909316608486015260a485019290925260c484019290925260e48301525f90829081838161010481015b03925af180156106445761306b575b80808080808080612fc9565b80612c6d5f61307993610c00565b5f61305f565b803b156102c657604051630b81d85f60e41b815260048101859052602481018b90526001600160a01b038416604482015260648101869052608481018a9052905f90829060a490829084905af180156106445715612fc15780612c6d5f6130e593610c00565b5f612fc1565b915050612fc3565b61311691925060203d60201161311d575b61310e8183610c00565b810190612f09565b905f612fb4565b503d613104565b606060a060405161313481610b93565b5f81525f60208201525f60408201525f83820152613150612d0a565b608082015201526020808251830101910160e0818303126102c6576131748161296b565b9160208201519160408101516060820151916131938460808301612d22565b9360c08201516001600160401b0381116102c6576131b192016129af565b93612afe612af5610c50565b91908260409103126102c6576020825192015190565b906040828203126102c65761036e91612d22565b92919390936131f584611c56565b61323360406132066112f885611a05565b9581518093819263601c186160e01b83528b87600485016040919493926060820195825260208201520152565b03815f895af1908115610644578761327d965f925f946132d4575b5060409293945f8451809a819582946388cb0df760e01b84526004840160209093929193604081019481520152565b03925af1928315610644576105039761329d965f956132a3575b50614ae0565b90614baa565b6132c691955060403d6040116132cd575b6132be8183610c00565b8101906131d3565b935f613297565b503d6132b4565b6132f991945060408094503d8511613301575b6132f18183610c00565b8101906131bd565b93909261324e565b503d6132e7565b60405161331481610bc9565b5f81525f60208201525f6040820152606061332d612d0a565b910152805181019060a0818303126102c65761334b6020820161296b565b9161336760408301519260806020606083015194019101612d22565b9161337c613373610c6e565b60ff9095168552565b60208401526040830152606082015290565b6040519061339b82610b93565b5f60a0838281528260208201528260408201528260608201528260808201520152565b91908260c09103126102c6576040516133d681610b93565b60a080829480518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b9190916101c0818403126102c6576134258161296b565b9260208201519260408301519261343f83606083016133be565b9261344e816101208401612d22565b926101608301516001600160401b0381116102c6578261346f9185016129af565b92610180810151926101a08201516001600160401b0381116102c65761036e92016129c9565b6134f7906040516134a581610be4565b5f81525f60208201525f60408201526134bc61338e565b60608201526134c9612d0a565b6080820152606060a08201525f60c082015260e06134e5612952565b9101526020808251830101910161340e565b95613512613509969296959395610c7d565b60ff9099168952565b602088015260408701526060860152608085015260a084015260c083015260e082015290565b60a0809180518452602081015160208501526040810151604085015260608101516060850152608081015160808501520151910152565b90815260208101919091526001600160a01b039091166040820152610120810192916105039160600190613538565b612e3a6135aa91611c56565b6001600160a01b0316803b156102c6575f928361012492612e896040519788968795631c44c65160e11b8752600487015260248601528360448601526064850190613538565b91908260409103126102c6576020825192015161036e81610d09565b936101209361363c929796936101408701988752602087015260018060a01b031660408601526060850190613538565b1515910152565b999897949093613688936001600160401b03612b9698946101a09a978e521660208d015260408c015260608b015260018060a01b031660808a015260a0890190613538565b6101608701526101c06101808701526101c0860190612b1a565b969594929791976136b288611c56565b906136bc81611a05565b84516001600160a01b039091169a5f969091879015156040516392c883fb60e01b8152908e90829081906136f790878f8a8d6004870161360c565b03815a6040945f91f190815f915f93613824575b5061381b57505086516137c4575b156137785750505060206004996040519a8b8092637e062a3560e11b82525afa92831561064457610503995f94613756575b5060200151976148cc565b602091945061377190823d841161140a576113fc8183610c00565b939061374b565b919a509698509596929591949193509160206137946112f83081565b96015190863b156102c6575f988995612c4d946040519c8d9b8c9a8b996384a00e5f60e01b8b5260048b01613643565b8c3b156102c657815f8a8f86838a6137f260405197889687958694631c44c65160e11b86526004860161356f565b03925af1801561064457613807575b50613719565b80612c6d5f61381593610c00565b5f613801565b98509050613719565b909250613849915060403d604011613850575b6138418183610c00565b8101906135f0565b915f61370b565b503d613837565b6001600160a01b0381165f9081525f516020614f335f395f51905f52602052604090205460ff166138c8576001600160a01b03165f8181525f516020614f335f395f51905f5260205260408120805460ff191660011790553391905f516020614f135f395f51905f528180a4600190565b505f90565b6001600160a01b0381165f9081525f516020614f735f395f51905f52602052604090205460ff166138c8576001600160a01b0381165f9081525f516020614f735f395f51905f5260205260409020805460ff1916600117905533906001600160a01b03165f516020614ff35f395f51905f525f516020614f135f395f51905f525f80a4600190565b6001600160a01b0381165f9081527f2ee74b0e16fc94f9c442cf7b0193daa260d4782758f2d4d4c7d39a02b3a27b8e602052604090205460ff166138c8576001600160a01b0381165f9081527f2ee74b0e16fc94f9c442cf7b0193daa260d4782758f2d4d4c7d39a02b3a27b8e60205260409020805460ff1916600117905533906001600160a01b03167ffc37dbc4b77b0a9e098017fe20cac5f35a3b75421a51f54b2f6c481ab04e9bb15f516020614f135f395f51905f525f80a4600190565b5f8181525f516020614fb35f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff16613aa5575f8181525f516020614fb35f395f51905f52602090815260408083206001600160a01b03861684529091529020805460ff1916600117905533916001600160a01b0316905f516020614f135f395f51905f525f80a4600190565b50505f90565b5f8181525f516020614fb35f395f51905f52602090815260408083206001600160a01b038616845290915290205460ff1615613aa5575f8181525f516020614fb35f395f51905f52602090815260408083206001600160a01b03861684529091529020805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4600190565b5f5160206150535f395f51905f5254336001600160a01b0390911603613b6d57565b630c6a4e5b60e31b5f523360045260245ffd5b919260a09361036e96959284526020840152600180851b0316604083015260608201528160808201520190610328565b9493602090613bce6112f8613bed9594613bc8612d0a565b50611a05565b9460405194859283926302b3afdb60e41b845233878c60048701613b80565b03815f875af192831561064457613c33936040935f91613c61575b50955f84518096819582946388cb0df760e01b84526004840160209093929193604081019481520152565b03925af1908115610644575f91613c48575090565b61036e915060403d6040116132cd576132be8183610c00565b613c7a915060203d60201161063d5761062f8183610c00565b5f613c08565b9193613cbe61036e9461286d93966040519788966003602089015260408801526060870152608086015260a085019060208091805184520151910152565b60e080840152610100830190610328565b90816101209103126102c657610100613ce6610c8d565b9180518352613cf76020820161296b565b60208401526040810151604084015260608101516060840152613d1c6080820161296b565b608084015260a081015160a084015260c081015160c084015260e081015160e0840152015161010082015290565b61036e939260ff60609316825260208201528160408201520190612b1a565b600b81526a6473744f7574657247617360a81b602082015260400190565b602061036e9181815201613d69565b634e487b7160e01b5f52601160045260245ffd5b61271001908161271011613dba57565b613d96565b91908201809211613dba57565b93613e1f94613ddf829461012094614baa565b5f5160206150335f395f51905f5254613e00906001600160a01b03166112f8565b9060405180978194829363a68c985f60e01b8452600360048501613d4a565b03915afa928315610644575f93613e82575b5080515115159081613e75575b50613e5b57613e555f610100610503940151613dbf565b90614d6d565b60405163495279c560e11b81528061040a60048201613d87565b602091500151155f613e3e565b613ea59193506101203d8111613eac575b613e9d8183610c00565b810190613ccf565b915f613e31565b503d613e93565b91613ec19195939495614baa565b5f5160206150335f395f51905f5254613ee2906001600160a01b03166112f8565b93610120604051809663a68c985f60e01b82528180613f078688600560048501613d4a565b03915afa948515610644575f95613fca575b5080515115159081613fbd575b50613e5b5761050393613e55925f9281613f47575b50506101000151613dbf565b61010092935090613f82613fb5925f527f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50a60205260405f2090565b54906060850151613f97608087015160ff1690565b9186519160ff80613fac60208b015160ff1690565b16941691614ca0565b91905f613f3b565b602091500151155f613f26565b613fe49195506101203d8111613eac57613e9d8183610c00565b935f613f19565b91613ff99195939495614baa565b5f5160206150335f395f51905f525461401a906001600160a01b03166112f8565b93610120604051809663a68c985f60e01b82528180613f078688600160048501613d4a565b8115614049570490565b634e487b7160e01b5f52601260045260245ffd5b906127108202918083046127101490151715613dba57565b81810292918115918404141715613dba57565b3d156140b2573d9061409982610c9d565b916140a76040519384610c00565b82523d5f602084013e565b606090565b60409061036e9392151581528160208201520190610328565b6040516323b872dd60e01b602082019081526001600160a01b03938416602483015293909216604483015260648201939093525f92839290918390614118816084810161286d565b51925af1614124614088565b9080158015614152575b614136575050565b61040a604051928392630e071d1760e31b8452600484016140b7565b5081518015159081614165575b5061412e565b6141809150602061417c9185010160208501612f09565b1590565b5f61415f565b5080156110085761040081116141995750565b60a490604051906338d06e1d60e01b8252606060048301526002606483015261746f60f01b608483015260248201526104006044820152fd5b5061280081116141df5750565b60a490604051906338d06e1d60e01b82526060600483015260076064830152661c185e5b1bd85960ca1b608483015260248201526128006044820152fd5b624c4b40811161422a5750565b6040516338d06e1d60e01b81526060600482015290819061424d60648301613d69565b906024830152624c4b4060448301520390fd5b919261428f946142a661286d9361036e96604051988997600560208a015260c060408a015260e0890190610328565b916060880152601f19878303016080880152610328565b9160a0850152601f198483030160c0850152612b1a565b9060c0828203126102c65761036e916133be565b91906112f86142ee919695966142e561338e565b50613bc8612d0a565b604051638d55de6360e01b8152600481018590529095906020816024818a5afa918215610644576143679260c0925f91614436575b506040516310a470ab60e01b81526004810187905260248101869052336044820152606481019190915260848101919091525f60a4820152918290819060c4820190565b03815f8a5af1908115610644575f91614407575b5094803b156102c65760405163641ffaa160e01b8152600481018490526024810183905233604482015260648101949094525f8460848183855af192831561064457613c33946040946143f3575b505f84518096819582946388cb0df760e01b84526004840160209093929193604081019481520152565b80612c6d5f61440193610c00565b5f6143c9565b614429915060c03d60c01161442f575b6144218183610c00565b8101906142bd565b5f61437b565b503d614417565b61444f915060203d60201161063d5761062f8183610c00565b5f614323565b6105039060408101516060820151906080830151916144f760a08501519261286d60c087015160e08801966144de8851926144ca6101008c01996144b68b51956040519b8c9a600160208d015260408c015260608b015260808a0190613538565b805161014089015260200151610160880152565b6101c06101808701526101e0860190610328565b916101a0850152601f19848303016101c0850152612b1a565b83516020850151610120909501519094906001600160a01b03169251935194613feb565b91906112f861453091969594966142e561338e565b60405163feb56b1560e01b815290956020826004815f8b5af1918215610644576145b09260c09261456c925f9261141157508161133a9161403f565b6040516310a470ab60e01b81526004810186905260248101859052336044820152606481018290526084810196909652600160a487015294918290819060c4820190565b03815f8a5af1908115610644575f9161463f575b509460405192637e062a3560e11b8452602084600481855afa801561064457613c3395836145fd926040975f91614626575033906140d0565b5f84518096819582946388cb0df760e01b84526004840160209093929193604081019481520152565b611404915060203d60201161140a576113fc8183610c00565b614658915060c03d60c01161442f576144218183610c00565b5f6145c4565b63ffffffff60e01b16636df5433b60e01b811490811561475f575b811561474e575b811561473d575b811561472c575b811561471b575b811561470a575b81156146f9575b81156146e8575b81156146d7575b81156146c6575b506146c1575f90565b600190565b6302f08d1160e51b1490505f6146b8565b638527279f60e01b811491506146b1565b634e8ec93f60e01b811491506146aa565b635e71683560e01b811491506146a3565b630ff6707160e31b8114915061469c565b634c707d9760e01b81149150614695565b63ce7d0a3b60e01b8114915061468e565b630cc5a7af60e01b81149150614687565b634340420f60e11b81149150614680565b636b21c2c360e11b81149150614679565b9061477a82610c9d565b6147876040519182610c00565b8281528092614798601f1991610c9d565b0190602036910137565b9081526001600160401b0390911660208201526001600160a01b0390911660408201526060810191909152608081019190915260a00190565b60ff60029116019060ff8211613dba57565b909261480661036e959394608084526080840190610328565b6001600160a01b0390941660208301526040820152808303606090910152610328565b9897969390926001600160401b03612b96969360e098958c521660208b015260018060a01b031660408a0152606089015260018060a01b0316608088015260a087015261010060c0870152610100860190612b1a565b979695926001600160401b0360c09693612b9696938b521660208a015260018060a01b03166040890152606088015260018060a01b0316608087015260e060a087015260e0860190612b1a565b97949597969096939291935f877f183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50c54878b8d8381105f14614aa45793505050505b5f80808060018060a01b038d1694855af1614926614088565b5015614a9b575b8351908151151580614a91575b614a23575b505060ff1690506001810361498b575061495f92506112f8915030905081565b91823b156102c6575f94612c4d869260405198899788968795639ad0d78f60e01b8752600487016147a2565b929794969195949092600281036149d657506149a990506112f83081565b93843b156102c6575f968793612c4d926040519a8b998a98899763e4b76cc160e01b89526004890161487f565b92969490926003146149ec575050505050505050565b6149f66112f83081565b94853b156102c6575f978894613050936040519b8c9a8b998a9863320dd5e360e01b8a5260048a01614829565b602085015193813b156102c65760ff94875f80948b94614a596040519889978896879463eb2659c960e01b8652600486016147ed565b0393f19081614a7d575b50614a7857614a71906147db565b5f8061493f565b614a71565b80612c6d5f614a8b93610c00565b5f614a63565b50893b151561493a565b6001915061492d565b83614ad8917f5afe1f9e8e235e19b1386610b4a07c2bf8e34b821a5d160891d4b6f92a88208c9596604051958695866147a2565b0390a161490d565b9261036e94614b259161286d94979397604051988997600460208a015260408901526060880152608087015260a086015260c085019060208091805184520151910152565b61010080840152610120830190610328565b908160209103126102c6575161036e816116a5565b906020614b7e61036e9694614b716001600160401b039460c0875260c0870190610328565b9085820384870152610328565b9482815116604085015201511660608201526001600160401b03608082015260a0818403910152610328565b5f5160206150535f395f51905f52547f000000000000000000000000000000000000000000000000000000000000000060ff81169290916001600160a01b031690601f8411614c8357604080519390614c038186610c00565b6020855260209585870191601f19013683378552525f614c21610c21565b938185528186860152614c4a6040519788968795869463ae4cd20160e01b865260048601614b4c565b03925af1801561064457614c5b5750565b612c5c9060203d602011614c7c575b614c748183610c00565b810190614b37565b503d614c6a565b632cd44ac360e21b5f5260045ffd5b604d8111613dba57600a0a90565b9093949291948415614d375785811015614d03578503948511613dba57614cf2614cfd93614cec614ce6614cf89561133a614cdd61036e9b614c92565b91600197614075565b91613daa565b90614075565b93614075565b61405d565b9061403f565b948503948511613dba57614cf2614cfd93614cec614ce6614cf89561133a614d2d61036e9b614c92565b9160019297614075565b604051634612b38f60e01b815260206004820152600d60248201526c737263546f6b656e507269636560981b6044820152606490fd5b348211614dbb5781340391348311613dba573403614d89575050565b5f918291829182916001600160a01b03165af1614da4614088565b5015614dac57565b6303d6971360e41b5f5260045ffd5b506326ac465760e01b5f526004523460245260445ffd5b90813b15614e50575f516020614f535f395f51905f5280546001600160a01b0319166001600160a01b0384169081179091557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115614e3857612c5c91614e9c565b505034614e4157565b63b398979f60e01b5f5260045ffd5b50634c9c8ce360e01b5f9081526001600160a01b0391909116600452602490fd5b60ff5f5160206150735f395f51905f525460401c1615614e8d57565b631afcd79f60e31b5f5260045ffd5b5f8061036e93602081519101845af4614eb3614088565b9190614ed85750805115614ec957805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580614f09575b614ee9575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b15614ee156fe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0db7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc393e3ffe2e87ad4e4214c6adf2fb8243326c1de2367e52c688f5cb288ae0afa4183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab50902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00eb69226cf0509417098bfe1b20d96915c3ef74ab4650312921414e1bace0790cdeb9bbedd3dc50dfe7b888fa20de339afa0b3f61c088adfb520cb45114c357cf183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab507183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab503f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00183a6125c38840424c4a85fa12bab2ab606c4b6d0e7cc73c0c06ba5300eab505a26469706673582212206826ce05c30fc36d046db5611f3228ddc308e8ac7ce46535d329d8aad0774be764736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004746f6b6900000000000000000000000000000000000000000000000000000000