0 txs
34.6k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256 result)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256 result)
buyIncrement
viewfunction buyIncrement() view returns (uint256)
collection
viewfunction collection() view returns (address)
currentFees
viewfunction currentFees() view returns (uint256)
DEAD_ADDRESS
viewfunction DEAD_ADDRESS() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32 result)
ethToTwap
viewfunction ethToTwap() view returns (uint256)
factory
viewfunction factory() view returns (address)
getImplementation
viewfunction getImplementation() view returns (address result)
getMaxPriceForBuy
viewfunction getMaxPriceForBuy() view returns (uint256)
getTransferAllowance
viewfunction getTransferAllowance() view returns (uint256 transferAllowance)
GLOBAL_DISTRIBUTION_HANDLER
viewfunction GLOBAL_DISTRIBUTION_HANDLER() view returns (address)
hookAddress
viewfunction hookAddress() view returns (address)
isDistributor
viewfunction isDistributor(address) view returns (bool)
lastBuyBlock
viewfunction lastBuyBlock() view returns (uint256)
lastTwapBlock
viewfunction lastTwapBlock() view returns (uint256)
MAX_SUPPLY
viewfunction MAX_SUPPLY() view returns (uint256)
name
viewfunction name() view returns (string)
nftForSale
viewfunction nftForSale(uint256) view returns (uint256)
nonces
viewfunction nonces(address owner) view returns (uint256 result)
onERC721Received
viewfunction onERC721Received(address, address, uint256, bytes) view returns (bytes4)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
poolManager
viewfunction poolManager() view returns (address)
priceMultiplier
viewfunction priceMultiplier() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
router
viewfunction router() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
twapDelayInBlocks
viewfunction twapDelayInBlocks() view returns (uint256)
twapIncrement
viewfunction twapIncrement() view returns (uint256)
VERSION
viewfunction VERSION() view returns (uint256)
addFees
payablefunction addFees() payable
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
buyTargetNFT
nonpayablefunction buyTargetNFT(uint256 value, bytes data, uint256 expectedId, address target)
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
increaseTransferAllowance
nonpayablefunction increaseTransferAllowance(uint256 amountAllowed)
initialize
nonpayablefunction initialize(address _collection, address _hook, string _tokenName, string _tokenSymbol, uint256 _buyIncrement, address _owner)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
processTokenTwap
nonpayablefunction processTokenTwap()
renounceOwnership
payablefunction renounceOwnership() payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
sellTargetNFT
payablefunction sellTargetNFT(uint256 tokenId) payable
setDistributor
nonpayablefunction setDistributor(address distributor, bool status)
setPriceMultiplier
nonpayablefunction setPriceMultiplier(uint256 _newMultiplier)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
updateHookAddress
nonpayablefunction updateHookAddress(address _hookAddress)
updateName
nonpayablefunction updateName(string _tokenName)
updateSymbol
nonpayablefunction updateSymbol(string _tokenSymbol)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AllowanceIncreased
event AllowanceIncreased(uint256 amount)
AllowanceSpent
event AllowanceSpent(address indexed from, address indexed to, uint256 amount)
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
ContractUpgraded
event ContractUpgraded(address indexed oldImplementation, address indexed newImplementation, uint256 version)
DistributorUpdated
event DistributorUpdated(address indexed distributor, bool status)
Initialized
event Initialized(uint64 version)
NFTBoughtByProtocol
event NFTBoughtByProtocol(uint256 indexed tokenId, uint256 purchasePrice, uint256 listPrice)
NFTSoldByProtocol
event NFTSoldByProtocol(uint256 indexed tokenId, uint256 price, address buyer)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
Upgraded
event Upgraded(address indexed implementation)
errors
AllowanceOverflow
error AllowanceOverflow()
AllowanceUnderflow
error AllowanceUnderflow()
AlreadyInitialized
error AlreadyInitialized()
AlreadyNFTOwner
error AlreadyNFTOwner()
ExternalCallFailed
error ExternalCallFailed(bytes reason)
InsufficientAllowance
error InsufficientAllowance()
InsufficientBalance
error InsufficientBalance()
InsufficientContractBalance
error InsufficientContractBalance()
InvalidCollection
error InvalidCollection()
InvalidInitialization
error InvalidInitialization()
InvalidMultiplier
error InvalidMultiplier()
InvalidPermit
error InvalidPermit()
InvalidTarget
error InvalidTarget()
InvalidTransfer
error InvalidTransfer()
NeedToBuyNFT
error NeedToBuyNFT()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NFTNotForSale
error NFTNotForSale()
NFTPriceTooLow
error NFTPriceTooLow()
NoETHToTwap
error NoETHToTwap()
NoHandoverRequest
error NoHandoverRequest()
NotEnoughEth
error NotEnoughEth()
NotFactory
error NotFactory()
NotInitializing
error NotInitializing()
NotNFTOwner
error NotNFTOwner()
OnlyHook
error OnlyHook()
Permit2AllowanceIsFixedAtInfinity
error Permit2AllowanceIsFixedAtInfinity()
PermitExpired
error PermitExpired()
PriceTooHigh
error PriceTooHigh()
Reentrancy
error Reentrancy()
TotalSupplyOverflow
error TotalSupplyOverflow()
TwapDelayNotMet
error TwapDelayNotMet()
Unauthorized
error Unauthorized()
UnauthorizedCallContext
error UnauthorizedCallContext()
UpgradeFailed
error UpgradeFailed()
creation bytecode
0x60a080604052346099573060805263409feecd195460018116608c5760011c6002600160401b0319016048575b612899908161009e82396080518181816117b101526118320152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a1602c565b63f92ee8a95f526004601cfd5b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f5f3560e01c806306fdde0314612262578063095ea7b3146121c6578063150b7a021461214f57806318160ddd1461212a57806319d6150d146120ed5780631db5275514611e975780632081c4ea14611e2e57806323b2f39214611e1157806323b872dd14611d0e57806324abf96214611b695780632569296214611b1e578063313ce56714611b0257806332a3cf9614611ad957806332cb6b0c14611ab25780633644e51514611a29578063451d29d5146119e95780634e6fd6c4146119cc5780634f1ef286146117f957806352d1902d1461179d578063537f53121461162257806354d1f13d146115dc5780635d9644c4146115be57806370a082311461158b578063715018a6146115405780637973bfd2146115225780637de1e536146114f95780637ecebe00146114c657806384da92a7146113295780638da5cb5b146112fc5780638f0c86fa146112bd57806390ba7a321461129357806395d89b41146111bf57806398668444146111a4578063a718e20d14611187578063a9059cbb146110eb578063a94b9908146110cd578063aaf10f4214611098578063af9e72391461102d578063b107a04b14610ffe578063c2fa867b14610fe0578063c45a015514610fc5578063d505accf14610df9578063d50cb88b14610ddb578063d59ba0df14610d5c578063dc4c90d314610d41578063dd62ed3e14610d0c578063e6c6931314610cee578063ec07882114610cd0578063f04e283e14610c82578063f123a84c1461071b578063f2fde38b146106dc578063f392c71614610300578063f887ea40146102d3578063fee81cf4146102a05763ffa1ad7414610282575061000e565b3461029d578060031936011261029d57602060405160038152f35b80fd5b503461029d57602036600319011261029d576102ba6122a1565b9063389a75e1600c5252602080600c2054604051908152f35b503461029d578060031936011261029d5760206102ee612600565b6040516001600160a01b039091168152f35b503461029d57608036600319011261029d576004356024356001600160401b0381116106d8576103349036906004016122cd565b604435926064356001600160a01b0381169290918383036106d4573068929eee149b4bd2126854146106c7573068929eee149b4bd2126855479460018060a01b0360035416604051956370a0823160e01b8752306004880152602087602481855afa9687156106bc578a97610688575b506040516331a9108f60e11b8152600481018a9052602081602481865afa90811561067d578b9161065e575b506001600160a01b0316301461064f576006548411610640576103f16124a1565b8411610631571461062257918793918493826040519384928337810185815203925af13d1561061a573d906104258261231b565b9161043360405193846122fa565b82523d86602084013e5b156105f157506003546040516370a0823160e01b81523060048201526001600160a01b039091169190602081602481865afa9081156105e65786916105b0575b506001820180921161059c570361058d576020602491604051928380926331a9108f60e11b82528760048301525afa908115610582578491610553575b50306001600160a01b03909116036105445760406104fa7f272af40a157c8d1a7d3bf7ff2920db021097ec61b7e260f97bb50144520ad177924790612475565b61050681600654612475565b6006556103e861051860045483612462565b048486526005602052808387205543600b5582519182526020820152a23868929eee149b4bd212685580f35b631022318760e21b8352600483fd5b610575915060203d60201161057b575b61056d81836122fa565b810190612482565b5f6104ba565b503d610563565b6040513d86823e3d90fd5b630b7cb52160e41b8452600484fd5b634e487b7160e01b86526011600452602486fd5b90506020813d6020116105de575b816105cb602093836122fa565b810103126105da57515f61047d565b5f80fd5b3d91506105be565b6040513d88823e3d90fd5b604051632cd7eb6360e11b81526020600482015290819061061690602483019061227d565b0390fd5b60609061043d565b63416aebb560e11b8852600488fd5b63127f08c960e11b8a5260048afd5b63f14a42b760e01b8a5260048afd5b63085cf94760e41b8a5260048afd5b610677915060203d60201161057b5761056d81836122fa565b5f6103d0565b6040513d8d823e3d90fd5b9096506020813d6020116106b4575b816106a4602093836122fa565b810103126105da5751955f6103a4565b3d9150610697565b6040513d8c823e3d90fd5b63ab143c0687526004601cfd5b8680fd5b8280fd5b50602036600319011261029d576106f16122a1565b6106f96127aa565b8060601b1561070e5761070b906127c6565b80f35b637448fbae82526004601cfd5b503461029d5760c036600319011261029d576107356122a1565b9061073e6122b7565b916044356001600160401b0381116106d85761075e903690600401612336565b926064356001600160401b038111610c7e5761077e903690600401612336565b9360a4356001600160a01b0381169290839003610c7a5763409feecd199384548060038755610c51575b506001600160a01b03168015610c1757825115610be557865115610bb1576001600160601b0360a01b600354161760035560018060a01b03166001600160601b0360a01b60025416176002558051906001600160401b038211610b9d578190610811865461237c565b601f8111610b2c575b50602090601f8311600114610abf578692610ab4575b50508160011b915f199060031b1c19161783555b83516001600160401b038111610aa05761085f60015461237c565b601f8111610a38575b50602094601f82116001146109ca5794849582939495926109bf575b50508160011b915f199060031b1c1916176001555b43600b55608435600c5580638b78c6d81955827f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36104b0600455670de0b6b3a764000060085560016009556108ef612508565b6805345cdf77eb68f44c546b033b2e3c9fd0803ce800000081019081106109b2576805345cdf77eb68f44c556387a211a2600c5282526020600c206b033b2e3c9fd0803ce800000081540190556b033b2e3c9fd0803ce800000060205280600c5160601c837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3610981575080f35b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a180f35b63e5cfe95784526004601cfd5b015190505f80610884565b60018552601f198216955f5160206128445f395f51905f5291865b888110610a2057508360019596979810610a08575b505050811b01600155610899565b01515f1960f88460031b161c191690555f80806109fa565b919260206001819286850151815501940192016109e5565b60018552601f820160051c5f5160206128445f395f51905f52019060208310610a8b575b601f0160051c5f5160206128445f395f51905f5201905b818110610a805750610868565b858155600101610a73565b5f5160206128445f395f51905f529150610a5c565b634e487b7160e01b84526041600452602484fd5b015190505f80610830565b8680525f5160206128045f395f51905f529250601f198416875b818110610b145750908460019594939210610afc575b505050811b018355610844565b01515f1960f88460031b161c191690555f8080610aef565b92936020600181928786015181550195019301610ad9565b909150858052601f830160051c5f5160206128045f395f51905f52019060208410610b88575b90601f8493920160051c5f5160206128045f395f51905f5201905b818110610b7a575061081a565b878155849350600101610b6d565b5f5160206128045f395f51905f529150610b52565b634e487b7160e01b85526041600452602485fd5b60405162461bcd60e51b815260206004820152600c60248201526b115b5c1d1e481cde5b589bdb60a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a602482015269456d707479206e616d6560b01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21031b7b63632b1ba34b7b760711b6044820152606490fd5b600181819793971c14303b1015610c6d5760ff1b1b935f6107a8565b63f92ee8a987526004601cfd5b8480fd5b8380fd5b50602036600319011261029d57610c976122a1565b610c9f6127aa565b63389a75e1600c528082526020600c2080544211610cc357908261070b92556127c6565b636f5e881883526004601cfd5b503461029d578060031936011261029d576020600854604051908152f35b503461029d578060031936011261029d576020600a54604051908152f35b503461029d57604036600319011261029d576020610d39610d2b6122a1565b610d336122b7565b906125c3565b604051908152f35b503461029d578060031936011261029d5760206102ee612564565b503461029d57604036600319011261029d57610d766122a1565b602435908115158092036106d85760207f19e1fee2e38695e60ad3ef8c81759c22d6d7ee56f9b8805363820a50da468a1891610db06127aa565b6001600160a01b0316808552600d82526040808620805460ff191660ff87161790555193845292a280f35b503461029d578060031936011261029d576020600454604051908152f35b503461029d5760e036600319011261029d57610e136122a1565b610e1b6122b7565b604435606435906084359260ff84168403610fc1576001600160a01b0316936e22d473030f116ddee9f6b43ac78ba385188219151715610fb457610e5d6123b4565b6020815191012092804211610fa7576040519160018060a01b03169465383775081901600e5285885260c06020600c20938454937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252602082019788528460408301987fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68a528b606085019a468c528c608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988525252888a525260a082015220604e526042602c20885260ff1660205260a43560405260c43560605260208060808960015afa90853d5103610f9a570190556303faf4f960a51b84176040526034602c20557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a380f35b63ddafbaef88526004601cfd5b631a15a3cc87526004601cfd5b633f68539a86526004601cfd5b8580fd5b503461029d578060031936011261029d5760206102ee612508565b503461029d578060031936011261029d576020600954604051908152f35b503461029d578060031936011261029d57602060405173df99bd1218e7eb288cffecf9775385167bb09b2d8152f35b503461029d57602036600319011261029d57600254600435906001600160a01b03163303611089576020817f4787a6bf044f17bc03d6ea3466647203e665f4152b82c273d67f1427ff3966d192845c01845d604051908152a180f35b635a91834f60e01b8252600482fd5b503461029d578060031936011261029d575f5160206128245f395f51905f52546040516001600160a01b039091168152602090f35b503461029d578060031936011261029d576020600c54604051908152f35b503461029d57604036600319011261029d576111056122a1565b602435906387a211a2600c523383526020600c20805480841161117a579382918461116f96039055526020600c2082815401905581602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a333612656565b602060405160018152f35b63f4d678b885526004601cfd5b503461029d578060031936011261029d576020905c604051908152f35b503461029d578060031936011261029d576020610d396124a1565b503461029d578060031936011261029d576040519080600154906111e28261237c565b808552916001811690811561126c5750600114611222575b61121e8461120a818603826122fa565b60405191829160208352602083019061227d565b0390f35b600181525f5160206128445f395f51905f52939250905b8082106112525750909150810160200161120a826111fa565b919260018160209254838588010152019101909291611239565b60ff191660208087019190915292151560051b8501909201925061120a91508390506111fa565b503461029d57602036600319011261029d5760406020916004358152600583522054604051908152f35b503461029d57602036600319011261029d5760209060ff906040906001600160a01b036112e86122a1565b168152600d84522054166040519015158152f35b503461029d578060031936011261029d57638b78c6d819546040516001600160a01b039091168152602090f35b503461029d57602036600319011261029d576004356001600160401b0381116114c25761135a903690600401612336565b906001600160a01b0361136b612508565b1633036114b35781516001600160401b03811161149f5761138c825461237c565b601f8111611438575b50602092601f82116001146113d0579282938293926113c5575b50508160011b915f199060031b1c191617815580f35b015190505f806113af565b828052601f198216935f5160206128045f395f51905f5291845b8681106114205750836001959610611408575b505050811b01815580f35b01515f1960f88460031b161c191690555f80806113fd565b919260206001819286850151815501940192016113ea565b828052601f820160051c5f5160206128045f395f51905f5201906020831061148a575b601f0160051c5f5160206128045f395f51905f5201905b81811061147f5750611395565b838155600101611472565b5f5160206128045f395f51905f52915061145b565b634e487b7160e01b82526041600452602482fd5b631966391b60e11b8152600490fd5b5080fd5b503461029d57602036600319011261029d576114e06122a1565b906338377508600c5252602080600c2054604051908152f35b503461029d578060031936011261029d576003546040516001600160a01b039091168152602090f35b503461029d578060031936011261029d576020600b54604051908152f35b508060031936011261029d576115546127aa565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b503461029d57602036600319011261029d576115a56122a1565b906387a211a2600c5252602080600c2054604051908152f35b503461029d578060031936011261029d576020600654604051908152f35b508060031936011261029d5763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b503461029d57602036600319011261029d576004356001600160401b0381116114c257611653903690600401612336565b906001600160a01b03611664612508565b1633036114b35781516001600160401b03811161149f5761168660015461237c565b601f8111611735575b50602092601f82116001146116cb579282938293926116c0575b50508160011b915f199060031b1c19161760015580f35b015190505f806116a9565b60018352601f198216935f5160206128445f395f51905f5291845b86811061171d5750836001959610611705575b505050811b0160015580f35b01515f1960f88460031b161c191690555f80806116f9565b919260206001819286850151815501940192016116e6565b60018352601f820160051c5f5160206128445f395f51905f52019060208310611788575b601f0160051c5f5160206128445f395f51905f5201905b81811061177d575061168f565b838155600101611770565b5f5160206128445f395f51905f529150611759565b503461029d578060031936011261029d57307f0000000000000000000000000000000000000000000000000000000000000000036117ec5760206040515f5160206128245f395f51905f528152f35b639f03a02690526004601cfd5b50604036600319011261029d5761180e6122a1565b6024356001600160401b0381116106d85761182d9036906004016122cd565b9091307f0000000000000000000000000000000000000000000000000000000000000000146119bf5761185e6127aa565b6001600160a01b038116908115611981573b1561193c5780604051600381527f81daf9335a6378204a43cc5467ad9282348d3864c1e3788e40b879f41b187aa560203092a33d84526352d1902d6001525f5160206128245f395f51905f52602060016004601d855afa510361192e578391817fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a280825f5160206128245f395f51905f525561190d578280f35b806040519485378338925af415611925578181808280f35b903d90823e3d90fd5b6355299b496001526004601dfd5b60405162461bcd60e51b815260206004820152601f60248201527f496d706c656d656e746174696f6e206d75737420626520636f6e7472616374006044820152606490fd5b60405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21034b6b83632b6b2b73a30ba34b7b760511b6044820152606490fd5b639f03a02684526004601cfd5b503461029d578060031936011261029d57602060405161dead8152f35b503461029d57602036600319011261029d57611a036122a1565b611a0b6127aa565b60018060a01b03166001600160601b0360a01b600254161760025580f35b503461029d578060031936011261029d57602060a0611a466123b4565b828151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015220604051908152f35b503461029d578060031936011261029d5760206040516b033b2e3c9fd0803ce80000008152f35b503461029d578060031936011261029d576002546040516001600160a01b039091168152602090f35b503461029d578060031936011261029d57602060405160128152f35b508060031936011261029d5763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b5060203660031901126105da576004353068929eee149b4bd212685414611d01573068929eee149b4bd2126855805f52600560205260405f20548015611cf257803403611ce3576003546040516331a9108f60e11b8152600481018490526001600160a01b0390911690602081602481855afa908115611caa575f91611cc4575b50306001600160a01b0390911603611cb557803b156105da575f80916064604051809481936323b872dd60e01b83523060048401523360248401528860448401525af18015611caa57611c94575b5060407f89c3b465a41d0ab0891833425d7da4f89bafffceffba56a40bfafff01d68d51e9183855260056020528482812055611c7681600754612455565b6007558151908152336020820152a23868929eee149b4bd212685580f35b611ca19193505f906122fa565b5f916040611c38565b6040513d5f823e3d90fd5b631022318760e21b5f5260045ffd5b611cdd915060203d60201161057b5761056d81836122fa565b5f611bea565b633c0cc37960e11b5f5260045ffd5b63d135e8bd60e01b5f5260045ffd5b63ab143c065f526004601cfd5b346105da5760603660031901126105da57611d276122a1565b611d2f6122b7565b604435908260601b6e22d473030f116ddee9f6b43ac78ba33303611dc7575b6387a211a217600c526020600c2092835493848411611dba578361116f95039055815f526020600c2083815401905582602052600c5160601c60018060a01b0382167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3612656565b63f4d678b85f526004601cfd5b33602052637f5e9f208117600c526034600c20908154918219611ded575b509050611d4e565b828511611e0457846387a211a29303905585611de5565b6313be252b5f526004601cfd5b346105da575f3660031901126105da576020600754604051908152f35b346105da5760203660031901126105da576004356001600160a01b03611e52612508565b163303611e885761044c81108015611e7d575b611e6e57600455005b631bc4bcf760e21b5f5260045ffd5b506127108111611e65565b631966391b60e11b5f5260045ffd5b346105da575f3660031901126105da573068929eee149b4bd212685414611d01573068929eee149b4bd212685560075480156120de57611edc600a5460095490612455565b43106120cf57600854908181106120c7575b60058202828104600514831517156120b357611f126103e8611f2392048094612475565b91611f1d8484612455565b90612475565b60075543600a556002546040516001600160a01b039091169160a082018281106001600160401b0382111761209f57602092610184916040525f81528381019230845260408201955f87526060830190603c82526080840190815260018060a01b03611f8d612600565b60405163b1a0d57160e01b8152600481018690525f602482018190526001604483015296516001600160a01b039081166064830152985189166084820152995162ffffff1660a48b0152925160020b60c48a0152905190951660e488015261016061010488015261016487019290925261dead6101248701524261014487015285938492165af18015611caa57612074575b50804710612067575f3881808433620186a0f115612046575b3868929eee149b4bd2126855005b600b601691335f526073825360ff602053f0156120635780612038565b3838fd5b63b12d13eb5f526004601cfd5b602090813d8311612098575b61208a81836122fa565b810103126105da578161201f565b503d612080565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b905080611eee565b6353f77c5b60e01b5f5260045ffd5b631863d7fb60e01b5f5260045ffd5b5f3660031901126105da576002546001600160a01b0316330361211b5761211634600654612455565b600655005b635a91834f60e01b5f5260045ffd5b346105da575f3660031901126105da5760206805345cdf77eb68f44c54604051908152f35b346105da5760803660031901126105da576121686122a1565b506121716122b7565b506064356001600160401b0381116105da576121919036906004016122cd565b50506003546001600160a01b031633036121b757604051630a85bd0160e11b8152602090f35b63517172a160e11b5f5260045ffd5b346105da5760403660031901126105da576121df6122a1565b602435906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba318821915171561225557602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b633f68539a5f526004601cfd5b346105da575f3660031901126105da5761121e61120a6123b4565b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b03821682036105da57565b602435906001600160a01b03821682036105da57565b9181601f840112156105da578235916001600160401b0383116105da57602083818601950101116105da57565b90601f801991011681019081106001600160401b0382111761209f57604052565b6001600160401b03811161209f57601f01601f191660200190565b81601f820112156105da5780359061234d8261231b565b9261235b60405194856122fa565b828452602083830101116105da57815f926020809301838601378301015290565b90600182811c921680156123aa575b602083101461239657565b634e487b7160e01b5f52602260045260245ffd5b91607f169161238b565b604051905f825f54916123c68361237c565b808352926001811690811561243657506001146123ec575b6123ea925003836122fa565b565b505f80805290915f5160206128045f395f51905f525b81831061241a5750509060206123ea928201016123de565b6020919350806001915483858901015201910190918492612402565b602092506123ea94915060ff191682840152151560051b8201016123de565b919082018092116120b357565b818102929181159184041417156120b357565b919082039182116120b357565b908160209103126105da57516001600160a01b03811681036105da5790565b6124ad600b5443612475565b600181018091116120b357600c546124c491612462565b90565b9060208251920151916001600160601b0319831692601482106124e8575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b61253a604051604060146034601d84303c8083015160ff1615612540575b80835282015f6020820152016040526124c7565b60601c90565b303b90603d603c198301928360281c3d3d3e82030182821102900390151502612526565b61253a60405160146034604583303c601482015160ff1615612598575b80604091835282015f6020820152016040526124c7565b506040303b6028603d603c1983019283831c3d3d3e603c030182603c11026014039111029050612581565b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba3146125f957602052637f5e9f20600c525f526034600c205490565b50505f1990565b61253a604051604060146034603184303c8083015160ff16156126315780835282015f6020820152016040526124c7565b303b90603d603c198301928360281c3d3d3e6028030182602811028103911102612526565b6001600160a01b03169081156127545760405163acf3de8760e01b81526004810183905260208160248173df99bd1218e7eb288cffecf9775385167bb09b2d5afa908115611caa575f9161276f575b508015612759575b612754576001600160a01b036126c1612564565b1682148015612732575b6126de57632f35253160e01b5f5260045ffd5b5f5c838110612723577fa575fb45e6259a68f4974e75c94adc55a35f2c06eee07709e964a4407e7dcfeb9184602092035f5d6040519485526001600160a01b031693a3565b632f35253160e01b5f5260045ffd5b506001600160a01b03612743612564565b166001600160a01b038216146126cb565b505050565b50815f52600d60205260ff60405f2054166126ad565b90506020813d6020116127a2575b8161278a602093836122fa565b810103126105da575180151581036105da575f6126a5565b3d915061277d565b638b78c6d8195433036127b957565b6382b429005f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8195556fe290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220fd825538c534bfe738809ce8c1ddf7685cee96e0539b7841026b7f9bb565abbe64736f6c634300081e0033