3.2k txs
1.33m calls
constructor
constructor(uint32 _eid, address _owner)
functions
blockedLibrary
viewfunction blockedLibrary() view returns (address)
composeQueue
viewfunction composeQueue(address from, address to, bytes32 guid, uint16 index) view returns (bytes32 messageHash)
defaultReceiveLibrary
viewfunction defaultReceiveLibrary(uint32 srcEid) view returns (address lib)
defaultReceiveLibraryTimeout
viewfunction defaultReceiveLibraryTimeout(uint32 srcEid) view returns (address lib, uint256 expiry)
defaultSendLibrary
viewfunction defaultSendLibrary(uint32 dstEid) view returns (address lib)
delegates
viewfunction delegates(address oapp) view returns (address delegate)
eid
viewfunction eid() view returns (uint32)
EMPTY_PAYLOAD_HASH
viewfunction EMPTY_PAYLOAD_HASH() view returns (bytes32)
getConfig
viewfunction getConfig(address _oapp, address _lib, uint32 _eid, uint32 _configType) view returns (bytes config)
getReceiveLibrary
viewfunction getReceiveLibrary(address _receiver, uint32 _srcEid) view returns (address lib, bool isDefault)
getRegisteredLibraries
viewfunction getRegisteredLibraries() view returns (address[])
getSendContext
viewfunction getSendContext() view returns (uint32, address)
getSendLibrary
viewfunction getSendLibrary(address _sender, uint32 _dstEid) view returns (address lib)
inboundNonce
viewfunction inboundNonce(address _receiver, uint32 _srcEid, bytes32 _sender) view returns (uint64)
inboundPayloadHash
viewfunction inboundPayloadHash(address receiver, uint32 srcEid, bytes32 sender, uint64 inboundNonce) view returns (bytes32 payloadHash)
initializable
viewfunction initializable(tuple _origin, address _receiver) view returns (bool)
isDefaultSendLibrary
viewfunction isDefaultSendLibrary(address _sender, uint32 _dstEid) view returns (bool)
isRegisteredLibrary
viewfunction isRegisteredLibrary(address lib) view returns (bool)
isSendingMessage
viewfunction isSendingMessage() view returns (bool)
isSupportedEid
viewfunction isSupportedEid(uint32 _eid) view returns (bool)
isValidReceiveLibrary
viewfunction isValidReceiveLibrary(address _receiver, uint32 _srcEid, address _actualReceiveLib) view returns (bool)
lazyInboundNonce
viewfunction lazyInboundNonce(address receiver, uint32 srcEid, bytes32 sender) view returns (uint64 nonce)
lzToken
viewfunction lzToken() view returns (address)
nativeToken
viewfunction nativeToken() view returns (address)
nextGuid
viewfunction nextGuid(address _sender, uint32 _dstEid, bytes32 _receiver) view returns (bytes32)
NIL_PAYLOAD_HASH
viewfunction NIL_PAYLOAD_HASH() view returns (bytes32)
outboundNonce
viewfunction outboundNonce(address sender, uint32 dstEid, bytes32 receiver) view returns (uint64 nonce)
owner
viewfunction owner() view returns (address)
quote
viewfunction quote(tuple _params, address _sender) view returns (tuple)
receiveLibraryTimeout
viewfunction receiveLibraryTimeout(address receiver, uint32 srcEid) view returns (address lib, uint256 expiry)
verifiable
viewfunction verifiable(tuple _origin, address _receiver) view returns (bool)
burn
nonpayablefunction burn(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash)
clear
nonpayablefunction clear(address _oapp, tuple _origin, bytes32 _guid, bytes _message)
lzCompose
payablefunction lzCompose(address _from, address _to, bytes32 _guid, uint16 _index, bytes _message, bytes _extraData) payable
lzComposeAlert
nonpayablefunction lzComposeAlert(address _from, address _to, bytes32 _guid, uint16 _index, uint256 _gas, uint256 _value, bytes _message, bytes _extraData, bytes _reason)
lzReceive
payablefunction lzReceive(tuple _origin, address _receiver, bytes32 _guid, bytes _message, bytes _extraData) payable
lzReceiveAlert
nonpayablefunction lzReceiveAlert(tuple _origin, address _receiver, bytes32 _guid, uint256 _gas, uint256 _value, bytes _message, bytes _extraData, bytes _reason)
nilify
nonpayablefunction nilify(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce, bytes32 _payloadHash)
recoverToken
nonpayablefunction recoverToken(address _token, address _to, uint256 _amount)
registerLibrary
nonpayablefunction registerLibrary(address _lib)
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(tuple _params, address _refundAddress) payable returns (tuple)
sendCompose
nonpayablefunction sendCompose(address _to, bytes32 _guid, uint16 _index, bytes _message)
setConfig
nonpayablefunction setConfig(address _oapp, address _lib, tuple[] _params)
setDefaultReceiveLibrary
nonpayablefunction setDefaultReceiveLibrary(uint32 _eid, address _newLib, uint256 _gracePeriod)
setDefaultReceiveLibraryTimeout
nonpayablefunction setDefaultReceiveLibraryTimeout(uint32 _eid, address _lib, uint256 _expiry)
setDefaultSendLibrary
nonpayablefunction setDefaultSendLibrary(uint32 _eid, address _newLib)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setLzToken
nonpayablefunction setLzToken(address _lzToken)
setReceiveLibrary
nonpayablefunction setReceiveLibrary(address _oapp, uint32 _eid, address _newLib, uint256 _gracePeriod)
setReceiveLibraryTimeout
nonpayablefunction setReceiveLibraryTimeout(address _oapp, uint32 _eid, address _lib, uint256 _expiry)
setSendLibrary
nonpayablefunction setSendLibrary(address _oapp, uint32 _eid, address _newLib)
skip
nonpayablefunction skip(address _oapp, uint32 _srcEid, bytes32 _sender, uint64 _nonce)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
verify
nonpayablefunction verify(tuple _origin, address _receiver, bytes32 _payloadHash)
events
ComposeDelivered
event ComposeDelivered(address from, address to, bytes32 guid, uint16 index)
ComposeSent
event ComposeSent(address from, address to, bytes32 guid, uint16 index, bytes message)
DefaultReceiveLibrarySet
event DefaultReceiveLibrarySet(uint32 eid, address newLib)
DefaultReceiveLibraryTimeoutSet
event DefaultReceiveLibraryTimeoutSet(uint32 eid, address oldLib, uint256 expiry)
DefaultSendLibrarySet
event DefaultSendLibrarySet(uint32 eid, address newLib)
DelegateSet
event DelegateSet(address sender, address delegate)
InboundNonceSkipped
event InboundNonceSkipped(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce)
LibraryRegistered
event LibraryRegistered(address newLib)
LzComposeAlert
event LzComposeAlert(address indexed from, address indexed to, address indexed executor, bytes32 guid, uint16 index, uint256 gas, uint256 value, bytes message, bytes extraData, bytes reason)
LzReceiveAlert
event LzReceiveAlert(address indexed receiver, address indexed executor, (uint32 srcEid, bytes32 sender, uint64 nonce) origin, bytes32 guid, uint256 gas, uint256 value, bytes message, bytes extraData, bytes reason)
LzTokenSet
event LzTokenSet(address token)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PacketBurnt
event PacketBurnt(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash)
PacketDelivered
event PacketDelivered((uint32 srcEid, bytes32 sender, uint64 nonce) origin, address receiver)
PacketNilified
event PacketNilified(uint32 srcEid, bytes32 sender, address receiver, uint64 nonce, bytes32 payloadHash)
PacketSent
event PacketSent(bytes encodedPayload, bytes options, address sendLibrary)
PacketVerified
event PacketVerified((uint32 srcEid, bytes32 sender, uint64 nonce) origin, address receiver, bytes32 payloadHash)
ReceiveLibrarySet
event ReceiveLibrarySet(address receiver, uint32 eid, address newLib)
ReceiveLibraryTimeoutSet
event ReceiveLibraryTimeoutSet(address receiver, uint32 eid, address oldLib, uint256 timeout)
SendLibrarySet
event SendLibrarySet(address sender, uint32 eid, address newLib)
errors
LZ_AlreadyRegistered
error LZ_AlreadyRegistered()
LZ_ComposeExists
error LZ_ComposeExists()
LZ_ComposeNotFound
error LZ_ComposeNotFound(bytes32 expected, bytes32 actual)
LZ_DefaultReceiveLibUnavailable
error LZ_DefaultReceiveLibUnavailable()
LZ_DefaultSendLibUnavailable
error LZ_DefaultSendLibUnavailable()
LZ_InsufficientFee
error LZ_InsufficientFee(uint256 requiredNative, uint256 suppliedNative, uint256 requiredLzToken, uint256 suppliedLzToken)
LZ_InvalidExpiry
error LZ_InvalidExpiry()
LZ_InvalidNonce
error LZ_InvalidNonce(uint64 nonce)
LZ_InvalidPayloadHash
error LZ_InvalidPayloadHash()
LZ_InvalidReceiveLibrary
error LZ_InvalidReceiveLibrary()
LZ_LzTokenUnavailable
error LZ_LzTokenUnavailable()
LZ_OnlyNonDefaultLib
error LZ_OnlyNonDefaultLib()
LZ_OnlyReceiveLib
error LZ_OnlyReceiveLib()
LZ_OnlyRegisteredLib
error LZ_OnlyRegisteredLib()
LZ_OnlyRegisteredOrDefaultLib
error LZ_OnlyRegisteredOrDefaultLib()
LZ_OnlySendLib
error LZ_OnlySendLib()
LZ_PathNotInitializable
error LZ_PathNotInitializable()
LZ_PathNotVerifiable
error LZ_PathNotVerifiable()
LZ_PayloadHashNotFound
error LZ_PayloadHashNotFound(bytes32 expected, bytes32 actual)
LZ_SameValue
error LZ_SameValue()
LZ_SendReentrancy
error LZ_SendReentrancy()
LZ_Unauthorized
error LZ_Unauthorized()
LZ_UnsupportedEid
error LZ_UnsupportedEid()
LZ_UnsupportedInterface
error LZ_UnsupportedInterface()
LZ_ZeroLzTokenFee
error LZ_ZeroLzTokenFee()
Transfer_NativeFailed
error Transfer_NativeFailed(address _to, uint256 _value)
Transfer_ToAddressIsZero
error Transfer_ToAddressIsZero()
creation bytecode
0x60c06040526001600d553480156200001657600080fd5b50604051620063f0380380620063f08339810160408190526200003991620002d6565b816200004533620000a6565b63ffffffff166080526040516200005c90620002c8565b604051809103906000f08015801562000079573d6000803e3d6000fd5b506001600160a01b031660a08190526200009390620000f6565b6200009e81620000a6565b505062000353565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200010062000267565b6040516301ffc9a760e01b81526325fc096160e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200014c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000172919062000328565b620001905760405163eb64f35d60e01b815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615620001cb5760405163457517f360e11b815260040160405180910390fd5b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180546001600160a01b0319168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af5910160405180910390a150565b6000546001600160a01b03163314620002c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b565b61028f806200616183390190565b60008060408385031215620002ea57600080fd5b825163ffffffff81168114620002ff57600080fd5b60208401519092506001600160a01b03811681146200031d57600080fd5b809150509250929050565b6000602082840312156200033b57600080fd5b815180151581146200034c57600080fd5b9392505050565b60805160a051615dc56200039c60003960006107b101526000818161055f01528181612e270152818161384c015281816138b30152818161408801526140ef0152615dc56000f3fe6080604052600436106103605760003560e01c80639132e5c3116101c6578063c9fc7bcd116100f7578063ddc28c5811610095578063e8964e811161006f578063e8964e8114610bc0578063ef667aa114610be0578063f2fde38b14610c2b578063f64be4c714610c4b57600080fd5b8063ddc28c5814610b5f578063e1758bd814610b8c578063e4fe1d9414610ba057600080fd5b8063d4b4ec8f116100d1578063d4b4ec8f14610aa3578063d70b890214610ac3578063dc706a6214610ae3578063dc93c8a214610b1357600080fd5b8063c9fc7bcd14610a27578063ca5eb5e114610a6e578063cb5026b914610a8e57600080fd5b8063a7229fd911610164578063aafea3121161013e578063aafea312146109a7578063b96a277f146109c7578063c28e0eed146109e7578063c9a54a9914610a0757600080fd5b8063a7229fd914610947578063a825d74714610967578063aafe5e071461098757600080fd5b80639c6d7340116101a05780639c6d73401461089f5780639d7f9775146108e7578063a0dd43fc14610907578063a718531b1461092757600080fd5b80639132e5c31461084a57806391d20fa11461086c5780639535ff301461087f57600080fd5b80635b17bb70116102a05780636f50a8031161023e57806379624ca91161021857806379624ca9146107d35780637cb59012146107ec578063861e1ca51461080c5780638da5cb5b1461082c57600080fd5b80636f50a80314610754578063715018a61461078a578063733180911461079f57600080fd5b80636a14d7151161027a5780636a14d715146106955780636bf73fa3146106b55780636dbd9f90146106d55780636e83f5bb146106f557600080fd5b80635b17bb70146105e45780636750cd4c14610645578063697fe6b61461067557600080fd5b80632baf0be71161030d578063402f8468116102e7578063402f8468146104ee57806340f806831461052d578063416ecebf1461054d578063587cde1e1461059657600080fd5b80632baf0be7146104455780632e80fbf31461048757806335d330b0146104a757600080fd5b80632637a4501161033e5780632637a450146103d85780632a56c1b0146103f85780632b3197b91461041857600080fd5b80630c0c389e1461036557806314f651a91461037a578063183c834f146103b8575b600080fd5b610378610373366004614bce565b610c81565b005b34801561038657600080fd5b5061038f610d98565b6040805163ffffffff90931683526001600160a01b039091166020830152015b60405180910390f35b3480156103c457600080fd5b506103786103d3366004614c7e565b610dca565b6103eb6103e6366004614cc9565b611155565b6040516103af9190614d1c565b34801561040457600080fd5b50610378610413366004614d5f565b6112be565b34801561042457600080fd5b50610438610433366004614dcf565b61137c565b6040516103af9190614e91565b34801561045157600080fd5b506104797fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b6040519081526020016103af565b34801561049357600080fd5b506103786104a2366004614ebc565b611497565b3480156104b357600080fd5b506104796104c2366004614f23565b600c60209081526000948552604080862082529385528385208152918452828420909152825290205481565b3480156104fa57600080fd5b5061050e610509366004614f65565b61166e565b604080516001600160a01b0390931683529015156020830152016103af565b34801561053957600080fd5b50610378610548366004614ebc565b611705565b34801561055957600080fd5b506105817f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103af565b3480156105a257600080fd5b506105cc6105b1366004614f8f565b600f602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103af565b3480156105f057600080fd5b5061062c6105ff366004614faa565b600160209081526000938452604080852082529284528284209052825290205467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016103af565b34801561065157600080fd5b50610665610660366004614fe6565b6118b5565b60405190151581526020016103af565b34801561068157600080fd5b50610378610690366004615001565b611905565b3480156106a157600080fd5b506103786106b0366004614c7e565b61197a565b3480156106c157600080fd5b506103786106d03660046150ff565b611e7a565b3480156106e157600080fd5b506103786106f03660046151e3565b611ee4565b34801561070157600080fd5b50610735610710366004614fe6565b600b60205260009081526040902080546001909101546001600160a01b039091169082565b604080516001600160a01b0390931683526020830191909152016103af565b34801561076057600080fd5b506105cc61076f366004614fe6565b600a602052600090815260409020546001600160a01b031681565b34801561079657600080fd5b50610378611fb8565b3480156107ab57600080fd5b506105cc7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107df57600080fd5b50600d5460011415610665565b3480156107f857600080fd5b50610378610807366004615274565b611fcc565b34801561081857600080fd5b506106656108273660046152c6565b6120d1565b34801561083857600080fd5b506000546001600160a01b03166105cc565b34801561085657600080fd5b5061085f61213e565b6040516103af91906152f1565b61037861087a36600461533e565b6121a0565b34801561088b57600080fd5b5061037861089a3660046153e9565b612362565b3480156108ab57600080fd5b5061062c6108ba366004614faa565b600360209081526000938452604080852082529284528284209052825290205467ffffffffffffffff1681565b3480156108f357600080fd5b506106656109023660046153e9565b61265b565b34801561091357600080fd5b5061062c610922366004614faa565b612735565b34801561093357600080fd5b5061037861094236600461542c565b6127ce565b34801561095357600080fd5b50610378610962366004615458565b612bd7565b34801561097357600080fd5b50610378610982366004615476565b612bef565b34801561099357600080fd5b506104796109a2366004614faa565b612d87565b3480156109b357600080fd5b506103786109c23660046154b3565b612e96565b3480156109d357600080fd5b506105cc6109e2366004614f65565b613154565b3480156109f357600080fd5b50610378610a02366004614f8f565b6131dc565b348015610a1357600080fd5b50610665610a223660046152c6565b613251565b348015610a3357600080fd5b50610479610a423660046154cf565b600260209081526000948552604080862082529385528385208152918452828420909152825290205481565b348015610a7a57600080fd5b50610378610a89366004614f8f565b6132b7565b348015610a9a57600080fd5b50610479600081565b348015610aaf57600080fd5b50610378610abe36600461542c565b61332f565b348015610acf57600080fd5b50610378610ade3660046154cf565b613633565b348015610aef57600080fd5b50610665610afe366004614f8f565b60056020526000908152604090205460ff1681565b348015610b1f57600080fd5b50610665610b2e366004614f65565b6001600160a01b03918216600090815260066020908152604080832063ffffffff9490941683529290522054161590565b348015610b6b57600080fd5b50610b7f610b7a366004614cc9565b613756565b6040516103af9190615511565b348015610b9857600080fd5b5060006105cc565b348015610bac57600080fd5b50600e546105cc906001600160a01b031681565b348015610bcc57600080fd5b50610378610bdb366004614f8f565b613a81565b348015610bec57600080fd5b50610735610bfb366004614f65565b6008602090815260009283526040808420909152908252902080546001909101546001600160a01b039091169082565b348015610c3757600080fd5b50610378610c46366004614f8f565b613c7f565b348015610c5757600080fd5b506105cc610c66366004614fe6565b6009602052600090815260409020546001600160a01b031681565b610cd086610c9260208a018a614fe6565b60208a0135610ca760608c0160408d01615528565b898989604051602001610cbc93929190615543565b604051602081830303815290604052613d29565b506040517f13137d650000000000000000000000000000000000000000000000000000000081526001600160a01b038716906313137d65903490610d24908b908a908a908a9033908b908b906004016155e0565b6000604051808303818588803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b50505050507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca048787604051610d87929190615637565b60405180910390a150505050505050565b600080610da8600d546001141590565b610db457600080610dc2565b610dc2600d5460a081901c91565b915091509091565b6001600160a01b038216600090815260056020526040902054829060ff16610e1e576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615610eda576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e92919061568a565b6002811115610ea357610ea361565b565b03610eda576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615610fa8576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015610f4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7291906156b9565b610fa8576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fb188613f6c565b6000610fbd898961166e565b9150508015610ff8576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600003611058576001600160a01b038916600090815260086020908152604080832063ffffffff8c168452909152812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556110ef565b438611611091576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03898116600090815260086020908152604080832063ffffffff8d168452909152902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169189169190911781556001018690555b604080516001600160a01b03808c16825263ffffffff8b166020830152891691810191909152606081018790527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb20928906080015b60405180910390a1505050505050505050565b61115d614b15565b61116a6020840184614fe6565b336001600d54146111a7576040517fee120b0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b77ffffffff000000000000000000000000000000000000000060a083811b919091166001600160a01b03831617600d556111e6908601608087016156d6565b80156111fb5750600e546001600160a01b0316155b15611232576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061123f3388613fd6565b91509150600061124c3490565b9050600061126861126360a08b0160808c016156d6565b6142ba565b905061127984604001518383614388565b600e5460408501516020015161129b916001600160a01b03169083868c6143ef565b6040840151516112ad9083858b61441c565b50506001600d555095945050505050565b6112c785613f6c565b60008383836040516020016112de93929190615543565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905061133a8661131f6020880188614fe6565b602088013561133460608a0160408b01615528565b85613d29565b507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04858760405161136c929190615637565b60405180910390a1505050505050565b6001600160a01b038316600090815260056020526040902054606090849060ff166113d3576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f9c33abf700000000000000000000000000000000000000000000000000000000815263ffffffff80861660048301526001600160a01b0388811660248401529085166044830152861690639c33abf790606401600060405180830381865afa158015611447573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261148d91908101906157be565b9695505050505050565b6114a085613f6c565b6001600160a01b038516600090815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff8616845290915290205481811461152c576040517f7182306f00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6001600160a01b038616600090815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff90811690841611801590611579575080155b156115bc576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401611523565b6001600160a01b038616600081815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff8916808652908452938290207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905581519081529182018890528101929092526060820152608081018390527faf0450c392c4f702515a457a362328c8aa21916048ca6d0419e248b30cb552929060a00161136c565b6001600160a01b03808316600090815260076020908152604080832063ffffffff8616845290915281205490911690816116fe5763ffffffff83166000908152600a60205260409020546001600160a01b03169150816116fa576040517f78e84d0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060015b9250929050565b61170e85613f6c565b6001600160a01b038516600090815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff86168452909152902054818114611795576040517f7182306f0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401611523565b8015806117e057506001600160a01b038616600090815260016020908152604080832063ffffffff89168452825280832087845290915290205467ffffffffffffffff908116908416115b15611823576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401611523565b6001600160a01b038616600081815260026020908152604080832063ffffffff8a16808552908352818420898552835281842067ffffffffffffffff89168086529084528285209490945581519081529182018890528101929092526060820152608081018390527f7f68a37a6e69a0de35024a234558f9efe4b33b58657753d21eaaa82d51c3510e9060a00161136c565b63ffffffff81166000908152600960205260408120546001600160a01b0316158015906118ff575063ffffffff82166000908152600a60205260409020546001600160a01b031615155b92915050565b336001600160a01b03168b6001600160a01b03168d6001600160a01b03167f8a0b1dce321c5c5fb42349bce46d18087c04140de520917661fb923e44a904b98d8d8d8d8d8d8d8d8d8d6040516119649a999897969594939291906157f3565b60405180910390a4505050505050505050505050565b6001600160a01b038216600090815260056020526040902054829060ff161580156119ad57506001600160a01b03811615155b156119e4576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b03811615611aa0576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a58919061568a565b6002811115611a6957611a6961565b565b03611aa0576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b03821615611b6e576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3891906156b9565b611b6e576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b7788613f6c565b6001600160a01b03808916600090815260076020908152604080832063ffffffff8c16845290915290205481169087168103611bdf576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03898116600081815260076020908152604080832063ffffffff8e168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958d1695861790558051938452908301919091528101919091527fcd6f92f5ac6185a5acfa02c92090746cec64d777269cbcd0ed031e396657a1c29060600160405180910390a18515611dcf576001600160a01b0381161580611c9a57506001600160a01b038716155b15611cd1576040517f3c075f7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060400160405280836001600160a01b031681526020018843611cf9919061588b565b90526001600160a01b03808c16600090815260086020908152604080832063ffffffff8f1684528252918290208451815494167fffffffffffffffffffffffff00000000000000000000000000000000000000009094169390931783558301516001909201829055519192507f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092891611dc1918d918d9187916001600160a01b03948516815263ffffffff93909316602084015292166040820152606081019190915260800190565b60405180910390a150611e6f565b6001600160a01b03898116600081815260086020908152604080832063ffffffff8e1680855290835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001018490558151948552918401919091529284169282019290925260608101919091527f4e0a5bbfa0c11a64effb1ada324b5437a17272e1aed9320398715ef71bb2092890608001611142565b505050505050505050565b336001600160a01b03168a6001600160a01b03167f7edfa10fe10193301ad8a8bea7e968c7bcabcc64981f368e3aeada40ce26ae2c8d8c8c8c8c8c8c8c8c8c604051611ecf9a9998979695949392919061589e565b60405180910390a35050505050505050505050565b6001600160a01b038316600090815260056020526040902054839060ff16611f38576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611f4185613f6c565b6040517f20efd7220000000000000000000000000000000000000000000000000000000081526001600160a01b038516906320efd72290611f8a908890879087906004016158fd565b600060405180830381600087803b158015611fa457600080fd5b505af1158015611e6f573d6000803e3d6000fd5b611fc0614446565b611fca60006144ba565b565b336000908152600c602090815260408083206001600160a01b03891684528252808320878452825280832061ffff871684529091529020541561203b576040517f1508219400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818160405161204b929190615a4e565b60408051918290038220336000818152600c60209081528482206001600160a01b038c16835281528482208a8352815284822061ffff8a168352905292909220557f3d52ff888d033fd3dd1d8057da59e850c91d91a72c41dfa445b247dfedeb6dc1916120c2919088908890889088908890615a5e565b60405180910390a15050505050565b6001600160a01b038116600090815260016020908152604082206121379185918591859061210190850185614fe6565b63ffffffff1681526020808201929092526040908101600090812089840135825290925290205467ffffffffffffffff16614522565b9392505050565b6060600480548060200260200160405190810160405280929190818152602001828054801561219657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612178575b5050505050905090565b6001600160a01b038089166000908152600c60209081526040808320938b168352928152828220898352815282822061ffff8916835290528181205491516121eb9087908790615a4e565b60405180910390209050808214612238576040517f35ca595f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401611523565b6001600160a01b03808b166000908152600c60209081526040808320938d168084529382528083208c8452825280832061ffff8c1684529091529081902060019055517fd0a1026000000000000000000000000000000000000000000000000000000000815263d0a102609034906122c0908e908d908c908c9033908d908d90600401615aa7565b6000604051808303818588803b1580156122d957600080fd5b505af11580156122ed573d6000803e3d6000fd5b50505050507e36c98efcf9e6641dfbc9051f66f405253e8e0c2ab4a24dccda15595b7378c88a8a8a8a60405161234e94939291906001600160a01b039485168152929093166020830152604082015261ffff91909116606082015260800190565b60405180910390a150505050505050505050565b6001600160a01b038116600090815260056020526040902054819060ff1615801561239557506001600160a01b03811615155b156123cc576040517fa4ff2ec300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612488576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561241c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612440919061568a565b60028111156124515761245161565b565b03612488576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b03821615612556576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156124fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252091906156b9565b612556576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61255f87613f6c565b6001600160a01b03878116600090815260066020908152604080832063ffffffff8b1684529091529020548187169116036125c6576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03878116600081815260066020908152604080832063ffffffff8c168085529083529281902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016958b1695861790558051938452908301919091528101919091527f4cff966ebee29a156dcb34cf72c1d06231fb1777f6bdf6e8089819232f002b1c90606001610d87565b600080600061266a868661166e565b91509150816001600160a01b0316846001600160a01b03160361269257600192505050612137565b6000816126c7576001600160a01b038716600090815260086020908152604080832063ffffffff8a16845290915290206126dd565b63ffffffff86166000908152600b602052604090205b6040805180820190915281546001600160a01b03908116808352600190930154602083015290925086161480156127175750438160200151115b156127285760019350505050612137565b5060009695505050505050565b6001600160a01b038316600090815260016020908152604080832063ffffffff86168452825280832084845290915281205467ffffffffffffffff165b6001600160a01b038516600090815260026020908152604080832063ffffffff881684528252808320868452825280832067ffffffffffffffff60018601168452909152902054156127c657600101612772565b949350505050565b6127d6614446565b6001600160a01b038216600090815260056020526040902054829060ff1661282a576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b038116156128e6576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e919061568a565b60028111156128af576128af61565b565b036128e6576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b038216156129b4576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa15801561295a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297e91906156b9565b6129b4576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87166000908152600a60205260409020546001600160a01b039081169087168103612a10576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff88166000818152600a602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038c169081179091558251938452908301527fc16891855cffb4a5ac51ac11864a3f3c96ba816cc45fe686c987ae36277de5ec910160405180910390a18515612b425763ffffffff88166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038316178155612ae7874361588b565b600182018190556040805163ffffffff8c1681526001600160a01b038516602082015280820192909252517f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89181900360600190a150612bcd565b63ffffffff88166000818152600b6020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010183905580519384526001600160a01b038516918401919091528201527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f89060600160405180910390a15b5050505050505050565b612bdf614446565b612bea8383836145bd565b505050565b612c0682612c006020860186614fe6565b3361265b565b612c3c576040517f4fa6ecac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660009081526001602090815260408220908290612c6590870187614fe6565b63ffffffff1681526020808201929092526040908101600090812087840135825290925290205467ffffffffffffffff169050612ca3848483614522565b612cd9576040517f751cb20f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ce48484836145e0565b612d1a576040517f0177e1ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d4683612d2b6020870187614fe6565b6020870135612d406060890160408a01615528565b866146a0565b7f0d87345f3d1c929caba93e1c3821b54ff3512e12b66aa3cfe54b6bcbc17e59b4848484604051612d7993929190615afb565b60405180910390a150505050565b6001600160a01b038316600090815260036020908152604080832063ffffffff8616845282528083208484529091528120548190612dd09067ffffffffffffffff166001615b23565b604080517fffffffffffffffff00000000000000000000000000000000000000000000000060c084901b166020808301919091527fffffffff000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000060e090811b821660288501526001600160a01b038b16602c85015289901b16604c830152605080830188905283518084039091018152607090920190925280519101209091505b95945050505050565b612e9e614446565b6001600160a01b038116600090815260056020526040902054819060ff16612ef2576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600160a01b03811615612fae576001816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f66919061568a565b6002811115612f7757612f7761565b565b03612fae576040517f7a01ede200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82846001600160a01b0382161561307c576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa158015613022573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304691906156b9565b61307c576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff86166000908152600960205260409020546001600160a01b038087169116036130d6576040517fd0ecb66b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff861660008181526009602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038a169081179091558251938452908301527f16aa0f528038ab41019e95bae5b418a50ba8532c5800e3b7ea2f517d3fa625f5910161136c565b6001600160a01b03808316600090815260066020908152604080832063ffffffff8616845290915290205416806118ff575063ffffffff81166000908152600960205260409020546001600160a01b0316806118ff576040517f6c1ccdb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131e4614446565b600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd476ec5ec1ac11cec3714d41e7ea49419471aceb9bd0dff1becfc3e363a62396906020015b60405180910390a150565b6001600160a01b038116600090815260016020908152604082206121379185918591859061328190850185614fe6565b63ffffffff1681526020808201929092526040908101600090812089840135825290925290205467ffffffffffffffff166145e0565b336000818152600f602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0386169081179091558251938452908301527f6ee10e9ed4d6ce9742703a498707862f4b00f1396a87195eb93267b3d79839819101613246565b6001600160a01b038216600090815260056020526040902054829060ff16613383576040517f378b1de600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001600160a01b0381161561343f576000816001600160a01b0316631881d94d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156133d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f7919061568a565b60028111156134085761340861565b565b0361343f576040517f84ead63600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83856001600160a01b0382161561350d576040517f6750cd4c00000000000000000000000000000000000000000000000000000000815263ffffffff821660048201526001600160a01b03831690636750cd4c90602401602060405180830381865afa1580156134b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d791906156b9565b61350d576040517f391daaa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613515614446565b846000036135615763ffffffff87166000908152600b6020526040812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168155600101556135e7565b43851161359a576040517f05df9f2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff87166000908152600b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0388161781556001018590555b6040805163ffffffff891681526001600160a01b03881660208201529081018690527f55b28633cdb29709386f555dfc54418592ad475ce7a65a78ac5928af60ffb8f890606001610d87565b61363c84613f6c565b613647848484612735565b613652906001615b23565b67ffffffffffffffff168167ffffffffffffffff16146136aa576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401611523565b6001600160a01b038416600081815260016020908152604080832063ffffffff881680855290835281842087855283529281902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff8716908117909155815193845291830186905282019290925260608101919091527f28f40053783033ef755556a0c3315379141f51a33aed8334174ffbadd90bde4890608001612d79565b604080518082019091526000808252602082015261377a60a08401608085016156d6565b801561378f5750600e546001600160a01b0316155b156137c6576040517f5af6d2aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038216600090815260036020908152604082209082906137ef90870187614fe6565b63ffffffff1681526020808201929092526040908101600090812087840135825290925290205461382b9067ffffffffffffffff166001615b23565b905060006040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001856001600160a01b031681526020018660000160208101906138989190614fe6565b63ffffffff16815260200186602001358152602001613994847f0000000000000000000000000000000000000000000000000000000000000000888a60000160208101906138e69190614fe6565b8b60200135600085856001600160a01b03861660405160c09390931b7fffffffffffffffff00000000000000000000000000000000000000000000000016602084015260e091821b7fffffffff000000000000000000000000000000000000000000000000000000009081166028850152602c8401919091529085901b16604c8201526050810183905260700160405160208183030381529060405280519060200120905095945050505050565b81526020016139a66040880188615b44565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506139f39050856109e26020890189614fe6565b90506001600160a01b03811663d80e9bd983613a1260608a018a615b44565b613a2260a08c0160808d016156d6565b6040518563ffffffff1660e01b8152600401613a419493929190615ba9565b6040805180830381865afa158015613a5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148d9190615ca0565b613a89614446565b6040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f97f025840000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015613b06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2a91906156b9565b613b60576040517feb64f35d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03811660009081526005602052604090205460ff1615613bb3576040517f8aea2fe600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600081815260056020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660019081179091556004805491820181559093527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90920180547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905590519182527f6b374d56679ca9463f27c85c6311e2bb7fde69bf201d3da39d53f10bd9d78af59101613246565b613c87614446565b6001600160a01b038116613d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611523565b613d26816144ba565b50565b6001600160a01b038516600090815260016020908152604080832063ffffffff88168452825280832086845290915281205467ffffffffffffffff908116908416811015613e8457600181015b8467ffffffffffffffff168167ffffffffffffffff1611613e1f576001600160a01b038816600090815260026020908152604080832063ffffffff8b1684528252808320898452825280832067ffffffffffffffff85168452909152902054613e17576040517fc09b635000000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401611523565b600101613d76565b506001600160a01b038716600090815260016020908152604080832063ffffffff8a1684528252808320888452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff86161790555b82516020808501919091206001600160a01b038916600090815260028352604080822063ffffffff8b1683528452808220898352845280822067ffffffffffffffff891683529093529190912054909250808314613f18576040517f7182306f0000000000000000000000000000000000000000000000000000000081526004810182905260248101849052604401611523565b50506001600160a01b03909516600090815260026020908152604080832063ffffffff909716835295815285822094825293845284812067ffffffffffffffff909316815291909252918220919091555090565b336001600160a01b03821614801590613f9f57506001600160a01b038181166000908152600f6020526040902054163314155b15613d26576040517fc4c5259300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613fde614b15565b60008061406785613ff26020870187614fe6565b6001600160a01b0391909116600090815260036020908152604080832063ffffffff94909416835292815282822081890135835290522080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008116600167ffffffffffffffff928316019182161790915590565b905060006040518060e001604052808367ffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff168152602001876001600160a01b031681526020018660000160208101906140d49190614fe6565b63ffffffff16815260200186602001358152602001614122847f00000000000000000000000000000000000000000000000000000000000000008a8a60000160208101906138e69190614fe6565b81526020016141346040880188615b44565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525092935091506141819050876109e26020890189614fe6565b90506000806001600160a01b038316634389e58f856141a360608c018c615b44565b6141b360a08e0160808f016156d6565b6040518563ffffffff1660e01b81526004016141d29493929190615ba9565b6000604051808303816000875af11580156141f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526142379190810190615cbc565b90925090507f1ab700d4ced0c005b164c0f789fd09fcbb0156d4c2041b8a3bfbcd961cd1567f8161426b60608b018b615b44565b8660405161427c9493929190615d0b565b60405180910390a1506040805160608101825260a090940151845267ffffffffffffffff909416602084015292820192909252925090509250929050565b6000811561438357600e546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015614323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143479190615d4c565b905080600003614383576040517f1775123700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b825182108061439a5750808360200151115b15612bea57825160208401516040517f4f3ec0d3000000000000000000000000000000000000000000000000000000008152600481019290925260248201849052604482015260648101829052608401611523565b831561440057614400858386614720565b82841015614415576144158582868603614720565b5050505050565b831561442c5761442c8285614774565b828410156144405761444081858503614774565b50505050565b6000546001600160a01b03163314611fca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611523565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808267ffffffffffffffff1611806127c657506040517fff7bd03d0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063ff7bd03d9061457c908790600401615d65565b602060405180830381865afa158015614599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c691906156b9565b6001600160a01b0383166145d557612bea8282614774565b612bea838383614720565b600067ffffffffffffffff82166145fd6060860160408701615528565b67ffffffffffffffff1611806127c657506001600160a01b0383166000908152600260209081526040822090829061463790880188614fe6565b63ffffffff1663ffffffff168152602001908152602001600020600086602001358152602001908152602001600020600086604001602081019061467b9190615528565b67ffffffffffffffff1681526020810191909152604001600020541415949350505050565b806146d7576040517f09beffb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03909416600090815260026020908152604080832063ffffffff909616835294815284822093825292835283812067ffffffffffffffff909216815291522055565b6001600160a01b038216614760576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bea6001600160a01b0384168383614853565b6001600160a01b0382166147b4576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114614801576040519150601f19603f3d011682016040523d82523d6000602084013e614806565b606091505b5050905080612bea576040517f465bc8340000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101839052604401611523565b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152612bea928692916000916149119185169084906149be565b905080516000148061493257508080602001905181019061493291906156b9565b612bea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401611523565b60606127c6848460008585600080866001600160a01b031685876040516149e59190615d73565b60006040518083038185875af1925050503d8060008114614a22576040519150601f19603f3d011682016040523d82523d6000602084013e614a27565b606091505b5091509150614a3887838387614a43565b979650505050505050565b60608315614acc578251600003614ac5576001600160a01b0385163b614ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611523565b50816127c6565b6127c68383815115614ae15781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239190614e91565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001614b58604051806040016040528060008152602001600081525090565b905290565b600060608284031215614b6f57600080fd5b50919050565b80356001600160a01b038116811461438357600080fd5b60008083601f840112614b9e57600080fd5b50813567ffffffffffffffff811115614bb657600080fd5b6020830191508360208285010111156116fe57600080fd5b600080600080600080600060e0888a031215614be957600080fd5b614bf38989614b5d565b9650614c0160608901614b75565b95506080880135945060a088013567ffffffffffffffff80821115614c2557600080fd5b614c318b838c01614b8c565b909650945060c08a0135915080821115614c4a57600080fd5b50614c578a828b01614b8c565b989b979a50959850939692959293505050565b803563ffffffff8116811461438357600080fd5b60008060008060808587031215614c9457600080fd5b614c9d85614b75565b9350614cab60208601614c6a565b9250614cb960408601614b75565b9396929550929360600135925050565b60008060408385031215614cdc57600080fd5b823567ffffffffffffffff811115614cf357600080fd5b830160a08186031215614d0557600080fd5b9150614d1360208401614b75565b90509250929050565b60006080820190508251825267ffffffffffffffff60208401511660208301526040830151614d58604084018280518252602090810151910152565b5092915050565b600080600080600060c08688031215614d7757600080fd5b614d8086614b75565b9450614d8f8760208801614b5d565b93506080860135925060a086013567ffffffffffffffff811115614db257600080fd5b614dbe88828901614b8c565b969995985093965092949392505050565b60008060008060808587031215614de557600080fd5b614dee85614b75565b9350614dfc60208601614b75565b9250614e0a60408601614c6a565b9150614e1860608601614c6a565b905092959194509250565b60005b83811015614e3e578181015183820152602001614e26565b50506000910152565b60008151808452614e5f816020860160208601614e23565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121376020830184614e47565b803567ffffffffffffffff8116811461438357600080fd5b600080600080600060a08688031215614ed457600080fd5b614edd86614b75565b9450614eeb60208701614c6a565b935060408601359250614f0060608701614ea4565b949793965091946080013592915050565b803561ffff8116811461438357600080fd5b60008060008060808587031215614f3957600080fd5b614f4285614b75565b9350614f5060208601614b75565b925060408501359150614e1860608601614f11565b60008060408385031215614f7857600080fd5b614f8183614b75565b9150614d1360208401614c6a565b600060208284031215614fa157600080fd5b61213782614b75565b600080600060608486031215614fbf57600080fd5b614fc884614b75565b9250614fd660208501614c6a565b9150604084013590509250925092565b600060208284031215614ff857600080fd5b61213782614c6a565b6000806000806000806000806000806000806101208d8f03121561502457600080fd5b61502d8d614b75565b9b5061503b60208e01614b75565b9a5060408d0135995061505060608e01614f11565b985060808d0135975060a08d0135965067ffffffffffffffff60c08e0135111561507957600080fd5b6150898e60c08f01358f01614b8c565b909650945067ffffffffffffffff60e08e013511156150a757600080fd5b6150b78e60e08f01358f01614b8c565b909450925067ffffffffffffffff6101008e013511156150d657600080fd5b6150e78e6101008f01358f01614b8c565b81935080925050509295989b509295989b509295989b565b60008060008060008060008060008060006101408c8e03121561512157600080fd5b61512b8d8d614b5d565b9a5061513960608d01614b75565b995060808c0135985060a08c0135975060c08c0135965067ffffffffffffffff8060e08e0135111561516a57600080fd5b61517a8e60e08f01358f01614b8c565b90975095506101008d013581101561519157600080fd5b6151a28e6101008f01358f01614b8c565b90955093506101208d01358110156151b957600080fd5b506151cb8d6101208e01358e01614b8c565b81935080925050509295989b509295989b9093969950565b600080600080606085870312156151f957600080fd5b61520285614b75565b935061521060208601614b75565b9250604085013567ffffffffffffffff8082111561522d57600080fd5b818701915087601f83011261524157600080fd5b81358181111561525057600080fd5b8860208260051b850101111561526557600080fd5b95989497505060200194505050565b60008060008060006080868803121561528c57600080fd5b61529586614b75565b9450602086013593506152aa60408701614f11565b9250606086013567ffffffffffffffff811115614db257600080fd5b600080608083850312156152d957600080fd5b6152e38484614b5d565b9150614d1360608401614b75565b6020808252825182820181905260009190848201906040850190845b818110156153325783516001600160a01b03168352928401929184019160010161530d565b50909695505050505050565b60008060008060008060008060c0898b03121561535a57600080fd5b61536389614b75565b975061537160208a01614b75565b96506040890135955061538660608a01614f11565b9450608089013567ffffffffffffffff808211156153a357600080fd5b6153af8c838d01614b8c565b909650945060a08b01359150808211156153c857600080fd5b506153d58b828c01614b8c565b999c989b5096995094979396929594505050565b6000806000606084860312156153fe57600080fd5b61540784614b75565b925061541560208501614c6a565b915061542360408501614b75565b90509250925092565b60008060006060848603121561544157600080fd5b61544a84614c6a565b9250614fd660208501614b75565b60008060006060848603121561546d57600080fd5b61544a84614b75565b600080600060a0848603121561548b57600080fd5b6154958585614b5d565b92506154a360608501614b75565b9150608084013590509250925092565b600080604083850312156154c657600080fd5b614d0583614c6a565b600080600080608085870312156154e557600080fd5b6154ee85614b75565b93506154fc60208601614c6a565b925060408501359150614e1860608601614ea4565b8151815260208083015190820152604081016118ff565b60006020828403121561553a57600080fd5b61213782614ea4565b838152818360208301376000910160200190815292915050565b63ffffffff61556b82614c6a565b1682526020810135602083015267ffffffffffffffff61558d60408301614ea4565b1660408301525050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6155ea818961555d565b86606082015260e06080820152600061560760e083018789615597565b6001600160a01b03861660a084015282810360c0840152615629818587615597565b9a9950505050505050505050565b60808101615645828561555d565b6001600160a01b03831660608301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561569c57600080fd5b81516003811061213757600080fd5b8015158114613d2657600080fd5b6000602082840312156156cb57600080fd5b8151612137816156ab565b6000602082840312156156e857600080fd5b8135612137816156ab565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261573357600080fd5b815167ffffffffffffffff8082111561574e5761574e6156f3565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715615794576157946156f3565b816040528381528660208588010111156157ad57600080fd5b61148d846020830160208901614e23565b6000602082840312156157d057600080fd5b815167ffffffffffffffff8111156157e757600080fd5b6127c684828501615722565b8a815261ffff8a16602082015288604082015287606082015260e06080820152600061582360e08301888a615597565b82810360a0840152615836818789615597565b905082810360c084015261584b818587615597565b9d9c50505050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156118ff576118ff61585c565b60006101206158ad838e61555d565b8b60608401528a60808401528960a08401528060c08401526158d2818401898b615597565b905082810360e08401526158e7818789615597565b905082810361010084015261584b818587615597565b600060408083016001600160a01b03871684526020604081860152818683526060925060608601905060608760051b8701018860005b89811015615a3e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa089840301845281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18c360301811261599457600080fd5b8b0163ffffffff806159a583614c6a565b168552806159b4888401614c6a565b168786015250878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181126159ee57600080fd5b01858101903567ffffffffffffffff811115615a0957600080fd5b803603821315615a1857600080fd5b8789860152615a2a8886018284615597565b958701959450505090840190600101615933565b50909a9950505050505050505050565b8183823760009101908152919050565b60006001600160a01b03808916835280881660208401525085604083015261ffff8516606083015260a06080830152615a9b60a083018486615597565b98975050505050505050565b60006001600160a01b03808a16835288602084015260a06040840152615ad160a08401888a615597565b81871660608501528381036080850152615aec818688615597565b9b9a5050505050505050505050565b60a08101615b09828661555d565b6001600160a01b0393909316606082015260800152919050565b67ffffffffffffffff818116838216019080821115614d5857614d5861585c565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615b7957600080fd5b83018035915067ffffffffffffffff821115615b9457600080fd5b6020019150368190038213156116fe57600080fd5b6060815267ffffffffffffffff855116606082015263ffffffff60208601511660808201526001600160a01b0360408601511660a082015260006060860151615bfa60c084018263ffffffff169052565b50608086015160e083015260a086015161010083015260c086015160e0610120840152615c2b610140840182614e47565b90508281036020840152615c40818688615597565b915050612e8d604083018415159052565b600060408284031215615c6357600080fd5b6040516040810181811067ffffffffffffffff82111715615c8657615c866156f3565b604052825181526020928301519281019290925250919050565b600060408284031215615cb257600080fd5b6121378383615c51565b60008060608385031215615ccf57600080fd5b615cd98484615c51565b9150604083015167ffffffffffffffff811115615cf557600080fd5b615d0185828601615722565b9150509250929050565b606081526000615d1e6060830187614e47565b8281036020840152615d31818688615597565b9150506001600160a01b038316604083015295945050505050565b600060208284031215615d5e57600080fd5b5051919050565b606081016118ff828461555d565b60008251615d85818460208701614e23565b919091019291505056fea2646970667358221220fbeacb9e09f521d9b83b94a56dbd81b62f43beb282a6a4281738d9f94234e59364736f6c63430008160033608060405234801561001057600080fd5b5061026f806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a71461007e5780631881d94d146100a657806354fd4d50146100b55780636750cd4c146100dc575b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61009161008c366004610189565b6100f0565b60405190151581526020015b60405180910390f35b600260405161009d91906101d2565b6040805167ffffffffffffffff815260ff602082015260029181019190915260600161009d565b6100916100ea366004610213565b50600190565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f0258400000000000000000000000000000000000000000000000000000000148061018357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60006020828403121561019b57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146101cb57600080fd5b9392505050565b602081016003831061020d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b60006020828403121561022557600080fd5b813563ffffffff811681146101cb57600080fdfea26469706673582212207325c273f24f61163cfdb1e23c56b38901e8e28127e69a8ee9f84318afd4358e64736f6c63430008160033000000000000000000000000000000000000000000000000000000000000759f0000000000000000000000009f403140bc0574d7d36ea472b82daa1bbd4ef327