6 txs
12 calls
constructor
constructor(address _crossChainRegistry, address _accessManager, address _lzEndpoint, address _harborCommand)
functions
ADMIRALS_QUARTERS_ROLE
viewfunction ADMIRALS_QUARTERS_ROLE() view returns (bytes32)
assetToStargateContract
viewfunction assetToStargateContract(address asset) view returns (address stargateContract)
bridgeRouter
viewfunction bridgeRouter() view returns (address)
chainToExternalId
viewfunction chainToExternalId(uint16 chainId) view returns (uint32 externalId)
CROSS_CHAIN_REGISTRY
viewfunction CROSS_CHAIN_REGISTRY() view returns (address)
crossChainRegistry
viewfunction crossChainRegistry() view returns (address)
DECAY_CONTROLLER_ROLE
viewfunction DECAY_CONTROLLER_ROLE() view returns (bytes32)
defaultGasLimit
viewfunction defaultGasLimit() view returns (uint256)
defaultUseTaxi
viewfunction defaultUseTaxi() view returns (bool)
estimateFee
viewfunction estimateFee(uint16 dstChainId, address asset, uint256 amount, tuple options, uint8 operationType) view returns (uint256 nativeFee, uint256 tokenFee)
externalIdToChainId
viewfunction externalIdToChainId(uint32 externalId) view returns (uint16 chainId)
failedComposes
viewfunction failedComposes(bytes32) view returns (address asset, uint256 amount, address intendedRecipient, bytes32 operationId, address originator, uint16 sourceChainId, uint256 timestamp, bool isDeposit)
failedOperationIds
viewfunction failedOperationIds(uint256) view returns (bytes32)
generateRole
purefunction generateRole(uint8 roleName, address roleTargetContract) pure returns (bytes32)
getAdapterBalance
viewfunction getAdapterBalance(address asset) view returns (uint256)
getEndpointId
viewfunction getEndpointId(uint16 chainId) view returns (uint32)
getFailedCompose
viewfunction getFailedCompose(bytes32 operationId) view returns (tuple)
getFailedOperations
viewfunction getFailedOperations() view returns (bytes32[])
getPeeredChainIds
viewfunction getPeeredChainIds() view returns (uint16[] chains)
GOVERNOR_ROLE
viewfunction GOVERNOR_ROLE() view returns (bytes32)
GUARDIAN_ROLE
viewfunction GUARDIAN_ROLE() view returns (bytes32)
hasAdmiralsQuartersRole
viewfunction hasAdmiralsQuartersRole(address account) view returns (bool)
isExecutor
viewfunction isExecutor(address executor) view returns (bool)
LZ_ENDPOINT
viewfunction LZ_ENDPOINT() view returns (address)
MAX_SLIPPAGE_BPS
viewfunction MAX_SLIPPAGE_BPS() view returns (uint256)
MIN_SLIPPAGE_BPS
viewfunction MIN_SLIPPAGE_BPS() view returns (uint256)
nonces
viewfunction nonces(address owner) view returns (uint256)
slippageToleranceBps
viewfunction slippageToleranceBps() view returns (uint256)
stargateContractToAsset
viewfunction stargateContractToAsset(address stargateContract) view returns (address asset)
SUPER_KEEPER_ROLE
viewfunction SUPER_KEEPER_ROLE() view returns (bytes32)
supportsAssetTransfer
viewfunction supportsAssetTransfer(uint16 destinationChainId, address asset) view returns (bool)
supportsOperation
purefunction supportsOperation(uint8 operationType) pure returns (bool)
THIS_CHAIN
viewfunction THIS_CHAIN() view returns (uint16)
addSupportedAsset
nonpayablefunction addSupportedAsset(address asset, address stargateContract)
lzCompose
payablefunction lzCompose(address _from, bytes32, bytes _message, address, bytes) payable
manualRecovery
nonpayablefunction manualRecovery(address asset, uint256 amount, address recipient, bytes32 operationId, bool tryReceiveCall, bytes customMessage)
mapEndpoint
nonpayablefunction mapEndpoint(uint16 chainId, uint32 endpointId)
setDefaultTransportMode
nonpayablefunction setDefaultTransportMode(bool _useTaxi)
setSlippageTolerance
nonpayablefunction setSlippageTolerance(uint256 _slippageBps)
transferAsset
payablefunction transferAsset(bytes32 operationId, tuple params, tuple options) payable
unmapEndpoint
nonpayablefunction unmapEndpoint(uint16 chainId)
events
AssetSupported
event AssetSupported(uint16 chainId, address asset, address stargateContract)
BridgeRouterUpdated
event BridgeRouterUpdated(address oldRouter, address newRouter)
ComposeCallFailed
event ComposeCallFailed(bytes32 indexed operationId, address indexed fleetProxy, bytes reason, uint16 sourceChainId)
ComposedAssetHandled
event ComposedAssetHandled(bytes32 indexed operationId, address indexed fleetProxy, address indexed asset, uint256 amount, uint16 sourceChainId)
DefaultTransportModeChanged
event DefaultTransportModeChanged(bool useTaxi)
ExternalIdMapped
event ExternalIdMapped(uint16 indexed chainId, uint32 indexed externalId)
ExternalIdUnmapped
event ExternalIdUnmapped(uint16 indexed chainId, uint32 indexed externalId)
RelayFailed
event RelayFailed(bytes32 indexed transferId, bytes reason)
SlippageToleranceUpdated
event SlippageToleranceUpdated(uint256 newSlippageBps)
TokensRecovered
event TokensRecovered(address indexed asset, uint256 amount, address indexed recipient)
TransferInitiated
event TransferInitiated(bytes32 indexed transferId, uint16 destinationChainId, address asset, uint256 amount, address recipient)
TransferReceived
event TransferReceived(bytes32 indexed transferId, address asset, uint256 amount, address recipient)
errors
CallerIsNotAdmin
error CallerIsNotAdmin(address caller)
CallerIsNotAuthorizedToBoard
error CallerIsNotAuthorizedToBoard(address caller)
CallerIsNotCommander
error CallerIsNotCommander(address caller)
CallerIsNotContractSpecificRole
error CallerIsNotContractSpecificRole(address caller, bytes32 role)
CallerIsNotCurator
error CallerIsNotCurator(address caller)
CallerIsNotDecayController
error CallerIsNotDecayController(address caller)
CallerIsNotFoundation
error CallerIsNotFoundation(address caller)
CallerIsNotGovernor
error CallerIsNotGovernor(address caller)
CallerIsNotGuardian
error CallerIsNotGuardian(address caller)
CallerIsNotGuardianOrGovernor
error CallerIsNotGuardianOrGovernor(address caller)
CallerIsNotKeeper
error CallerIsNotKeeper(address caller)
CallerIsNotRaft
error CallerIsNotRaft(address caller)
CallerIsNotRaftOrCommander
error CallerIsNotRaftOrCommander(address caller)
CallerIsNotSuperKeeper
error CallerIsNotSuperKeeper(address caller)
ChainIdTooLarge
error ChainIdTooLarge(uint256 chainId)
CrossChainConfigManagerZeroAddress
error CrossChainConfigManagerZeroAddress()
CrossChainRegistryZeroAddress
error CrossChainRegistryZeroAddress()
DirectGrantIsDisabled
error DirectGrantIsDisabled(address caller)
DirectRevokeIsDisabled
error DirectRevokeIsDisabled(address caller)
InsufficientBalance
error InsufficientBalance()
InsufficientFee
error InsufficientFee(uint256 required, uint256 provided)
InsufficientMsgValue
error InsufficientMsgValue(uint128 required, uint256 provided)
InvalidAccessManagerAddress
error InvalidAccessManagerAddress(address invalidAddress)
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidAmount
error InvalidAmount()
InvalidBridgeRouter
error InvalidBridgeRouter()
InvalidMessage
error InvalidMessage()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
InvalidParams
error InvalidParams()
InvalidSourceChainId
error InvalidSourceChainId()
OnlyAuthorizedExecutor
error OnlyAuthorizedExecutor()
OnlyBridgeRouter
error OnlyBridgeRouter()
OperationNotSupported
error OperationNotSupported()
ReadChannelNotConfigured
error ReadChannelNotConfigured()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RefundFailed
error RefundFailed(address recipient, uint256 amount)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlippageExceedsTolerance
error SlippageExceedsTolerance(uint256 expectedAmount, uint256 receivedAmount, uint256 toleranceBps)
TransferFailed
error TransferFailed()
Unauthorized
error Unauthorized()
UnsupportedAsset
error UnsupportedAsset()
UnsupportedChain
error UnsupportedChain()
UnsupportedMessageType
error UnsupportedMessageType()
UnsupportedOperation
error UnsupportedOperation()
Untrusted
error Untrusted(string what, address from, address additionalInfo)
UntrustedDestinationChain
error UntrustedDestinationChain(uint16 chainId)
UntrustedSourceAdapter
error UntrustedSourceAdapter(address srcAdapter, uint16 srcChain)
creation bytecode
0x6101008060405234610204576080816138668038038091610020828561023d565b8339810103126102045761003381610274565b61003f60208301610274565b610057606061005060408601610274565b9401610274565b916001600160a01b0316801561022e57608052600180556001600160a01b0316801561021b576040516301ffc9a760e01b815263261c910560e21b6004820152602081602481855afa908115610210575f916101d1575b50156101bf5760a05261ffff46116101ac574661ffff1660c0526008805460ff1916600117905560326009556001600160a01b0382161561019d576001600160a01b03161561019d5760e0526040516135dd908161028982396080518181816105d20152818161089d01528181610bd201528181610ec00152818161154101528181611ee80152818161271001528181612ebe015261314d015260a0518181816104e6015281816107ab01528181610d6801528181610e45015281816113d10152818161162f01526116bf015260c051818181610fd4015261311c015260e05181818161116a01526112090152f35b635435b28960e11b5f5260045ffd5b631063f20160e11b5f524660045260245ffd5b6347bd7c1d60e01b5f5260045260245ffd5b90506020813d602011610208575b816101ec6020938361023d565b8101031261020457518015158103610204575f6100ae565b5f80fd5b3d91506101df565b6040513d5f823e3d90fd5b6347bd7c1d60e01b5f525f60045260245ffd5b6322fdc95360e11b5f5260045ffd5b601f909101601f19168101906001600160401b0382119082101761026057604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102045756fe60806040526004361015610011575f80fd5b5f3560e01c806303b18bb51461029a578063070cc3f0146102955780630bd0bc5514610290578063117da1ee1461028b57806315e4db651461028657806319530a821461028157806324ea54f41461027c578063321d22de14610227578063331f5703146102775780633afc202e146102725780633f16f8941461026d57806341af5b521461026857806341c0b8191461026357806366e943f11461025e57806369b3054b146102595780636c047d5714610254578063770941a31461024f5780637ecebe001461024a578063833b9ed01461024557806386d54234146102405780639251d3cd14610231578063948367c91461023b57806395368d2e146102365780639b25084414610231578063a89f38a31461022c578063aa764d9214610227578063aacc4d3014610222578063b54f74221461021d578063b8c2117814610218578063c0b534c214610213578063c65566ac1461020e578063ccc5749014610209578063cd4d1c6414610204578063d0a10260146101ff578063d203852f146101fa578063d89508e8146101f5578063dd5ea06b146101f0578063debfda30146101eb578063e229cd76146101e6578063ebc136d0146101e15763f01c112c146101dc575f80fd5b611674565b6115c2565b6115a6565b6114fa565b611475565b611437565b611386565b611199565b611155565b61112e565b6110eb565b6110b1565b611031565b610fba565b610f87565b610717565b610f4d565b610eab565b610f2b565b610eef565b610df2565b610cdb565b610c6a565b610b56565b610aba565b610a4b565b610a07565b6109b7565b61095a565b610938565b61081f565b610754565b6106c6565b6106ab565b6105b3565b6104a4565b610461565b61040f565b6102a1565b565b34610401576020366003190112610401576004355f60e06040516102c481611739565b8281528260208201528260408201528260608201528260808201528260a08201528260c082015201525f5260046020526103fd60405f2061038c610383600661030b6117e7565b84546001600160a01b03168152936001810154602086015260028101546001600160a01b031660408601526003810154606086015260048101546001600160a01b0381166080870152610371906103669060a01c61ffff1690565b61ffff1660a0870152565b600581015460c0860152015460ff1690565b151560e0830152565b6040519182918281516001600160a01b03908116825260208084015190830152604080840151821690830152606080840151908301526080808401519091169082015260a08083015161ffff169082015260c0808301519082015260e0918201511515918101919091526101000190565b0390f35b5f80fd5b5f91031261040157565b34610401575f366003190112610401576020600954604051908152f35b6001600160a01b0381160361040157565b359061029f8261042c565b6001600160a01b03165f90815260066020526040902090565b346104015760203660031901126104015760043561047e8161042c565b60018060a01b03165f526007602052602060018060a01b0360405f205416604051908152f35b3461040157602036600319011261040157600435604051632474521560e21b81525f5160206135685f395f51905f5260048201523360248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91610542575b501561052f5761052d90611829565b005b630ea7d7ed60e21b5f523360045260245ffd5b610564915060203d60201161056a575b61055c81836117c6565b810190611806565b5f61051e565b503d610552565b61181e565b60206040818301928281528451809452019201905f5b8181106105995750505090565b825161ffff1684526020938401939092019160010161058c565b34610401575f36600319011261040157604051632318eabb60e01b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa801561057157610634925f92839261067a575b506040518080958194633656410160e21b835230600484016119c8565b03915afa8015610571576103fd915f91610656575b5060405191829182610576565b61067291503d805f833e61066a81836117c6565b810190611926565b90505f610649565b61069d91925060203d6020116106a4575b61069581836117c6565b810190611883565b905f610617565b503d61068b565b34610401575f36600319011261040157602060405160018152f35b34610401575f3660031901126104015760206040517f55435dd261a4b9b3364963f7738a7a662ad9c84396d64be3365284bb7f0a50418152f35b61ffff81160361040157565b359061029f82610700565b346104015760203660031901126104015761ffff60043561073781610700565b165f526002602052602063ffffffff60405f205416604051908152f35b34610401576040366003190112610401576004356107718161042c565b60243561077d8161042c565b604051632474521560e21b81525f5160206135685f395f51905f5260048201523360248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f916107f2575b501561052f5761052d91611a33565b61080b915060203d60201161056a5761055c81836117c6565b5f6107e3565b908160a09103126104015790565b6060366003190112610401576024356004356001600160401b0382116104015760e06003198336030112610401576044356001600160401b0381116104015761086c903690600401610811565b9061087960248401611bc4565b92604051631441226160e31b815260208180610899883060048401611bce565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91610909575b506001600160a01b0316156108f25761052d935060040190611bec565b6305870c5360e51b5f5261ffff841660045260245ffd5b61092b915060203d602011610931575b61092381836117c6565b810190611a1e565b5f6108d5565b503d610919565b34610401575f36600319011261040157602060ff600854166040519015158152f35b34610401575f366003190112610401576020610974611ed3565b6040516001600160a01b039091168152f35b634e487b7160e01b5f52603260045260245ffd5b6005548110156109b25760055f5260205f2001905f90565b610986565b34610401576020366003190112610401576004356005548110156104015760055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00154604051908152602090f35b34610401575f3660031901126104015760206040517f0d186688925976bbe6755ae984501c8e3e2b103a7af59fd803ab9c6d891ae7e08152f35b6003111561040157565b3461040157604036600319011261040157600435610a6881610a41565b602435610a748161042c565b604051906020820192610a8681611f3c565b60f81b835260601b6001600160601b031916602182015260158152610aac6035826117c6565b519020604051908152602090f35b34610401576020366003190112610401576004355f90815260046020818152604092839020805460018201546002830154600384015495840154600585015460069095015488516001600160a01b039586168152968701939093529083169685019690965260608401949094528416608083015261ffff60a094851c169382019390935260c081019290925260ff16151560e082015261010090f35b346104015760a036600319011261040157600435610b7381610700565b602435610b7f8161042c565b6044356064356001600160401b03811161040157610ba1903690600401610811565b9060843592610baf84610a41565b604051631441226160e31b815260208180610bce893060048401611bce565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91610c4b575b506001600160a01b031615610c3457610c229461206b565b60408051928352602083019190915290f35b6305870c5360e51b5f5261ffff851660045260245ffd5b610c64915060203d6020116109315761092381836117c6565b5f610c0a565b3461040157602036600319011261040157600435610c878161042c565b60018060a01b03165f525f602052602060405f2054604051908152f35b8015150361040157565b9181601f84011215610401578235916001600160401b038311610401576020838186019501011161040157565b346104015760c036600319011261040157600435610cf88161042c565b604435602435610d078261042c565b608435606435610d1682610ca4565b60a4356001600160401b03811161040157610d35903690600401610cae565b604051632474521560e21b81525f5160206135685f395f51905f52600482015233602482015290959194906020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91610daf575b501561052f5761052d9661223e565b610dc8915060203d60201161056a5761055c81836117c6565b5f610da0565b6024359063ffffffff8216820361040157565b359063ffffffff8216820361040157565b3461040157604036600319011261040157600435610e0f81610700565b610e17610dce565b604051632474521560e21b81525f5160206135685f395f51905f5260048201523360248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91610e8c575b501561052f5761052d91612693565b610ea5915060203d60201161056a5761055c81836117c6565b5f610e7d565b34610401575f366003190112610401576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346104015760203660031901126104015760043563ffffffff8116809103610401575f526003602052602061ffff60405f205416604051908152f35b34610401575f366003190112610401576020610f456126fb565b604051908152f35b34610401575f3660031901126104015760206040517fb00be3d6a5434b97b328543d1486d56adcb7e74080170d1cdd7e0306c3d9ba3d8152f35b34610401576020366003190112610401576020600435610fa681610a41565b610faf81611f3c565b600260405191148152f35b34610401575f36600319011261040157602060405161ffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60206040818301928281528451809452019201905f5b81811061101b5750505090565b825184526020938401939092019160010161100e565b34610401575f36600319011261040157604051600580548083525f91825260208301917f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b81811061109b576103fd8561108f818703826117c6565b60405191829182610ff8565b8254845260209093019260019283019201611078565b34610401575f3660031901126104015760206040517f025d8bbf3268be680d2605ebf6da15063b9915615bf1087dab336efc1bf970cb8152f35b34610401576020366003190112610401576004356111088161042c565b60018060a01b03165f526006602052602060018060a01b0360405f205416604051908152f35b34610401575f3660031901126104015760206040515f5160206135685f395f51905f528152f35b34610401575f366003190112610401576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60a0366003190112610401576004356111b18161042c565b6044356001600160401b038111610401576111d0903690600401610cae565b6111de60649392933561042c565b6084356001600160401b038111610401576111fd903690600401610cae565b5050611207612811565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036113785761130f926112a46112ba61126e6112b56112606112e29661125a6112ac99612f20565b96612f89565b999299969196949094613000565b9861128960408b0195611283875161ffff1690565b906130ec565b60a08a0196875263ffffffff165f52600360205260405f2090565b5461ffff1690565b915161ffff1690565b6131c8565b6001600160a01b03821660808501526112d1611ed3565b9051916001600160a01b0316612ef9565b61131d6112ff6112f36112f3611ed3565b6001600160a01b031690565b9160405193849160208301612508565b03601f1981018452836117c6565b803b1561040157604051638c87d95f60e01b8152905f9082908183816113468860048301612575565b03925af180156105715761135e575b61052d60018055565b8061136c5f611372936117c6565b80610405565b80611355565b6282b42960e81b5f5260045ffd5b34610401576020366003190112610401576004356113a381610ca4565b604051632474521560e21b81525f5160206135685f395f51905f5260048201523360248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91611418575b501561052f5761052d90612764565b611431915060203d60201161056a5761055c81836117c6565b5f611409565b3461040157604036600319011261040157602061146b60043561145981610700565b602435906114668261042c565b6127a2565b6040519015158152f35b3461040157602036600319011261040157602460206004356114968161042c565b6040516370a0823160e01b815230600482015292839182906001600160a01b03165afa8015610571576103fd915f916114db575b506040519081529081906020820190565b6114f4915060203d6020116106a45761069581836117c6565b5f6114ca565b34610401576020366003190112610401576004356115178161042c565b604051632315efd360e11b81526001600160a01b03918216600482015290602090829060249082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610571576103fd915f91611587575b5060405190151581529081906020820190565b6115a0915060203d60201161056a5761055c81836117c6565b5f611574565b34610401575f3660031901126104015760206040516103e88152f35b34610401576020366003190112610401576004356115df8161042c565b604051632474521560e21b81527fb00be3d6a5434b97b328543d1486d56adcb7e74080170d1cdd7e0306c3d9ba3d60048201526001600160a01b03918216602482015290602090829060449082907f0000000000000000000000000000000000000000000000000000000000000000165afa8015610571576103fd915f91611587575060405190151581529081906020820190565b346104015760203660031901126104015760043561169181610700565b604051632474521560e21b81525f5160206135685f395f51905f5260048201523360248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91611706575b501561052f5761052d906131e6565b61171f915060203d60201161056a5761055c81836117c6565b5f6116f7565b634e487b7160e01b5f52604160045260245ffd5b61010081019081106001600160401b0382111761175557604052565b611725565b60a081019081106001600160401b0382111761175557604052565b604081019081106001600160401b0382111761175557604052565b606081019081106001600160401b0382111761175557604052565b60e081019081106001600160401b0382111761175557604052565b90601f801991011681019081106001600160401b0382111761175557604052565b6040519061029f610100836117c6565b6040519061029f60e0836117c6565b90816020910312610401575161181b81610ca4565b90565b6040513d5f823e3d90fd5b600181108015611878575b611869576020817fa3370f7fc7573d713f27ae89ba2f193d4b43991622ff969b0475e2f911aacf1a92600955604051908152a1565b635435b28960e11b5f5260045ffd5b506103e88111611834565b90816020910312610401575190565b6001600160401b0381116117555760051b60200190565b519061029f8261042c565b519061029f82610700565b9080601f830112156104015781516118d681611892565b926118e460405194856117c6565b81845260208085019260051b82010192831161040157602001905b82821061190c5750505090565b60208091835161191b81610700565b8152019101906118ff565b9190916040818403126104015780516001600160401b03811161040157810183601f820112156104015780519061195c82611892565b9161196a60405193846117c6565b80835260208084019160051b8301019186831161040157602001905b8282106119ae575050509260208201516001600160401b0381116104015761181b92016118bf565b6020809183516119bd8161042c565b815201910190611986565b6001600160a01b039091168152602081019190915260400190565b90816020910312610401575160028110156104015790565b634e487b7160e01b5f52602160045260245ffd5b60021115611a1957565b6119fb565b90816020910312610401575161181b8161042c565b906001600160a01b03821680158015611bb3575b61186957604051630b484de560e11b81526001600160a01b03831690602081600481855afa5f9181611b82575b50611a8857635435b28960e11b5f5260045ffd5b611a9181611a0f565b61186957602060049160405192838092637e062a3560e11b82525afa908115610571575f91611b63575b506001600160a01b0316036118695781611b1882611af97fc75da42ee62930162e3820397b5ca2b273eb8992dfe1e312ca1395da23fb6ea795610448565b80546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0382165f908152600760205260409020611b3a908290611af9565b604080514661ffff1681526001600160a01b0392831660208201529290911690820152606090a1565b611b7c915060203d6020116109315761092381836117c6565b5f611abb565b611ba591925060203d602011611bac575b611b9d81836117c6565b8101906119e3565b905f611a74565b503d611b93565b506001600160a01b03821615611a47565b3561181b81610700565b6001600160a01b03909116815261ffff909116602082015260400190565b91906001600160a01b03611bfe611ed3565b163303611d1c57611c0d612811565b606081018035611c1c8161042c565b6001600160a01b0390611c3f90611c3290610448565b546001600160a01b031690565b1615611d0d57611d017f781ab631096baef844ab9d5aa66e260b73771a9cb39157747b189aceb999580993611cab611c796112f385611d2b565b91611c8d6080870135809430903390612831565b611ca2611c9a3688611da1565b913690611e47565b90349089612ae1565b611ccc6040611cc5611cbf60208801611bc4565b95611d2b565b9501611d2b565b6040805161ffff90951685526001600160a01b0395861660208601528401919091529290921660608201529081906080820190565b0390a261029f60018055565b630928045160e21b5f5260045ffd5b63060055a360e41b5f5260045ffd5b3561181b8161042c565b6001600160401b03811161175557601f01601f191660200190565b929192611d5c82611d35565b91611d6a60405193846117c6565b829481845281830111610401578281602093845f960137010152565b9080601f830112156104015781602061181b93359101611d50565b91909160e08184031261040157611db66117f7565b92611dc08261043d565b8452611dce6020830161070c565b6020850152611ddf6040830161043d565b6040850152611df06060830161043d565b60608501526080820135608085015260a0820135916001600160401b03831161040157611e2460c092611e2f948301611d86565b60a08601520161043d565b60c0830152565b6001600160401b0381160361040157565b919060a0838203126104015760405190611e608261175a565b81938035611e6d8161042c565b83526020810135611e7d81611e36565b6020840152611e8e60408201610de1565b604084015260608101356001600160801b03811681036104015760608401526080810135916001600160401b03831161040157608092611ece9201611d86565b910152565b6040516320d7ada960e11b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91611f23575090565b61181b915060203d6020116109315761092381836117c6565b60031115611a1957565b3561181b81611e36565b903590601e198136030182121561040157018035906001600160401b0382116104015760200191813603831361040157565b919082604091031261040157604051611f9a81611775565b6020808294805184520151910152565b906040828203126104015761181b91611f82565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b61181b9163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c061203e61202c608085015160e0608086015260e0850190611fbe565b60a085015184820360a0860152611fbe565b9201519060c0818403910152611fbe565b919060206120665f92604086526040860190611fe2565b930152565b919360029093919361207c81611f3c565b1480612222575b611d0d5761219993612099611c32604095610448565b916120d46120cf6120c36120b76120b260208601611f46565b612dec565b6001600160401b031690565b6001600160801b031690565b612e13565b9060808101906120e48282611f50565b1590506121ea576120ff916120f891611f50565b3691611d50565b905b6121406112f361213361212961211689612e99565b9861ffff165f52600260205260405f2090565b5463ffffffff1690565b966001600160a01b031690565b9261214961258d565b936121616121556117f7565b63ffffffff9098168852565b602087015280878701526060860152608085015260a084015260c083015282518080958194633b6f743b60e01b83526004830161204f565b03916001600160a01b03165afa908115610571575f916121bb575b5051905f90565b6121dd915060403d6040116121e3575b6121d581836117c6565b810190611faa565b5f6121b4565b503d6121cb565b505084514661ffff1660208201525f60408201819052606082015261221c81608081015b03601f1981018352826117c6565b90612101565b506001600160a01b03612237611c3285610448565b1615612083565b919590939461224b612811565b6001600160a01b038716968715611869576040516370a0823160e01b81523060048201526001600160a01b03851697906020816024818c5afa80156105715788915f916124e9575b50106124da576122a487838a612ef9565b6123c9575b50505050806122db575b506040519081525f5160206135885f395f51905f529080602081015b0390a361029f60018055565b92919061231c6122f3855f52600460205260405f2090565b60065f918281558260018201558260028201558260038201558260048201558260058201550155565b5f5b600554808210156123ac57856123406123368461099a565b90549060031b1c90565b1461234e575060010161231e565b5f5160206135885f395f51905f52939495506122cf929161238561237f61233661237a61239d95612606565b61099a565b9161099a565b90919082549060031b91821b915f19901b1916179055565b6123a5612636565b91506122b3565b50505f5160206135885f395f51905f52919293506122cf906123a5565b61242961243d9261220e9461241c61ffff46169761240c6123e86117f7565b8b81523060208201529661ffff8b1660408901526001600160a01b03166060880152565b6001600160a01b03166080860152565b8860a08501523691611d50565b60c082015260405192839160208301612508565b853b156104015785916124665f85936040518093819263d5896fcd60e01b835260048301612575565b038183885af190816124c6575b506124be577fcc804d8e263df83586868808b9d98890db72264e04df5570dc5800ecc64d238e906124a26125a1565b6124b1604051928392836125d0565b0390a35b5f8080806122a9565b5050506124b5565b8061136c5f6124d4936117c6565b5f612473565b631e9acf1760e31b5f5260045ffd5b612502915060203d6020116106a45761069581836117c6565b5f612293565b60208082528251828201528201516001600160a01b0390811660408084019190915283015161ffff1660608084019190915283015181166080808401919091528301511660a082015261181b916101009060c09060a08101518285015201519160e0808201520190611fbe565b90604061181b92600281528160208201520190611fbe565b6040519061259c6020836117c6565b5f8252565b3d156125cb573d906125b282611d35565b916125c060405193846117c6565b82523d5f602084013e565b606090565b9061ffff6125eb602092959495604085526040850190611fbe565b9416910152565b634e487b7160e01b5f52601160045260245ffd5b5f1981019190821161261457565b6125f2565b6127100390612710821161261457565b9190820391821161261457565b600554801561267f575f198101906005548210156109b25760055f8181527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3daf9092019190915555565b634e487b7160e01b5f52603160045260245ffd5b9063ffffffff169081156118695761ffff16805f52600260205260405f208263ffffffff19825416179055815f52600360205260405f208161ffff198254161790557fe678e38c513c4fc27e42958375f2e4adec527719229da30878daf8232eb0da9e5f80a3565b604051634a9b469760e11b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f9161274b575090565b61181b915060203d6020116106a45761069581836117c6565b60207f68482c17aff12a3401326b342851f10c82f562079aa0c242ace51a31848f1f7c91151560ff196008541660ff821617600855604051908152a1565b9061ffff461661ffff8316146127f0576001600160a01b039081165f9081526006602052604090205416151590816127d8575090565b6127e29150612e99565b6001600160a01b0316151590565b6001600160a01b039081165f90815260066020526040902054161515919050565b600260015414612822576002600155565b633ee5aeb560e01b5f5260045ffd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815261029f916128756084836117c6565b613248565b92919261288682611d35565b9161289460405193846117c6565b829481845281830111610401578281602093845f96015e010152565b909160a082840312610401576128c68383611f82565b9260408301516001600160401b03811161040157830181601f820112156104015780516128f281611892565b9161290060405193846117c6565b81835260208084019260051b820101908482116104015760208101925b828410612936575050505090606061181b929401611f82565b83516001600160401b038111610401578201906040828803601f190112610401576040519161296483611775565b6020810151835260408101516001600160401b0381116104015760209101019087601f83011215610401576020926129a2898486809651910161287a565b8382015281520193019261291d565b90602061181b928181520190611fe2565b8181029291811591840414171561261457565b9080601f8301121561040157815161181b9260200161287a565b909181830360e081126104015760801361040157604051612a0f81611790565b825181526020830151612a2181611e36565b6020820152612a338460408501611f82565b604082015292612a468160808501611f82565b9260c0810151906001600160401b03821161040157016040818303126104015760405191612a7383611775565b815166ffffffffffffff8116810361040157835260208201516001600160401b03811161040157612aa492016129d5565b602082015290565b9193926020612ac5606093608086526080860190611fe2565b86518583015295015160408401526001600160a01b0316910152565b60608201805192949092612bfd9190612b0690611c32906001600160a01b0316610448565b84516001600160a01b038083169692959291612b3391612b2691166112f3565b60808a01968751916132a0565b60208801612bf7612b5a612b51612b4c845161ffff1690565b612e99565b925161ffff1690565b938a612be7895195612bd7612b89612b7b604086015160018060a01b031690565b92516001600160a01b031690565b8451909290612bbd9060a0906001600160a01b031696015195612baa6117f7565b9788526001600160a01b03166020880152565b4661ffff1660408701526001600160a01b03166060860152565b6001600160a01b03166080840152565b8460a083015260c0820152613363565b926133af565b604051630d35b41560e01b815290915f8280612c1c86600483016129b1565b0381875afa918215610571575f92612dc5575b50516020612c54612c4c60095493612c4685612619565b906129c2565b612710900490565b920191825190808210612dad5750505051606082015260405191633b6f743b60e01b835260408380612c89856004830161204f565b0381845afa928315610571575f93612d8c575b508251808510612d75575082915f918360c0612ce5979651980197612cc7895160018060a01b031690565b60405163cbef2aa960e01b8152988995869485939160048501612aac565b03925af192831561057157612d0193612d53575b505190612629565b9081612d0b575050565b5f80808085612d20865160018060a01b031690565b5af1612d2a6125a1565b5015612d34575050565b516357b9d85960e11b5f526001600160a01b031660045260245260445ffd5b612d6e903d805f833e612d6681836117c6565b8101906129ef565b5050612cf9565b63a458261b60e01b5f52600452602484905260445ffd5b612da691935060403d6040116121e3576121d581836117c6565b915f612c9c565b63051be1ad60e11b5f5260045260245260445260645ffd5b612de29192503d805f833e612dda81836117c6565b8101906128b0565b915050905f612c2f565b6001600160401b03811615612dfe5790565b506001600160401b03612e0f6126fb565b1690565b604051600360f01b60208201526002815290612e306022836117c6565b600361ffff612e3e84613476565b1603612e7a576040515f602082015260809190911b6001600160801b03191660228201526012815261181b91612e756032836117c6565b6134d4565b61ffff612e8683613476565b633a51740d60e01b5f521660045260245ffd5b6020612eba9160405180938192631441226160e31b83523060048401611bce565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115610571575f91611f23575090565b61287561029f939261130f60405194859263a9059cbb60e01b6020850152602484016119c8565b6001600160a01b039081165f8181526007602052604090205490911691908215612f475750565b60a49060405190636bac55d760e11b825260606004830152600d60648301526c14dd185c99d85d19481c1bdbdb609a1b608483015260248201525f6044820152fd5b909160608310612ff15782600c1161040157600882013560e01c9280602c1161040157612fba6020600c850161345a565b9281604c1161040157612fd536604b198401604c8401611d50565b91604c11610401576112f36020602c612fee930161345a565b91565b636eca2e4b60e01b5f5260045ffd5b606060c0604051613010816117ab565b5f81525f60208201525f60408201525f838201525f60808201525f60a082015201528051810190602081830312610401576020810151906001600160401b03821161040157019060e082820312610401576130696117f7565b916020810151835261307d604082016118a9565b602084015261308e606082016118b4565b604084015261309f608082016118a9565b60608401526130b060a082016118a9565b608084015260c081015160a084015260e0810151916001600160401b038311610401576130e49260208092019201016129d5565b60c082015290565b604051637e1cafff60e11b81526001600160a01b03828116600483015230602483015261ffff84811660448401527f0000000000000000000000000000000000000000000000000000000000000000166064830152602090829060849082907f0000000000000000000000000000000000000000000000000000000000000000165afa908115610571575f916131a9575b5015613187575050565b6321a11df360e01b5f526001600160a01b031660045261ffff1660245260445ffd5b6131c2915060203d60201161056a5761055c81836117c6565b5f61317d565b61ffff9182169116036131d757565b633b9eff1960e11b5f5260045ffd5b61ffff165f818152600260209081526040808320805463ffffffff19811690915563ffffffff1680845260039092528220805461ffff1916905591907f23c8a9b2558e166ab04f4d56ee28935b372d47461e807f1d600126875cb4f7db9080a3565b905f602091828151910182855af11561181e575f513d61329757506001600160a01b0381163b155b6132775750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415613270565b91909160205f604051936132d7856132c98582019363095ea7b360e01b855289602484016119c8565b03601f1981018752866117c6565b84519082855af15f51903d81613337575b501590505b6132f657505050565b60405163095ea7b360e01b60208201526001600160a01b0390931660248401525f604484015261029f9261287590613331816064810161220e565b82613248565b1515905061335757506132ed6001600160a01b0382163b15155b5f6132e8565b60016132ed9114613351565b61181b61220e9160405192839160208301612508565b60405190613386826117ab565b606060c0835f81525f60208201525f60408201525f838201528260808201528260a08201520152565b909392916133bb613379565b506133c461258d565b83519094901561344b576121296133f46001600160401b036133ee81602061340796015116612dec565b16612e13565b9361ffff165f52600260205260405f2090565b9461341f6134136117f7565b63ffffffff9097168752565b6001600160a01b03166020860152604085018190526060850152608084015260a083015260c082015290565b506134076121296133f461258d565b359060208110613468575090565b5f199060200360031b1b1690565b6002815110613486576002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fd5b805191908290602001825e015f815290565b90600361ffff6134e384613476565b1603612e7a57805161ffff81116135505761ffff60019116019161ffff83116126145761220e61181b9260046135239560405196879560208701906134c2565b600160f81b815260f09190911b6001600160f01b0319166001820152600360f81b600382015201906134c2565b6306dfcc6560e41b5f52601060045260245260445ffdfe7935bd0ae54bc31f548c14dba4d37c5c64b3f8ca900cb468fb8abd54d5894f551d2f361398f0cd1eeefa9bd2e5d156e421a3dac8bafb57871aa221c667663139a26469706673582212206a4cfa0152f98443e337d936a37763bb35e316ddbe4ff14131609e60a8d6984364736f6c634300081c0033000000000000000000000000fb7dad21b5bdd30d1317f20c63731dfbf834c010000000000000000000000000603821f86dedc794a3225d62afe1f175fe4ae8610000000000000000000000001a44076050125825900e736c501f859c50fe728c000000000000000000000000e355f38f0144a9f07a1dc8f95ed23658d96613af