0 txs
535 calls
constructor
constructor(address _factoryUpgradeGate, uint256 _mintFeeAmount, address _mintFeeRecipient)
functions
activePresaleStageCount
viewfunction activePresaleStageCount() view returns (uint256)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256)
config
viewfunction config() view returns (address metadataRenderer, uint64 collectionSize, uint16 royaltyBPS, address fundsRecipient, bool revealed, bool lockBeforeMintOut)
contractURI
viewfunction contractURI() view returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
factoryUpgradeGate
viewfunction factoryUpgradeGate() view returns (address)
feeForAmount
viewfunction feeForAmount(uint256 quantity) view returns (address recipient, uint256 fee)
getApproved
viewfunction getApproved(uint256 tokenId) view returns (address)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAdmin
viewfunction isAdmin(address user) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address nftOwner, address operator) view returns (bool)
metadataRenderer
viewfunction metadataRenderer() view returns (address)
mintedPerAddress
viewfunction mintedPerAddress(address minter) view returns (tuple)
MINTER_ROLE
viewfunction MINTER_ROLE() view returns (bytes32)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
ownerOf
viewfunction ownerOf(uint256 tokenId) view returns (address)
presaleConfig
viewfunction presaleConfig(uint256) view returns (string presaleName, uint64 presaleStart, uint64 presaleEnd, uint104 presalePrice, uint32 presaleMaxPurchasePerAddress, uint32 presaleSupply, uint32 presaleMinted, bytes32 presaleMerkleRoot)
presaleMintedByAddress
viewfunction presaleMintedByAddress(address, uint256) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
publicSaleConfig
viewfunction publicSaleConfig() view returns (uint104 publicSalePrice, uint32 maxSalePurchasePerAddress, uint64 publicSaleStart, uint64 publicSaleEnd, bool publicSaleDisabled)
royaltyInfo
viewfunction royaltyInfo(uint256, uint256 _salePrice) view returns (address receiver, uint256 royaltyAmount)
SALES_MANAGER_ROLE
viewfunction SALES_MANAGER_ROLE() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
viewfunction symbol() view returns (string)
tokenURI
viewfunction tokenURI(uint256 tokenId) view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
adminMint
nonpayablefunction adminMint(address recipient, uint256 quantity) returns (uint256)
adminMintAirdrop
nonpayablefunction adminMintAirdrop(address[] recipients) returns (uint256)
approve
nonpayablefunction approve(address to, uint256 tokenId)
burn
nonpayablefunction burn(uint256 tokenId)
callMetadataRenderer
nonpayablefunction callMetadataRenderer(bytes data) returns (bytes)
finalizeOpenEdition
nonpayablefunction finalizeOpenEdition()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(string _contractName, string _contractSymbol, address _initialOwner, address _fundsRecipient, uint64 _collectionSize, uint16 _royaltyBPS, bytes[] _setupCalls, bool _tradingLocked, bool _revealed, address _metadataRenderer, bytes _metadataRendererInit, bytes _dynamicMetadataInit)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
purchase
payablefunction purchase(uint256 quantity) payable returns (uint256)
purchasePresale
payablefunction purchasePresale(uint256 stageIndex, uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof) payable returns (uint256)
purchasePresaleWithComment
payablefunction purchasePresaleWithComment(uint256 stageIndex, uint256 quantity, uint256 maxQuantity, uint256 pricePerToken, bytes32[] merkleProof, string comment) payable returns (uint256)
purchaseWithComment
payablefunction purchaseWithComment(uint256 quantity, string comment) payable returns (uint256)
reduceSupply
nonpayablefunction reduceSupply(uint64 _newCollectionSize)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revealCollection
nonpayablefunction revealCollection(string collectionURI, string extension)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId, bytes _data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 tokenId)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setFundsRecipient
nonpayablefunction setFundsRecipient(address newRecipientAddress)
setMetadataRenderer
nonpayablefunction setMetadataRenderer(address newRenderer, bytes metadataBase, bytes dynamicMetadataInfo)
setOwner
nonpayablefunction setOwner(address newOwner)
setPresaleConfiguration
nonpayablefunction setPresaleConfiguration(tuple[] presaleStages)
setPublicSaleConfiguration
nonpayablefunction setPublicSaleConfiguration(tuple newConfig)
setRoyalty
nonpayablefunction setRoyalty(uint16 _royaltyBPS)
setTradingLock
nonpayablefunction setTradingLock(bool _locked)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 tokenId)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
Approval
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId)
ApprovalForAll
event ApprovalForAll(address indexed owner, address indexed operator, bool approved)
BatchMetadataUpdate
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
CollectionRevealed
event CollectionRevealed(address indexed revealedBy)
CollectionSizeReduced
event CollectionSizeReduced(address indexed changedBy, uint64 newSize)
ContractStatusChanged
event ContractStatusChanged(address indexed changedBy)
DynamicMetadataChanged
event DynamicMetadataChanged(address changedBy)
FundsReceived
event FundsReceived(address indexed source, uint256 amount)
FundsRecipientChanged
event FundsRecipientChanged(address indexed newAddress, address indexed changedBy)
FundsWithdrawn
event FundsWithdrawn(address indexed withdrawnBy, address indexed withdrawnTo, uint256 amount, address feeRecipient, uint256 feeAmount)
Initialized
event Initialized(uint8 version)
LockTradingStatusChanged
event LockTradingStatusChanged(address indexed changedBy, bool status)
MetadataUpdate
event MetadataUpdate(uint256 _tokenId)
MintComment
event MintComment(address indexed sender, address indexed tokenContract, uint256 indexed tokenId, uint256 quantity, string comment)
MintFeePayout
event MintFeePayout(uint256 mintFeeAmount, address mintFeeRecipient, bool success)
OpenMintFinalized
event OpenMintFinalized(address indexed sender, uint256 numberOfMints)
OwnerCanceled
event OwnerCanceled(address indexed previousOwner, address indexed potentialNewOwner)
OwnerPending
event OwnerPending(address indexed previousOwner, address indexed potentialNewOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PresaleConfigChanged
event PresaleConfigChanged(address indexed changedBy)
PublicSaleConfigChanged
event PublicSaleConfigChanged(address indexed changedBy)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
RoyaltyChanged
event RoyaltyChanged(address indexed changedBy, uint256 newPercentage)
Sale
event Sale(uint8 phase, address indexed to, uint256 indexed quantity, uint256 indexed pricePerToken, uint256 firstPurchasedTokenId, uint256 presaleStage)
Transfer
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId)
UpdatedMetadataRenderer
event UpdatedMetadataRenderer(address sender, address renderer)
Upgraded
event Upgraded(address indexed implementation)
errors
Access_MissingRoleOrAdmin
error Access_MissingRoleOrAdmin(bytes32 role)
Access_OnlyAdmin
error Access_OnlyAdmin()
Access_WithdrawNotAllowed
error Access_WithdrawNotAllowed()
Admin_InvalidCollectionSize
error Admin_InvalidCollectionSize()
Admin_InvalidUpgradeAddress
error Admin_InvalidUpgradeAddress(address proposedAddress)
Admin_UnableToFinalizeNotOpenEdition
error Admin_UnableToFinalizeNotOpenEdition()
ApprovalCallerNotOwnerNorApproved
error ApprovalCallerNotOwnerNorApproved()
ApprovalQueryForNonexistentToken
error ApprovalQueryForNonexistentToken()
ApprovalToCurrentOwner
error ApprovalToCurrentOwner()
ApproveToCaller
error ApproveToCaller()
BalanceQueryForZeroAddress
error BalanceQueryForZeroAddress()
Collection_Aready_Revealed
error Collection_Aready_Revealed()
Collection_TradingLocked
error Collection_TradingLocked()
ExternalMetadataRenderer_CallFailed
error ExternalMetadataRenderer_CallFailed()
Mint_SoldOut
error Mint_SoldOut()
MintToZeroAddress
error MintToZeroAddress()
MintZeroQuantity
error MintZeroQuantity()
ONLY_OWNER
error ONLY_OWNER()
ONLY_PENDING_OWNER
error ONLY_PENDING_OWNER()
OwnerQueryForNonexistentToken
error OwnerQueryForNonexistentToken()
Presale_ExceedStageSupply
error Presale_ExceedStageSupply()
Presale_Inactive
error Presale_Inactive()
Presale_Invalid
error Presale_Invalid()
Presale_MerkleNotApproved
error Presale_MerkleNotApproved()
Presale_TooManyForAddress
error Presale_TooManyForAddress()
Purchase_TooManyForAddress
error Purchase_TooManyForAddress()
Purchase_WrongPrice
error Purchase_WrongPrice(uint256 correctPrice)
Sale_Inactive
error Sale_Inactive()
Setup_Presale_StageOutOfRange
error Setup_Presale_StageOutOfRange()
Setup_RoyaltyPercentageTooHigh
error Setup_RoyaltyPercentageTooHigh(uint16 maxRoyaltyBPS)
TransferCallerNotOwnerNorApproved
error TransferCallerNotOwnerNorApproved()
TransferFromIncorrectOwner
error TransferFromIncorrectOwner()
TransferToNonERC721ReceiverImplementer
error TransferToNonERC721ReceiverImplementer()
TransferToZeroAddress
error TransferToZeroAddress()
URIQueryForNonexistentToken
error URIQueryForNonexistentToken()
Withdraw_FundsSendFailure
error Withdraw_FundsSendFailure()
creation bytecode
0x6101a0346102bd57601f61616638819003918201601f19168301916001600160401b038311848410176102c1578084926060946040528339810103126102bd5780516001600160a01b0380821682036102bd576040602084015193015190811681036102bd5730608052600860a0526203345060c052600560e052610100927ff0887ba65ee2024ea881d91b74c2450ef19e1557f03bed3ea9f16b037cbe2dc98452610120927f5ebbf78043a2215b522b1366a193ec74dd1f54e441e841a87b9653246a9c49a684525f5460ff8160081c1615908180926102b0575b8015610299575b1561023d5760ff1981166001175f558161022b575b506101409182526101609283526101809384526101f2575b60405193615e9095866102d68739608051868181610c63015281816118c30152611a3d015260a0518681816151a00152615396015260c051868181610f120152615787015260e0518681816126ae0152613c5f0152518581816122f1015281816128880152612b62015251848181610dff01528181610fe30152818161104301528181611da201528181612a2b01528181612d420152818161361b0152613c27015251838181610a8401528181610d0401526119640152518281816110c00152818161446e01528181614d5601526157310152518181816110e801526157570152f35b61ff00195f54165f557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a161010f565b61ffff1916610101175f9081556100f7565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156100e25750600160ff8216146100e2565b50600160ff8216106100db565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610022575b3615610018575f80fd5b61002061435a565b005b5f3560e01c806301ffc9a7146103e157806303ee2733146103dc57806306b3f461146103d757806306fdde03146103d2578063081812fc146103cd578063095ea7b3146103c857806310a7eb5d146103c357806313af4035146103be57806318160ddd146103b957806323b872dd146103b4578063248a9ca3146103af57806324d7806c146103aa57806325eb54c6146103a55780632a55205a146103a05780632f2ff15d1461039b57806336568abe146103965780633659cfe61461039157806336e79a5a1461038c5780633ccfd60b1461038757806341e96eb11461038257806341ef421a1461037d57806342558f551461037857806342842e0e1461037357806342966c681461036e5780634d27c543146103695780634e44ae5e146103645780634f1ef2861461035f578063522dd5cd1461035a57806352d1902d1461035557806360e55adf146103505780636352211e1461034b5780636a75944214610346578063703199701461034157806370a082311461033c57806379502c55146103375780638da5cb5b1461033257806391d148541461032d57806395d89b4114610328578063a0a8e46014610323578063a217fddf1461031e578063a22cb46514610319578063a3fd2c4414610314578063ac9650d81461030f578063b88d4fde1461030a578063b8ae5a2c14610305578063b9e7a58414610300578063c7b7cae6146102fb578063c87b56dd146102f6578063d445b978146102f1578063d5391393146102ec578063d547741f146102e7578063da7b7f9f146102e2578063e26bd343146102dd578063e2f6807e146102d8578063e58306f9146102d3578063e8a3d485146102ce578063e985e9c5146102c9578063efef39a1146102c4578063ff47a7c3146102bf5763ff92cd730361000e57612dbc565b612d0c565b612ca8565b612c41565b612bcb565b612b28565b612a4e565b612a14565b612990565b6128ab565b612871565b612677565b612563565b6124c2565b612426565b6122bf565b61223e565b6121c4565b612134565b612086565b61206c565b612027565b611f82565b611f3b565b611f12565b611ea6565b611e49565b611e20565b611d3b565b611d0b565b611afc565b611a2b565b6119e3565b611882565b61176c565b6114da565b61126b565b6111cb565b611141565b6110a5565b611016565b610e7e565b610dc9565b610c3c565b610ba6565b610ae7565b610ab3565b610a6f565b610a1e565b6109f0565b61098d565b61093c565b6108f3565b610859565b610766565b610716565b61063a565b6105e4565b61051b565b6103fc565b6001600160e01b03198116036103f857565b5f80fd5b346103f85760203660031901126103f85761046660043561041c816103e6565b63ffffffff60e01b16637965db0b60e01b81149081156104ae575b811561049d575b811561048c575b811561047b575b811561046a575b5060405190151581529081906020820190565b0390f35b63297644e560e11b1490505f610453565b632483248360e11b8114915061044c565b63152a902d60e11b81149150610445565b638da5cb5b60e01b8114915061043e565b90506380ac58cd60e01b811480156104de575b80156104ce575b90610437565b506301ffc9a760e01b81146104c8565b50635b5e139f60e01b81146104c1565b9181601f840112156103f8578235916001600160401b0383116103f857602083818601950101116103f857565b60403660031901126103f8576004356001600160401b036024358181116103f85761054a9036906004016104ee565b929091610555614388565b60655482015f1901908183116105d5576101605460a01c16106105c35761057a6143de565b156105b15761059161059792610466943691611831565b9061445b565b6105a1600160fb55565b6040519081529081906020820190565b60405163f12dcc7f60e01b8152600490fd5b604051630717c51360e41b8152600490fd5b612ef7565b5f9103126103f857565b346103f8575f3660031901126103f857602061016454604051908152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b906020610637928181520190610602565b90565b346103f8575f3660031901126103f8576040515f60675461065a81611578565b808452906020906001908181169081156106ec5750600114610693575b6104668561068781870382611649565b60405191829182610626565b60675f90815293507f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae5b8385106106d95750505050810160200161068782610466610677565b80548686018401529382019381016106bd565b8695506104669693506020925061068794915060ff191682840152151560051b8201019293610677565b346103f85760203660031901126103f8576020610734600435612f26565b6040516001600160a01b039091168152f35b6001600160a01b038116036103f857565b6044359061076482610746565b565b346103f85760403660031901126103f85760043561078381610746565b602435906001600160a01b038061079984615069565b51169082169181831461083a578133036107fe575b5f848152606b6020526040902080546001600160a01b0319166001600160a01b039092169190911790557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9255f80a4005b6001600160a01b0382165f908152606c6020908152604080832033845290915290205460ff166107ae576040516367d9dca160e11b8152600490fd5b60405163250fdee360e21b8152600490fd5b6064359061076482610746565b346103f85760203660031901126103f85760043561087681610746565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e15761016180546001600160a01b0319166001600160a01b0392909216918217905533907f70a7ea5c664ab9c21baf3da59bb2f1e1ca33557b08a0031fab4f1707674499515f80a3005b6040516302bd6bd160e01b8152600490fd5b346103f85760203660031901126103f85760043561091081610746565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e15761002090614669565b346103f8575f3660031901126103f85760655460665460405191035f19018152602090f35b60609060031901126103f85760043561097981610746565b9060243561098681610746565b9060443590565b346103f85761099b36610961565b906001600160401b03806101605460a01c16905f1960655401161460ff6101615460a81c1690816109e7575b506109d557610020926157c6565b60405163a36e58c360e01b8152600490fd5b9050155f6109c7565b346103f85760203660031901126103f8576004355f5261012d6020526020600160405f200154604051908152f35b346103f85760203660031901126103f857602060ff610a63600435610a4281610746565b5f805261012d845260405f209060018060a01b03165f5260205260405f2090565b54166040519015158152f35b346103f8575f3660031901126103f8576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346103f85760403660031901126103f8576040610ad1602435612f73565b82516001600160a01b0390921682526020820152f35b346103f85760403660031901126103f857602435600435610b0782610746565b805f5261012d80602052610b21600160405f2001546146b4565b5f828152602082815260408083206001600160a01b038716845290915290205460ff1615610b4b57005b5f828152602091825260408082206001600160a01b038616835290925220805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d5f80a4005b346103f85760403660031901126103f857602435610bc381610746565b336001600160a01b03821603610bdf5761002090600435614906565b60405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b346103f85760203660031901126103f857600435610c5981610746565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690610c9130831415612fa9565b610cad815f80516020615ddb833981519152541692831461300a565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e157604051637399583360e01b81526001600160a01b038481166004830152929092166024830152602090829060449082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1908115610da2575f91610d73575b5015610d4c5761002090610d4661306b565b90614a5f565b604051633bcafdf560e21b81526001600160a01b03919091166004820152602490fd5b0390fd5b610d95915060203d602011610d9b575b610d8d8183611649565b81019061498e565b5f610d34565b503d610d83565b6132c4565b6004359061ffff821682036103f857565b60a4359061ffff821682036103f857565b346103f85760203660031901126103f857610de2610da7565b335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81610e54575b50610e3a576100208261309c565b6040516333ba055f60e21b81526004810191909152602490fd5b5f8381526020918252604080822033835290925220610e78915060ff905b54161590565b5f610e2c565b346103f8575f3660031901126103f857610e96614388565b5f805261012d60205247610ed9610ed5610ece335f80516020615dfb8339815191525b9060018060a01b03165f5260205260405f2090565b5460ff1690565b1590565b80610fd3575b80610fb4575b610fa2576101615f80808085610f10610f04875460018060a01b031690565b6001600160a01b031690565b7f0000000000000000000000000000000000000000000000000000000000000000f1610f3a613113565b5015610f905754604080519283525f60208401819052908301526001600160a01b03169033907f8a95554e4c9dcaaf33f247387f2ee77390780487d3365e3a804788791a1df50090606090a3610020600160fb55565b6040516339debd5b60e01b8152600490fd5b604051631dab829b60e01b8152600490fd5b5061016154610fcb906001600160a01b0316610f04565b331415610ee5565b50611011610ed5610ece33610eb97f00000000000000000000000000000000000000000000000000000000000000005f5261012d60205260405f2090565b610edf565b346103f8575f3660031901126103f857335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d8161107d575b50610e3a5761002061316d565b5f838152602091825260408082203383529092522061109f915060ff90610e72565b5f611070565b346103f85760203660031901126103f85760406110e46004357f0000000000000000000000000000000000000000000000000000000000000000612f60565b81517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020810191909152f35b801515036103f857565b60e435906107648261111c565b61010435906107648261111c565b346103f85760203660031901126103f85760043561115e8161111c565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e1571515610161805460ff60a81b8360a81b169060ff60a81b19161790556040519081527f569e33d168bfc35ada8c9257e83cd5fba5d421727e6d3b1bf319b6e82dcb399d60203392a2005b346103f8576111d936610961565b6001600160401b03806101605460a01c16905f196065540116149160ff6101615460a81c16808091611263575b6109d5576040519361121785611613565b5f85528161125a575b506109d5576112308282866157c6565b803b61123857005b61124193615b91565b1561124857005b6040516368d2bf6b60e11b8152600490fd5b9050155f611220565b508315611206565b346103f85760203660031901126103f85760043561128881615069565b80516001600160a01b039081169081903382148015611483575b801561146f575b1561145d575f936112ba838761461d565b6001600160a01b0383165f908152606a60205260409020611362906113186112fb6112ec83546001600160401b031690565b5f19016001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b805461133a9060801c6001600160401b03165b6001016001600160401b031690565b815467ffffffffffffffff60801b191660809190911b67ffffffffffffffff60801b16179055565b6113b6611377875f52606960205260405f2090565b80546001600160a01b0319166001600160a01b0386161781556113a36001600160401b03421682613142565b805460ff60e01b1916600160e01b179055565b600186016113cc815f52606960205260405f2090565b80549093166001600160a01b031615611409575b505050505f80516020615e1b8339815191528280a461002061140460665460010190565b606655565b60655403611418575b806113e0565b81546001600160a01b0319166001600160a01b039093169290921781556114559161144f906020905b01516001600160401b031690565b90613142565b5f8080611412565b604051632ce44b5f60e11b8152600490fd5b503361147d610f0487612f26565b146112a9565b506114a5610ece33610eb98560018060a01b03165f52606c60205260405f2090565b6112a2565b9181601f840112156103f8578235916001600160401b0383116103f8576020808501948460051b0101116103f857565b60a03660031901126103f8576001600160401b036024356004356084358381116103f85761150c9036906004016114aa565b9093611516614388565b60655484015f1901908185116105d5576101605460a01c16106105c35761153c82614bf3565b156115665761046693610597936040519361155685611613565b5f85526064359160443591614ca2565b604051634af69e0d60e11b8152600490fd5b90600182811c921680156115a6575b602083101461159257565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611587565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b0381116115d757604052565b6115b0565b61010081019081106001600160401b038211176115d757604052565b606081019081106001600160401b038211176115d757604052565b602081019081106001600160401b038211176115d757604052565b604081019081106001600160401b038211176115d757604052565b90601f801991011681019081106001600160401b038211176115d757604052565b9060405191825f825461167c81611578565b908184526020946001916001811690815f146116e857506001146116aa575b50505061076492500383611649565b5f90815285812095935091905b8183106116d057505061076493508201015f808061169b565b855488840185015294850194879450918301916116b7565b9250505061076494925060ff191682840152151560051b8201015f808061169b565b94919360e096946117306001600160681b03939b9a99959b610100808a52890190610602565b9a6001600160401b03809216602089015216604087015216606085015263ffffffff928380921660808601521660a08401521660c08201520152565b346103f85760203660031901126103f8576004355f5261016560205260405f206117958161166a565b6104666001830154916001600160401b03936002810154600363ffffffff92015492604051968796848460401c1694808560201c169416926001600160681b038260801c1692808360401c169216908961170a565b60405190608082018281106001600160401b038211176115d757604052565b60405190610764826115dc565b6001600160401b0381116115d757601f01601f191660200190565b92919261183d82611816565b9161184b6040519384611649565b8294818452818301116103f8578281602093845f960137010152565b9080601f830112156103f85781602061063793359101611831565b60403660031901126103f85760043561189a81610746565b6024356001600160401b0381116103f8576118b9903690600401611867565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116906118f130831415612fa9565b61190d815f80516020615ddb833981519152541692831461300a565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e157604051637399583360e01b81526001600160a01b038581166004830152929092166024830152602090829060449082905f907f0000000000000000000000000000000000000000000000000000000000000000165af1908115610da2575f916119c4575b50156119a35761002091614b31565b604051633bcafdf560e21b81526001600160a01b0383166004820152602490fd5b6119dd915060203d602011610d9b57610d8d8183611649565b5f611994565b346103f85760403660031901126103f857600435611a0081610746565b60018060a01b03165f5261016660205260405f206024355f52602052602060405f2054604051908152f35b346103f8575f3660031901126103f8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003611a83576040515f80516020615ddb8339815191528152602090f35b60405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608490fd5b610124359061076482610746565b346103f85760603660031901126103f8576004803590611b1b82610746565b6001600160401b03906024358281116103f857611b3b9036908301611867565b916044359081116103f857611b539036908301611867565b335f9081525f80516020615dfb8339815191526020526040908190205490939192919060ff1615611cfc5761016080546001600160a01b0319166001600160a01b038716179055611bad9060208082518301019101613244565b939091855191611bd383611bc588856020840161329f565b03601f198101855284611649565b6001600160a01b03881692833b156103f8578751636bbde00160e01b8152915f9183918291611c0591908a840161329f565b038183875af18015610da257611ce9575b508251611c65575b85513381526001600160a01b03881660208201527f046c5d913c35948c3e0e44c3599eb14bf33b73f141fa8bb282b300414998b8689080604081015b0390a1610020614fc5565b819694963b156103f8575f8094611c918851998a96879586946342495a9560e01b8652309086016132cf565b03925af1918215610da2577f046c5d913c35948c3e0e44c3599eb14bf33b73f141fa8bb282b300414998b86893611c5a93611cd0575b82948294611c1e565b80611cdd611ce3926115c4565b806105da565b5f611cc7565b80611cdd611cf6926115c4565b5f611c16565b5082516302bd6bd160e01b8152fd5b346103f85760203660031901126103f85760206001600160a01b03611d31600435615069565b5116604051908152f35b346103f85760403660031901126103f8576001600160401b036004358181116103f857611d6c903690600401611867565b906024359081116103f857611d85903690600401611867565b335f9081525f80516020615dfb83398151915260205260409020547f0000000000000000000000000000000000000000000000000000000000000000929060ff161561012d81611df8575b50611ddf576100209250613341565b6040516333ba055f60e21b815260048101849052602490fd5b5f8581526020918252604080822033835290925220611e1a915060ff90610e72565b5f611dd0565b346103f8575f3660031901126103f857610160546040516001600160a01b039091168152602090f35b346103f85760203660031901126103f857600435611e6681610746565b6001600160a01b03168015611e94575f52606a60205260206001600160401b0360405f205416604051908152f35b6040516323d3ad8160e21b8152600490fd5b346103f8575f3660031901126103f85760c06101605460ff60018060a01b03610161549061ffff6040519482811686526001600160401b038160a01c16602087015260e01c16604085015281166060840152818160a01c161515608084015260a81c16151560a0820152f35b346103f8575f3660031901126103f85761015f546040516001600160a01b039091168152602090f35b346103f85760403660031901126103f857602060ff610a63602435611f5f81610746565b6004355f5261012d845260405f209060018060a01b03165f5260205260405f2090565b346103f8575f3660031901126103f8576040515f606854611fa281611578565b808452906020906001908181169081156106ec5750600114611fce576104668561068781870382611649565b60685f90815293507fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c220977535b8385106120145750505050810160200161068782610466610677565b8054868601840152938201938101611ff8565b346103f8575f3660031901126103f8576104666040516120468161162e565b60058152640c4b8c8b8d60da1b6020820152604051918291602083526020830190610602565b346103f8575f3660031901126103f85760206040515f8152f35b346103f85760403660031901126103f8576004356120a381610746565b6024356120af8161111c565b6001600160a01b0382169133831461212257335f908152606c602090815260408083206001600160a01b039094168352929052209015159060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60405163b06307db60e01b8152600490fd5b346103f8575f3660031901126103f85760a06101625460ff6001600160401b03610163549080604051946001600160681b038116865263ffffffff8160681c16602087015260881c1660408501528116606084015260401c1615156080820152f35b60206003198201126103f857600435906001600160401b0382116103f8576121c0916004016114aa565b9091565b346103f8576121db6121d536612196565b906134f8565b60405160209160208201926020835281518094526040830193602060408260051b8601019301915f955b8287106122125785850386f35b90919293828061222e600193603f198a82030186528851610602565b9601920196019592919092612205565b346103f85760803660031901126103f85760043561225b81610746565b60243561226781610746565b604435606435916001600160401b03928381116103f85761228c903690600401611867565b92806101605460a01c16905f1960655401161460ff6101615460a81c16908161125a57506109d5576112308282866157c6565b346103f8576122cd36612196565b335f9081525f80516020615dfb8339815191526020908152604091829020549192917f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81612404575b506123ed5750606554915f199181840183018083116105d5576001600160401b036101605460a01c16106123dc5783828101945b85811061237457610466876123656154a4565b90519081529081906020820190565b81810390848210156123d7575f6001895f80516020615e3b83398151915260608d849760051b01356123a581610746565b6123ae81615195565b858c6123b86154a4565b8651600281529691018c870152850152848060a01b031692a401612352565b613442565b8451630717c51360e41b8152600490fd5b6024908451906333ba055f60e21b82526004820152fd5b5f8381526020918252868120338252909152604081205460ff1615915061231e565b346103f85760203660031901126103f8576004356001600160401b0381116103f857612456903690600401611867565b335f9081525f80516020615dfb833981519152602052604090205460ff16156108e1576101605481515f92839260209091019083906001600160a01b03165af161249e613113565b90156124b05761046690610687614fc5565b6040516397e71ac360e01b8152600490fd5b60c03660031901126103f8576024356001600160401b036004356084358281116103f8576124f49036906004016114aa565b9060a4358481116103f85761250d9036906004016104ee565b959094612518614388565b60655482015f1901908183116105d5576101605460a01c16106105c35761253e84614bf3565b156115665761255561059795610466973691611831565b936064359160443591614ca2565b346103f85760203660031901126103f857600435612580816145e4565b15612606576101605461016154604051630180d19360e51b8152600481019390935260a01c60ff16151560248301525f9082906001600160a01b031681806044810103915afa8015610da257610466915f916125e4575b5060405191829182610626565b61260091503d805f833e6125f88183611649565b81019061331c565b5f6125d7565b604051630a14c4b560e41b8152600490fd5b60208082528251608083830152805160a0840181905260c084019492918201905f5b818110612663575050508160609160809301516040850152604081015182850152015191015290565b82518752958301959183019160010161263a565b346103f85760203660031901126103f85761046660043561269781610746565b61269f61358b565b506126a9336154b5565b6126d27f00000000000000000000000000000000000000000000000000000000000000006135bf565b916126ff6126f18260018060a01b03165f5261016660205260405f2090565b60015f5260205260405f2090565b5461270984613497565b526001600160a01b0381165f908152610166602052604090206127349060025f5260205260405f2090565b5461273e846134a4565b526001600160a01b0381165f9081526101666020526040902061276a905b60035f5260205260405f2090565b54612774846134b4565b526001600160a01b0381165f908152610166602052604090206127a0905b60045f5260205260405f2090565b546127aa846134c4565b526001600160a01b0381165f908152610166602052604090206127d6905b60055f5260205260405f2090565b546127e0846134d4565b5261284a61281e61280e61282f8561282a61281e61280e8860018060a01b03165f52606a60205260405f2090565b5460401c6001600160401b031690565b6001600160401b031690565b6135f1565b6001600160a01b039094165f908152606a6020526040902090565b916128536117ea565b93845260208401526040830152606082015260405191829182612618565b346103f8575f3660031901126103f85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f85760403660031901126103f8576100206024356004356128ce82610746565b805f5261012d6020526128e7600160405f2001546146b4565b614906565b35906001600160681b03821682036103f857565b6024359063ffffffff821682036103f857565b359063ffffffff821682036103f857565b604435906001600160401b03821682036103f857565b606435906001600160401b03821682036103f857565b608435906001600160401b03821682036103f857565b600435906001600160401b03821682036103f857565b35906001600160401b03821682036103f857565b346103f85760a03660031901126103f85760405160a081018181106001600160401b038211176115d757604052600435906001600160681b03821682036103f8576100209181526129df612900565b60208201526129ec612924565b60408201526129f961293a565b6060820152608435612a0a8161111c565b60808201526135fe565b346103f8575f3660031901126103f85760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103f8576101803660031901126103f85760046001600160401b0381358181116103f857612a809036908401611867565b906024358181116103f857612a989036908501611867565b612aa0610757565b612aa861084c565b612ab0612950565b612ab8610db8565b9060c4358681116103f857612ad09036908a016114aa565b929091612adb611126565b94612ae4611133565b96612aed611aee565b98610144358b81116103f8578d612b0691369101611867565b9a610164359081116103f8576100209d612b2291369101611867565b9b61375d565b346103f85760403660031901126103f857600435612b4581610746565b335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81612ba3575b50610e3a576104666105a160243584613af5565b5f8381526020918252604080822033835290925220612bc5915060ff90610e72565b5f612b8f565b346103f8575f3660031901126103f8576101605460405163e8a3d48560e01b8152905f90829060049082906001600160a01b03165afa8015610da257610466915f91612c27575b50604051918291602083526020830190610602565b612c3b91503d805f833e6125f88183611649565b5f612c12565b346103f85760403660031901126103f8576020612c9e600435612c6381610746565b60243590612c7082610746565b6001600160a01b039081165f908152606c60209081526040808320939094168252919091522060ff90541690565b6040519015158152f35b60203660031901126103f857600435612cbf614388565b60655481015f19018082116105d5576001600160401b036101605460a01c16106105c357612ceb6143de565b156105b1576105976104669160405190612d0482611613565b5f825261445b565b346103f85760203660031901126103f857612d25612966565b335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81612d7d575b50610e3a5761002082613b6d565b5f8381526020918252604080822033835290925220612d9f915060ff90610e72565b5f612d6f565b6001600160401b0381116115d75760051b60200190565b346103f8576020806003193601126103f8576001600160401b036004358181116103f857366023820112156103f85760246004820135612dfb81612da5565b93604090612e0c6040519687611649565b8286526024602087019360051b860101943686116103f85760248101935b868510612e3a5761002088613c0a565b84358381116103f857820161010060231982360301126103f857612e5c611809565b9187820135928584116103f8576101048c9493612e7f86958c3691840101611867565b8352612e8d6044820161297c565b85840152612e9d6064820161297c565b89840152612ead608482016128ec565b6060840152612ebe60a48201612913565b6080840152612ecf60c48201612913565b60a0840152612ee060e48201612913565b60c0840152013560e0820152815201940193612e2a565b634e487b7160e01b5f52601160045260245ffd5b90600182018092116105d557565b919082018092116105d557565b612f2f816145e4565b15612f4e575f908152606b60205260409020546001600160a01b031690565b6040516333d1c03960e21b8152600490fd5b818102929181159184041417156105d557565b610161546001600160a01b031691908215612fa457612fa06127109161ffff6101605460e01c1690612f60565b0490565b505f90565b15612fb057565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608490fd5b1561301157565b60405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608490fd5b60405161307781611613565b5f8152905f368137565b6040519061308e826115f8565b602a82526040366020840137565b61ffff8116906113888083116130fb5750610160805461ffff60e01b191660e09290921b61ffff60e01b169190911790556040519081527f02365318429bf1d603e8383b62068288a077545c5c9e709201d563b3f56ce2b360203392a2565b6024906040519063334074c160e11b82526004820152fd5b3d1561313d573d9061312482611816565b916131326040519384611649565b82523d5f602084013e565b606090565b805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b6001600160401b036101608180825460a01c16036131ec57606554610160805467ffffffffffffffff60a01b19165f1992909201841660a01b67ffffffffffffffff60a01b169190911790555460a01c166040519081527fb6cc1e876b8d7479c8afe025a58658b0f3c3ec5bd0f28cb4261326b162069bf860203392a2565b6040516339d0b02160e21b8152600490fd5b81601f820112156103f85780519061321582611816565b926132236040519485611649565b828452602083830101116103f857815f9260208093018386015e8301015290565b90916060828403126103f8578151916001600160401b03928381116103f8578461326f9183016131fe565b9360208201518481116103f857816132889184016131fe565b9360408301519081116103f85761063792016131fe565b90916132b661063793604084526040840190610602565b916020818403910152610602565b6040513d5f823e3d90fd5b94936133095f946132fb6080956133179560018060a01b03168a5260a060208b015260a08a0190610602565b9088820360408a0152610602565b908682036060880152610602565b930152565b906020828203126103f85781516001600160401b0381116103f85761063792016131fe565b6101615460a01c60ff166134305761016054613365906001600160a01b0316610f04565b60405163e8a3d48560e01b8152905f82600481845afa918215610da2575f92613414575b50803b156103f8576133b6935f8094604051968795869485936342495a9560e01b855230600486016132cf565b03925af18015610da257613401575b50610161805460ff60a01b1916600160a01b179055337f2a10c355cd3f8130b128e45782d3e92e6c0b4ba2e844d06f49a48ee23f1f21f75f80a2565b80611cdd61340e926115c4565b5f6133c5565b6134299192503d805f833e6125f88183611649565b905f613389565b604051635c7fae3560e01b8152600490fd5b634e487b7160e01b5f52603260045260245ffd5b91908110156123d75760051b81013590601e19813603018212156103f85701908135916001600160401b0383116103f85760200182360381136103f8579190565b8051156123d75760200190565b8051600110156123d75760400190565b8051600210156123d75760600190565b8051600310156123d75760800190565b8051600410156123d75760a00190565b80518210156123d75760209160051b010190565b91909161350483612da5565b6135116040519182611649565b838152601f1961352085612da5565b015f5b81811061357a57505080935f5b81811061353d5750505050565b8061355e6135586135516001948689613456565b3691611831565b3061516e565b61356882866134e4565b5261357381856134e4565b5001613530565b806060602080938601015201613523565b60405190608082018281106001600160401b038211176115d7576040525f6060838181528260208201528260408201520152565b906135c982612da5565b6135d66040519182611649565b82815280926135e7601f1991612da5565b0190602036910137565b919082039182116105d557565b335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d8161373b575b5061372357506136dd6080826001600160681b036136fc9451166101629081549063ffffffff60681b602085015160681b16906001600160401b0360881b604086015160881b169266ffffffffffffff60c81b1617171790556136d66136b860608301516001600160401b031690565b6001600160401b0361016391166001600160401b0319825416179055565b0151151590565b6101639060ff60401b825491151560401b169060ff60401b1916179055565b337f19f44771468333d4fb6bcd1e2b860c3dbb5d00a38a1a5a2bd05d6eb6004c9abc5f80a2565b602490604051906333ba055f60e21b82526004820152fd5b5f838152602091825260408082203383529092522060ff91505416155f613648565b9a98969492909160ff9c9a989694925f549d8e60081c1615809e819f61387f575b811561385f575b5015613803576137a99c8e6137a0600160ff195f5416175f55565b6137ec5761388d565b6137af57565b6137bd61ff00195f54165f55565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602090a1565b6137fe61010061ff00195f5416175f55565b61388d565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b303b15915081613871575b505f613785565b6001915060ff16145f61386a565b600160ff821610915061377e565b936139b29996613992986138d161397298959d9e9d6138b361390796613950999a6155cf565b6138bb6156dd565b6138c36156ed565b6138cc816147ec565b614669565b80613ad2575b5050610160805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b16919091179055565b61016080546001600160a01b038c167fffff0000ffffffffffffffff00000000000000000000000000000000000000009091161760e09290921b61ffff60e01b16919091179055565b61016180546001600160a01b0319166001600160a01b03909216919091179055565b610161805460ff60a01b191691151560a01b60ff60a01b16919091179055565b610161805460ff60a81b191691151560a81b60ff60a81b16919091179055565b61138861ffff6139ca6101605461ffff9060e01c1690565b1611613ab857806020806139e393518301019101613244565b91929093604051916139fd83611bc586886020840161329f565b6001600160a01b031691823b156103f857604051636bbde00160e01b8152915f9183918291613a3091906004840161329f565b038183865af18015610da257613aa5575b508351613a4f575b50505050565b803b156103f857613a7b935f8094604051968795869485936342495a9560e01b855230600486016132cf565b03925af18015610da257613a92575b808080613a49565b80611cdd613a9f926115c4565b5f613a8a565b80611cdd613ab2926115c4565b5f613a41565b60405163334074c160e11b81526113886004820152602490fd5b613ae491613adf336147ec565b6134f8565b50613aee3361487b565b5f806138d7565b905f196065548201018082116105d5576001600160401b036101605460a01c16106105c357613b24818361538b565b613b2c6154a4565b8181039081116105d5575f80516020615e3b83398151915260605f946040519360038552602085015285604085015260018060a01b031692a46106376154a4565b610160546001600160401b03828116929160a01c168210801590613bfc575b613bea57610160805467ffffffffffffffff60a01b191660a09290921b67ffffffffffffffff60a01b169190911790556040519081527f2913fed19d080c1a117561858eb9911bfe1c9e32b3ed5cd19a455065f568468160203392a2565b6040516314dc7f9360e21b8152600490fd5b506065545f19018210613b8c565b335f9081525f80516020615dfb83398151915260205260409020547f00000000000000000000000000000000000000000000000000000000000000009060ff161561012d81613e79575b5061372357508051907f00000000000000000000000000000000000000000000000000000000000000008211613e6757613c8e8261016455565b5f5b828110613cc157505050337f6d682cb52ae97f85ae4d472de1318858441b30323437caaa4b9a2d923f8f22315f80a2565b80613e04613cd0600193612f0b565b613dff613cee613ce9835f5261016560205260405f2090565b613e9b565b918686613d5761281e613d496040613d3a8b60208b01976001600160401b039788613d208b516001600160401b031690565b168015159081613e5c575b50613e55575b613e31576134e4565b5101516001600160401b031690565b93516001600160401b031690565b911611613e0a575b613d6985886134e4565b51518352613d9e6060613d8f81613d80898c6134e4565b5101516001600160681b031690565b6001600160681b031690850152565b613dc96080613dbd81613db1898c6134e4565b51015163ffffffff1690565b63ffffffff1690850152565b613ddc60a0613dbd81613db1898c6134e4565b60e080613de9878a6134e4565b510151908401525f5261016560205260405f2090565b61414e565b01613c90565b613e2c613e1c6040613d3a888b6134e4565b6001600160401b03166040850152565b613d5f565b613e50613e436020613d3a85856134e4565b6001600160401b03168a52565b6134e4565b505f613d31565b90504210155f613d2b565b60405163194539c360e31b8152600490fd5b5f838152602091825260408082203383529092522060ff91505416155f613c54565b90604051613ea8816115dc565b60e060038294613eb78161166a565b8452613f096001600160681b036001830154613ef36001600160401b0380831660208a01528260401c1660408901906001600160401b03169052565b60801c1660608601906001600160681b03169052565b600281015463ffffffff8082166080870152602082901c811660a087015260409190911c1660c08501520154910152565b601f8111613f46575050565b60675f527f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae906020601f840160051c83019310613f9d575b601f0160051c01905b818110613f92575050565b5f8155600101613f87565b9091508190613f7e565b601f8111613fb3575050565b60685f527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c22097753906020601f840160051c8301931061400a575b601f0160051c01905b818110613fff575050565b5f8155600101613ff4565b9091508190613feb565b601f821161402157505050565b5f5260205f20906020601f840160051c83019310614059575b601f0160051c01905b81811061404e575050565b5f8155600101614043565b909150819061403a565b9081516001600160401b0381116115d75761408881614083606854611578565b613fa7565b602080601f83116001146140c9575081906140b993945f926140be575b50508160011b915f199060031b1c19161790565b606855565b015190505f806140a5565b90601f198316946140fb60685f527fa2153420d844928b4421650203c77babc8b33d7f2e7b450e2966db0c2209775390565b925f905b87821061413657505083600195961061411e575b505050811b01606855565b01515f1960f88460031b161c191690555f8080614113565b806001859682949686015181550195019301906140ff565b9080518051906001600160401b0382116115d757614176826141708654611578565b86614014565b602090816001601f8511146142ea57508260e093600395936141ac935f926140be5750508160011b915f199060031b1c19161790565b84555b614251600185016141cd6112fb60208501516001600160401b031690565b6142116141e460408501516001600160401b031690565b82546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16178255565b60608301516001600160681b031681546cffffffffffffffffffffffffff60801b191660809190911b6cffffffffffffffffffffffffff60801b16179055565b6142e36002850161428261426c608085015163ffffffff1690565b825463ffffffff191663ffffffff909116178255565b6142b861429660a085015163ffffffff1690565b825467ffffffff00000000191660209190911b67ffffffff0000000016178255565b60c083015163ffffffff165b63ffffffff60401b82549160401b169063ffffffff60401b1916179055565b0151910155565b9190601f1984166142fe875f5260205f2090565b935f905b82821061434257505092600192859260e096600398961061432b575b505050811b0184556141af565b01515f1983881b60f8161c191690555f808061431e565b80600186978294978701518155019601940190614302565b6040513481527f8e47b87b0ef542cdfa1659c551d88bad38aa7f452d2bbb349ab7530dfec8be8f60203392a2565b600260fb541461439957600260fb55565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b6101635460ff8160401c1615908161442b575b81614411575b81614400575090565b90506001600160401b034291161190565b6101625460881c6001600160401b031642101591506143f7565b6101625460881c6001600160401b0316151591506143f1565b604090610637939281528160208201520190610602565b9061016254906001600160681b038216917f00000000000000000000000000000000000000000000000000000000000000006144a08561449b8387612f19565b612f60565b34036145b4575063ffffffff6144b5336154b5565b9160681c16801515918261457d575b505061456b576144d4833361538b565b6144e08361282a6154a4565b9283926144ec82615708565b816040515f80516020615e3b83398151915233918061451e898260405f91939293606081019483825260208201520152565b0390a4815161452e575b50505090565b7fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a604051806145603095339583614444565b0390a4805f80614528565b604051630882ba5360e21b8152600490fd5b6145ac91925061282a866145a761281e61280e3360018060a01b03165f52606a60205260405f2090565b612f19565b115f806144c4565b6145c58561449b610d6f9387612f19565b60405163350e0bcf60e11b815260048101919091529081906024820190565b80600111159081614611575b816145f9575090565b90505f52606960205260ff60405f205460e01c161590565b606554811091506145f0565b5f818152606b6020526040812080546001600160a01b031916905590916001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258280a4565b61015f805490916001600160a01b039081169190829082167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a36001600160a01b031916179055565b5f81815261012d6020908152604080832033845290915290205460ff16156146d95750565b33906146e3613081565b9160306146ef84613497565b5360786146fb84615c39565b5360295b600181116147aa57610d6f61476761479286614784614727886147228915615c66565b615cb1565b614761604051958694614761602087016017907f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081520190565b906159a4565b7001034b99036b4b9b9b4b733903937b6329607d1b815260110190565b03601f198101835282611649565b60405162461bcd60e51b815291829160048301610626565b90600f81169060108210156123d7576147e7916f181899199a1a9b1b9c1cb0b131b232b360811b901a6147dd8487615c49565b5360041c91615c5a565b6146ff565b6001600160a01b0381165f9081525f80516020615dfb833981519152602052604090205461012d9060ff1615614820575050565b5f808052602091825260408082206001600160a01b038516835290925220805460ff1916600117905533906001600160a01b03165f7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d8180a4565b6001600160a01b0381165f9081525f80516020615dfb833981519152602052604090205461012d9060ff166148ae575050565b5f808052602091825260408082206001600160a01b038516835290925220805460ff1916905533906001600160a01b03165f7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b8180a4565b5f81815261012d602081815260408084206001600160a01b03871685529091529091205460ff1661493657505050565b5f828152602091825260408082206001600160a01b038616835290925220805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b5f80a4565b908160209103126103f857516106378161111c565b908160209103126103f8575190565b156149b957565b60405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608490fd5b60809060208152602e60208201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b60608201520190565b90614a8b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b15614a9a575061076490615a6b565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa5f9381614b00575b50614ae05760405162461bcd60e51b815280610d6f60048201614a10565b614afb5f80516020615ddb83398151915261076494146149b2565b6159b6565b614b2391945060203d602011614b2a575b614b1b8183611649565b8101906149a3565b925f614ac2565b503d614b11565b90614b5d7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1690565b15614b6c575061076490615a6b565b6040516352d1902d60e01b8152916020836004816001600160a01b0385165afa5f9381614bd2575b50614bb25760405162461bcd60e51b815280610d6f60048201614a10565b614bcd5f80516020615ddb83398151915261076494146149b2565b615a19565b614bec91945060203d602011614b2a57614b1b8183611649565b925f614b94565b5f52610165602052600160405f2001546001600160401b0390818116918215159283614c32575b5082614c2557505090565b909150429160401c161190565b42101592505f614c1a565b90604051916020830152602082526107648261162e565b9291614c5f82612da5565b91614c6d6040519384611649565b829481845260208094019160051b81019283116103f857905b828210614c935750505050565b81358152908301908301614c86565b949095939291610164548611614fb357614d25610ed5614cce613ce9895f5261016560205260405f2090565b60e0810151604080513360208201908152818301889052606082018a90529199939793614d20929091614d119190614d098160808101614784565b519020614c3d565b60208151910120933691614c54565b615afa565b614fa257614d4c614d4060608401516001600160681b031690565b6001600160681b031690565b808403614f9b575b7f000000000000000000000000000000000000000000000000000000000000000090614d848961449b8484612f19565b3403614f6b575050614da9614da0608084015163ffffffff1690565b63ffffffff1690565b90818103614f63575b50335f90815261016660205260409020614de2908890614ddc9089905b905f5260205260405f2090565b54612f19565b11614f525760a081019063ffffffff9182614e01825163ffffffff1690565b1615159182614f19575b5050614f0857335f9081526101666020526040902086939291614e7191614e33908890614dcf565b8581540190556142c46002614e51895f5261016560205260405f2090565b01918616614e67835463ffffffff9060401c1690565b0163ffffffff1690565b614e7b833361538b565b614e8483615708565b614e908361282a6154a4565b82516001815260208101829052604081019690965295869533905f80516020615e3b83398151915290606090a48251614ecb575b5050505090565b7fb9490aee663998179ad13f9e1c1eb6189c71ad1a9ec87f33ad2766f98d9a268a905180614efc3095339583614444565b0390a4805f8080614ec4565b8251630e5092e960e11b8152600490fd5b614f4a919250614f3f614f39614da060c0614da094015163ffffffff1690565b8a612f19565b925163ffffffff1690565b105f80614e0b565b825163a7b32bb160e01b8152600490fd5b90505f614db2565b614f7d8961449b610d6f948994612f19565b905163350e0bcf60e11b815260048101919091529081906024820190565b5082614d54565b83516342db872960e11b8152600490fd5b60405163038eae7b60e61b8152600490fd5b6065545f19810180614fd5575050565b81106105d55760407f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c91815190600182526020820152a1565b6040519061501b826115f8565b5f6040838281528260208201520152565b90604051615039816115f8565b91546001600160a01b038116835260a081901c6001600160401b0316602084015260e01c60ff1615156040830152565b61507161500e565b5060018180821115615090575b604051636f96cda160e11b8152600490fd5b60655481101561507e576150af6150b4915f52606960205260405f2090565b61502c565b6150c4610ed56040830151151590565b1561507e5780516001600160a01b031661511f575090815b6150e6578061507e565b5f1901906150ff6150af835f52606960205260405f2090565b8051615113906001600160a01b0316610f04565b61511f575090816150dc565b91505090565b60405190615132826115f8565b60278252660819985a5b195960ca1b6040837f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c60208201520152565b90610637915f8061517d615125565b93602081519101845af461518f613113565b91615d41565b6001600160401b03917f00000000000000000000000000000000000000000000000000000000000000009190600190428516825b1561537e575b5f95858411156153775785945b606554976001600160a01b038216978815615366578715615354576152ae84891661525661521a8660018060a01b03165f52606a60205260405f2090565b61523c8361522f83546001600160401b031690565b016001600160401b031690565b6001600160401b03166001600160401b0319825416179055565b6001600160a01b0385165f908152606a60205260409020615287909161522f83546001600160401b039060401c1690565b67ffffffffffffffff60401b82549160401b169067ffffffffffffffff60401b1916179055565b6152e3836152c48c5f52606960205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b6152fe856152f98c5f52606960205260405f2090565b613142565b878a019560015b15615329575b5f60018c019b8b5f5f80516020615e1b8339815191528180a4615305565b868b1061530b57949961534994995061282a919650979297969196606555565b9295909194956151c9565b60405163b562e8dd60e01b8152600490fd5b604051622e076360e81b8152600490fd5b83946151dc565b826151cf57509350505050565b6001600160401b03927f0000000000000000000000000000000000000000000000000000000000000000929042851660015b15615497575b5f95858411156154905785945b606554976001600160a01b0382169788156153665787156153545761540e84891661525661521a8660018060a01b03165f52606a60205260405f2090565b615424836152c48c5f52606960205260405f2090565b61543a856152f98c5f52606960205260405f2090565b878a019560015b15615465575b5f60018c019b8b5f5f80516020615e1b8339815191528180a4615441565b868b1061544757949961548594995061282a919650979297969196606555565b9295909194956153bd565b83946153d0565b826153c357509350505050565b6065545f1981019081116105d55790565b6001600160a01b0381165f908152610166602090815260408083206001845290915280822054600283529120548101919082106105d5576001600160a01b0381165f9081526101666020526040902061550d9061275c565b5482018092116105d5576001600160a01b0381165f9081526101666020526040902061553890612792565b5482018092116105d5576001600160a01b03165f90815261016660205260409020615562906127c8565b5481018091116105d55790565b1561557657565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fd5b6155e860ff5f5460081c166155e38161556f565b61556f565b8051906001600160401b0382116115d75761560d82615608606754611578565b613f3a565b602090816001601f851114615654575091806156429261564a95945f926140be5750508160011b915f199060031b1c19161790565b606755614063565b6107646001606555565b60675f529190601f1984167f9787eeb91fe3101235e4a76063c7023ecb40f923f97916639c598592fa30d6ae935f905b8282106156c557505091600193918561564a979694106156ad575b505050811b01606755614063565b01515f1960f88460031b161c191690555f808061569f565b80600186978294978701518155019601940190615684565b61076460ff5f5460081c1661556f565b61570160ff5f5460081c166155e38161556f565b600160fb55565b60606157557f6f8da53cfedb8cc4f7935c3629624e50b63053c93bb2cad246aa4d3a2ba7d4ce927f0000000000000000000000000000000000000000000000000000000000000000612f60565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165f80808085857f0000000000000000000000000000000000000000000000000000000000000000f1906157b0613113565b50604051928352602083015215156040820152a1565b6157cf83615069565b80516001600160a01b03808416939291811684900361599357833314801561596c575b8015615958575b1561145d578416938415615946576158b790615815848861461d565b6001600160a01b0384165f908152606a602052604090206158449061523c6112ec82546001600160401b031690565b6001600160a01b0381165f908152606a602052604090206158739061523c61132b82546001600160401b031690565b6158a7615888885f52606960205260405f2090565b80546001600160a01b0319166001600160a01b03909316929092178255565b6001600160401b03421690613142565b60018501906158ce825f52606960205260405f2090565b80549092906158e5906001600160a01b0316610f04565b15615902575b505050505f80516020615e1b8339815191525f80a4565b60655403615911575b806158eb565b81546001600160a01b0319166001600160a01b0390931692909217815561593e9161144f90602090611441565b5f808061590b565b604051633a954ecd60e21b8152600490fd5b5033615966610f0488612f26565b146157f9565b5061598e610ece33610eb98660018060a01b03165f52606c60205260405f2090565b6157f2565b60405162a1148160e81b8152600490fd5b805191908290602001825e015f815290565b906159c082615a6b565b6001600160a01b0382167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115801590615a12575b615a01575050565b615a0f915f8061517d615125565b50565b505f6159f9565b90615a2382615a6b565b6001600160a01b0382167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115801590615a6357615a01575050565b5060016159f9565b803b15615a9f575f80516020615ddb83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b929091905f915b8451831015615b4357615b1483866134e4565b519081811015615b32575f52602052600160405f205b920191615b01565b905f52602052600160405f20615b2a565b915092501490565b908160209103126103f85751610637816103e6565b6001600160a01b03918216815291166020820152604081019190915260806060820181905261063792910190610602565b92602091615bb9935f604051809681958294630a85bd0160e11b9a8b85523360048601615b60565b03926001600160a01b03165af15f9181615c08575b50615bfa57615bdb613113565b80519081615bf5576040516368d2bf6b60e11b8152600490fd5b602001fd5b6001600160e01b0319161490565b615c2b91925060203d602011615c32575b615c238183611649565b810190615b4b565b905f615bce565b503d615c19565b8051600110156123d75760210190565b9081518110156123d7570160200190565b80156105d5575f190190565b15615c6d57565b606460405162461bcd60e51b815260206004820152602060248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b60405190608082018281106001600160401b038211176115d7576040526042825260603660208401376030615ce583613497565b536078615cf183615c39565b536041905b60018211615d0957610637915015615c66565b600f81169060108210156123d757615d3b916f181899199a1a9b1b9c1cb0b131b232b360811b901a6147dd8486615c49565b90615cf6565b91929015615da35750815115615d55575090565b3b15615d5e5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015615db65750805190602001fd5b60405162461bcd60e51b815260206004820152908190610d6f90602483019061060256fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca581b17bfc4d6578e300cafbf34fd2dc1fef0270d8c73f88a99dcde2859a6639ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef37a74b6f706970809184cf2c4d73c7baca71e081c7e9fd07291f31ba4618d10aa2646970667358221220f2fc6126532588fb23a74a8342c585cdfd6519ff549df0c57708db3bb0a11f7764736f6c634300081900330000000000000000000000003cddca98e2b7531754000c0571d2b499d3ddcec2000000000000000000000000000000000000000000000000000110d9316ec0000000000000000000000000002730b29acbbcd34a59b720338e8d06619fd71aca