0 txs
220 calls
constructor
constructor()
functions
ADDRESS_UPDATE_DELAY
viewfunction ADDRESS_UPDATE_DELAY() view returns (uint256)
admin1
viewfunction admin1() view returns (address)
admin2
viewfunction admin2() view returns (address)
AUCTION_DELIST_DURATION_PERCENTAGE
viewfunction AUCTION_DELIST_DURATION_PERCENTAGE() view returns (uint256)
AUCTION_EXTENSION_PERCENTAGE
viewfunction AUCTION_EXTENSION_PERCENTAGE() view returns (uint256)
auctionCancelBatchSize
viewfunction auctionCancelBatchSize() view returns (uint256)
BID_WITHDRAW_DURATION_PERCENTAGE
viewfunction BID_WITHDRAW_DURATION_PERCENTAGE() view returns (uint256)
bids
viewfunction bids(uint256, address) view returns (uint256 amount, uint256 timestamp)
getAdminAddresses
viewfunction getAdminAddresses() view returns (address _owner, address _admin1, address _admin2)
getAuctionDetails
viewfunction getAuctionDetails(uint256 auctionId) view returns (bool exists, uint256 itemId, address nftContract, uint256 tokenId, string termsURI, address seller, uint256 startingPrice, uint256 endTime, uint256 originalDuration, address highestBidder, uint256 highestBid, uint256 highestBidSalesTax, bool ended, uint256 listingTime, uint256 extensionCount, uint256 uniqueBidders, uint256 totalBids)
getContractParameters
viewfunction getContractParameters() view returns (address, uint256, uint256, address, address, address, uint256, uint256, uint256, uint256, uint256, uint256, address)
getEmergencyCancellationStatus
viewfunction getEmergencyCancellationStatus() view returns (bool inProgress, uint256 lastProcessed, uint256 total)
getMarketItemCounts
viewfunction getMarketItemCounts() view returns (uint256 activeMarketItems, uint256 activeLicensingItems, uint256 totalMarketItems, uint256 activeAuctions, uint256 totalAuctions, uint256 totalSoldItems)
getMarketItemDetails
viewfunction getMarketItemDetails(uint256 itemId) view returns (uint256 auctionId, address nftContract, uint256 tokenId, string termsURI, uint256 licenseTokenId, address seller, bool exists, bool sold, uint256 price, uint256 listingTime, uint8 listingType)
getMarketItemForNFT
viewfunction getMarketItemForNFT(address nftContract, uint256 tokenId) view returns (uint256 itemId, uint256 auctionId, uint8 listingType)
getMarketItems
viewfunction getMarketItems(uint256 offset, uint256 limit) view returns (tuple[])
getPendingReturnsForAuction
viewfunction getPendingReturnsForAuction(uint256 auctionId, address bidder) view returns (uint256)
getTotalPendingReturns
viewfunction getTotalPendingReturns(address bidder) view returns (uint256)
licensingContract
viewfunction licensingContract() view returns (address)
listingFee
viewfunction listingFee() view returns (uint256)
listingFeeRecipient
viewfunction listingFeeRecipient() view returns (address)
MAX_AUCTION_EXTENSIONS
viewfunction MAX_AUCTION_EXTENSIONS() view returns (uint256)
MAX_EXTENSION_DURATION
viewfunction MAX_EXTENSION_DURATION() view returns (uint256)
maxAuctionDuration
viewfunction maxAuctionDuration() view returns (uint256)
minAuctionDuration
viewfunction minAuctionDuration() view returns (uint256)
MINIMUM_BID_INCREASE_PERCENTAGE
viewfunction MINIMUM_BID_INCREASE_PERCENTAGE() view returns (uint256)
MINIMUM_DELIST_TIME
viewfunction MINIMUM_DELIST_TIME() view returns (uint256)
MINIMUM_HOLD_TIME
viewfunction MINIMUM_HOLD_TIME() view returns (uint256)
MINIMUM_WITHDRAW_TIME
viewfunction MINIMUM_WITHDRAW_TIME() view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
paymentToken
viewfunction paymentToken() view returns (address)
pendingAddressUpdates
viewfunction pendingAddressUpdates(bytes32) view returns (address newAddress, uint256 timestamp)
ROLE_LISTING_FEE_RECIPIENT
viewfunction ROLE_LISTING_FEE_RECIPIENT() view returns (bytes32)
ROLE_SALES_FEE_RECIPIENT
viewfunction ROLE_SALES_FEE_RECIPIENT() view returns (bytes32)
ROLE_SALES_TAX_RECIPIENT
viewfunction ROLE_SALES_TAX_RECIPIENT() view returns (bytes32)
salesFeeBasisPoints
viewfunction salesFeeBasisPoints() view returns (uint256)
salesFeeRecipient
viewfunction salesFeeRecipient() view returns (address)
salesTaxRecipient
viewfunction salesTaxRecipient() view returns (address)
cancelAddressUpdate
nonpayablefunction cancelAddressUpdate(bytes32 role)
cancelAuction
nonpayablefunction cancelAuction(uint256 auctionId)
confirmAddressUpdate
nonpayablefunction confirmAddressUpdate(bytes32 role)
createAuction
nonpayablefunction createAuction(address nftContract, uint256 tokenId, string termsURI, uint256 startingPrice, uint256 duration)
createMarketItem
nonpayablefunction createMarketItem(address nftContract, uint256 tokenId, uint256 price, uint8 listingType, string tokenURI, string termsURI)
createMarketSale
nonpayablefunction createMarketSale(uint256 itemId, uint256 salesTaxBasisPoints)
delistAuction
nonpayablefunction delistAuction(uint256 auctionId)
delistMarketItem
nonpayablefunction delistMarketItem(uint256 itemId)
emergencyBidsWithdraw
nonpayablefunction emergencyBidsWithdraw()
emergencyCancelAuctionsBatch
nonpayablefunction emergencyCancelAuctionsBatch()
emergencyWithdrawAllContractBalance
nonpayablefunction emergencyWithdrawAllContractBalance()
endAuction
nonpayablefunction endAuction(uint256 auctionId)
initialize
nonpayablefunction initialize(address _admin1, address _admin2, address _paymentToken, uint256 _initialListingFee, address _initialListingFeeRecipient, uint256 _initialSalesFeeBasisPoints, address _initialSalesFeeRecipient, address _initialSalesTaxRecipient, uint256 _initialMinAuctionDuration, uint256 _initialMaxAuctionDuration, uint256 _initialAuctionCancelBatchSize)
initiateEmergencyCancellation
nonpayablefunction initiateEmergencyCancellation()
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
pause
nonpayablefunction pause()
placeBid
nonpayablefunction placeBid(uint256 auctionId, uint256 bidAmount, uint256 salesTaxBasisPoints)
proposeAddressUpdate
nonpayablefunction proposeAddressUpdate(bytes32 role, address newAddress)
setAdmin
nonpayablefunction setAdmin(uint256 adminNumber, address newAdmin)
setAuctionCancelBatchSize
nonpayablefunction setAuctionCancelBatchSize(uint256 _newBatchSize)
setAuctionDurationLimits
nonpayablefunction setAuctionDurationLimits(uint256 newMin, uint256 newMax)
setLicensingContract
nonpayablefunction setLicensingContract(address _newLicensingContract)
setListingFee
nonpayablefunction setListingFee(uint256 _newListingFee)
setPaymentTokenContract
nonpayablefunction setPaymentTokenContract(address _newTokenContract)
setSalesFeeBasisPoints
nonpayablefunction setSalesFeeBasisPoints(uint256 _newBasisPoints)
unpause
nonpayablefunction unpause()
updateMarketItemPrice
nonpayablefunction updateMarketItemPrice(uint256 itemId, uint256 newPrice)
withdrawAllPendingReturns
nonpayablefunction withdrawAllPendingReturns()
withdrawBid
nonpayablefunction withdrawBid(uint256 auctionId)
withdrawPendingReturns
nonpayablefunction withdrawPendingReturns(uint256 auctionId)
events
AddressUpdateCancelled
event AddressUpdateCancelled(bytes32 indexed role, address caller)
AddressUpdateProposed
event AddressUpdateProposed(bytes32 indexed role, address newAddress, address oldAddress, address caller)
AdminUpdated
event AdminUpdated(address indexed oldAdmin, address indexed newAdmin, uint256 adminNumber, address caller)
AllAuctionsCanceled
event AllAuctionsCanceled(address caller)
AllPendingReturnsWithdrawn
event AllPendingReturnsWithdrawn(uint256 amount, address caller)
AuctionBatchCanceled
event AuctionBatchCanceled(uint256 indexed lastCanceledAuctionId, uint256 batchSize, address caller)
AuctionCancelBatchSizeUpdated
event AuctionCancelBatchSizeUpdated(uint256 newBatchSize, address caller)
AuctionCanceled
event AuctionCanceled(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, address caller)
AuctionCreated
event AuctionCreated(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, string termsURI, uint256 price, uint256 listingFee, uint256 listingTime, uint256 endTime, address caller)
AuctionDelisted
event AuctionDelisted(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, address caller)
AuctionDurationLimitsUpdated
event AuctionDurationLimitsUpdated(uint256 newMinAuctionDuration, uint256 newMaxAuctionDuration, address caller)
AuctionEnded
event AuctionEnded(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, string termsURI, address seller, address buyer, uint256 amount, uint256 salesFee, uint256 salesTax, address caller)
AuctionExtended
event AuctionExtended(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, uint256 endTime, address caller)
BidPlaced
event BidPlaced(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, uint256 amount, uint256 salesTax, address caller)
BidRefunded
event BidRefunded(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, address bidder, uint256 amount, address caller)
BidRefundFailed
event BidRefundFailed(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, address bidder, uint256 amount, address caller)
BidWithdrawn
event BidWithdrawn(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, uint256 amount, address caller)
EmergencyBidsWithdrawn
event EmergencyBidsWithdrawn(uint256 totalWithdrawAmount, address caller)
EndAuctionFailedSellerNotOwner
event EndAuctionFailedSellerNotOwner(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, address seller, address caller)
Initialized
event Initialized(uint8 version)
LicenseSold
event LicenseSold(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, string termsURI, uint256 licenseTokenId, address seller, uint256 price, uint256 salesFee, uint256 salesTax, uint8 listingType, address caller)
LicensingContractUpdated
event LicensingContractUpdated(address indexed oldLicensingContract, address indexed newLicensingContract, address caller)
ListingFeeRecipientUpdated
event ListingFeeRecipientUpdated(address indexed newRecipient, address indexed oldRecipient, address caller)
ListingFeeUpdated
event ListingFeeUpdated(uint256 newListingFee, address caller)
MarketItemCreated
event MarketItemCreated(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, string termsURI, uint256 licenseTokenId, uint256 price, uint256 listingFee, uint256 listingTime, uint8 listingType, address caller)
MarketItemDelisted
event MarketItemDelisted(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, uint256 licensetokenId, address seller, uint8 listingType, bool isAdminDelisting, address caller)
MarketItemPriceUpdated
event MarketItemPriceUpdated(uint256 indexed itemId, address indexed nftContract, uint256 indexed tokenId, uint256 oldPrice, uint256 newPrice, uint8 listingType, address caller)
MarketItemSold
event MarketItemSold(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, string termsURI, address seller, uint256 price, uint256 salesFee, uint256 salesTax, uint8 listingType, address caller)
MarketSaleFailedSellerNotOwner
event MarketSaleFailedSellerNotOwner(uint256 indexed itemId, address indexed nftContract, uint256 indexed tokenId, uint256 licenseTokenId, address seller, address caller)
Paused
event Paused(address account)
PaymentTokenContractUpdated
event PaymentTokenContractUpdated(address indexed oldTokenContract, address indexed newTokenContract, address caller)
PendingReturnWithdrawFailed
event PendingReturnWithdrawFailed(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, uint256 amount, address caller)
PendingReturnWithdrawn
event PendingReturnWithdrawn(uint256 indexed itemId, uint256 indexed auctionId, address indexed nftContract, uint256 tokenId, uint256 amount, address caller)
PlaceBidFailedSellerNotOwner
event PlaceBidFailedSellerNotOwner(uint256 indexed auctionId, uint256 indexed itemId, address indexed nftContract, uint256 tokenId, address seller, address caller)
SalesFeeBasisPointsUpdated
event SalesFeeBasisPointsUpdated(uint256 newBasisPoints, address caller)
SalesFeeRecipientUpdated
event SalesFeeRecipientUpdated(address indexed newRecipient, address indexed oldRecipient, address caller)
SalesTaxRecipientUpdated
event SalesTaxRecipientUpdated(address indexed newRecipient, address indexed oldRecipient, address caller)
Unpaused
event Unpaused(address account)
errors
AuctionHasEnded
error AuctionHasEnded()
AuctionNotExists
error AuctionNotExists()
BidsActive
error BidsActive()
ContractNotPaused
error ContractNotPaused()
DelayNotPassed
error DelayNotPassed()
DelistWindowPassed
error DelistWindowPassed()
DurationNotPassed
error DurationNotPassed()
EmergencyCancellationInProgress
error EmergencyCancellationInProgress()
InsufficientAllowance
error InsufficientAllowance()
InsufficientFunds
error InsufficientFunds()
InvalidAddress
error InvalidAddress()
InvalidBasisPoints
error InvalidBasisPoints()
InvalidBidAmount
error InvalidBidAmount()
InvalidCancelBatchSize
error InvalidCancelBatchSize()
InvalidDuration
error InvalidDuration()
InvalidListingFee
error InvalidListingFee()
InvalidPrice
error InvalidPrice()
InvalidSalesFee
error InvalidSalesFee()
InvalidTaxRate
error InvalidTaxRate()
ItemAlreadySold
error ItemAlreadySold()
NoFundsToWithdraw
error NoFundsToWithdraw()
NoPendingUpdate
error NoPendingUpdate()
NotAuthorized
error NotAuthorized()
NotNFTOwner
error NotNFTOwner()
NotTheOnlyBidder
error NotTheOnlyBidder()
TransferFailed
error TransferFailed()
WithdrawWindowPassed
error WithdrawWindowPassed()
creation bytecode
0x60808060405234620000c6576000549060ff8260081c1662000074575060ff8082160362000038575b604051615ff39081620000cc8239f35b60ff90811916176000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160ff8152a13862000028565b62461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b600080fdfe61012080604052600436101561001457600080fd5b60003560e01c90816306a8f8a214613f7b5750806307a6543e14613ece5780630c38400914613e285780630cdda36a14613e0c5780630eaaf4c814613b90578063115976c414613b6757806311eb8cbf14613b4957806312cf479214613b15578063131dbd0914613a89578063142e8e2514613959578063150b7a02146138f357806318a556fe146112575780631a30d302146138ca5780631a7c14e31461373d578063273a7ed8146136f157806329c48ef51461371f5780632a27cb97146136f65780632c8ebec8146136f15780632c9fb8751461357f5780633013ce291461355657806331f3c1ef1461353957806337553386146134cb5780633923fa3d146134865780633f1ffcec146134355780633f4ba83a146133bf578063463898f41461324357806348c9581e1461322557806354134876146132075780635825be9a1461304d5780635c975abb1461302a5780635d80f3f21461300d5780635e62be2514612fdb57806364ddfa2914612f9a57806365343e2414612f715780636a1b7ecc14612f535780636b3f2ecd14612f2a57806379d6be5014612e815780637c76e3fe14612e655780638456cb5914612dce57806388d9e84c14612cf15780638a8f3a0a14612c485780638da5cb5b14612c1f57806396b5a755146128e957806398ddffa2146127e85780639c0d7e36146127bf5780639c56f40c146127465780639e85296c1461228a578063a1c11ca814612263578063ad21479514611c77578063ae13a31714611b14578063b032cce814611ad1578063b86e818714611aa8578063b9a2de3a14611a7c578063bf4db07514611257578063bfacd9ed146119e4578063c522c13d14611923578063c68a0e16146117cf578063cdcbcea114611787578063cea33d3c14611567578063cfb3d5a21461125c578063d3967a6514611257578063d4f53310146111d2578063e0e57760146110bb578063e37237e214610fd4578063eb19876414610fb7578063f20e5e3514610e59578063f29fbb2714610e30578063ff2d7e3f146106c75763ff75f4491461031757600080fd5b346106c25760003660031901126106c257610330615c39565b610338615c8f565b60ff8060655416156106b05760cb5460009160015b82811115610468578380156104565760d15460405163a9059cbb60e01b81529060209082906001600160a01b03168160008161038d883360048401614137565b03925af190811561044a5760009161041b575b50156103e2576103d97f4cea9bccbc21c0f2437370ed5f6700a44910448a6d91bf9446f7683aee79d9a39160405191829133908361425b565b0390a160018055005b60405162461bcd60e51b815260206004820152601160248201527015da5d1a191c985dd85b0819985a5b1959607a1b6044820152606490fd5b61043d915060203d602011610443575b610435818361402b565b810190614283565b826103a0565b503d61042b565b6040513d6000823e3d90fd5b6040516367e3990d60e01b8152600490fd5b80600052602060dd8152604060002060df808352604060002033600052835260406000205480610686575b505083600c82015416156104b2575b50506104ad90614274565b61034d565b8260005260de91828152604060002033600052815260406000205492836104db575b50506104a2565b91939496836104ed91979294976141d0565b6000868152928452604080842033808652908652908420848155600101939093556009850180546001600160a01b039485821614610665575b5050600f8501979160005b89548082101561064057610545828c6141dd565b9054600391821b1c8716331461055f575050600101610531565b60009b9896949b9a92939a999791959919860195861161062a57886105cf600080516020615f3e833981519152956105b1886105d4956105a46104ad9f9c8f9d6141dd565b9054911b1c1691846141dd565b90919060018060a01b038084549260031b9316831b921b1916179055565b61420b565b33600052601086019052604060002060ff198154169055601185016105f9815461424e565b905560036001860154936002870154169501549061061e60405192839233918461418f565b0390a4903880806104d4565b634e487b7160e01b600052601160045260246000fd5b5050966104ad9593919850600080516020615f3e8339815191529087959793976105d4565b6001600160a01b03191690556000600a8601819055600b8601553880610526565b61069091976141d0565b958360005282526040600020336000528252600060408120553880610493565b60405163dcdde9dd60e01b8152600490fd5b600080fd5b346106c25760a03660031901126106c2576106e0613fcb565b6044356001600160401b0381116106c2576106ff903690600401614119565b610707615c39565b61070f615cd8565b60d754608435108015610e23575b610e11576040516331a9108f60e11b81526024803560048301526020908290816001600160a01b0387165afa90811561044a57600091610df2575b50336001600160a01b0390911603610de05760405163e985e9c560e01b81523360048201523060248201526020816044816001600160a01b0387165afa90811561044a57600091610dc1575b508015610d44575b6107b590614e28565b60d25480610cb7575b50600160c95401908160c955600160cb5401908160cb556040516107e181613ffc565b8381528260208201526000604082015260018060a01b038516606082015260243560808201528160a08201523360c0820152600060e08201526064356101008201524261012082015260016101408201528360005260dc6020526040600020908051825560208101516001830155604081015160028301556003820160018060a01b0360608301511660018060a01b03198254161790556080810151600483015560a08101518051906001600160401b038211610bd7576108a56005850154614337565b601f8111610c82575b50602090601f8311600114610c0e5791806108e5926101409594600092610c03575b50508160011b916000199060031b1c19161790565b60058401555b60c08101516006840180546001600160a01b039283166001600160a01b03199182161790915560e08301516007860180549190931691161790556101008101516008840155610120810151600984015501516003811015610bed57600a91909101805460ff191660ff909216919091179055600082815260dd60205260409020828155600181018490556002810180546001600160a01b0387166001600160a01b0319909116179055602435600382015581516001600160401b038111610bd7576109b96004830154614337565b601f8111610b97575b506020601f8211600114610b01576011610ac293610a1b847f8aa0e301b3f54d038a85771830a26ff68f6948d7ab61c7c7753c59267cc3630b97956000958691610af6575b508160011b916000199060031b1c19161790565b60048201555b6005810180546001600160a01b031916331790556064356006820155610a49608435426141d0565b600782015560843560088201556009810160018060a01b0319815416905582600a82015582600b820155600c810160ff19815416905542600d82015582600e8201550155600160cc540160cc5560d25495610aa6608435426141d0565b604051938493602435855260e0602086015260e08501906140d9565b6064356040850152606084019890985242608084015260a08301523360c08301526001600160a01b0316950390a460018055005b90508601518c610a07565b6004830160005260206000209060005b601f1984168110610b7f5750610ac2936001846000946011947f8aa0e301b3f54d038a85771830a26ff68f6948d7ab61c7c7753c59267cc3630b9997601f19811610610b67575b5050811b016004820155610a21565b870151861960f88460031b161c191690558b80610b58565b90916020600181928589015181550193019101610b11565b610bc790600484016000526020600020601f840160051c81019160208510610bcd575b601f0160051c0190614371565b866109c2565b9091508190610bba565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b015190508a806108d0565b906005850160005260206000209160005b601f1985168110610c6a57509183916001936101409695601f19811610610c51575b505050811b0160058401556108eb565b015160001960f88460031b161c19169055898080610c41565b91926020600181928685015181550194019201610c1f565b610cb190600586016000526020600020601f850160051c81019160208610610bcd57601f0160051c0190614371565b886108ae565b60d15460d3546040516323b872dd60e01b81529260209284926001600160a01b039182169284926000928492610cf492909116336004850161447d565b03925af190811561044a57600091610d25575b5015610d1357826107be565b6040516312171d8360e31b8152600490fd5b610d3e915060203d60201161044357610435818361402b565b83610d07565b5060405163020604bf60e21b81526024803560048301526020908290816001600160a01b0387165afa801561044a576107b591600091610d92575b506001600160a01b0316301490506107ac565b610db4915060203d602011610dba575b610dac818361402b565b81019061443e565b84610d7f565b503d610da2565b610dda915060203d60201161044357610435818361402b565b836107a4565b604051631022318760e21b8152600490fd5b610e0b915060203d602011610dba57610dac818361402b565b83610758565b604051637616640160e01b8152600490fd5b5060d8546084351161071d565b346106c25760003660031901126106c2576020604051600080516020615f1e8339815191528152f35b346106c25760203660031901126106c25760043560005260dd6020526040600020600d8101549060018101546101005260018060a01b038060028301541660a052600382015460c0528060058301541692600683015491600784015490600885015490600986015416600a86015490600b8701549260ff600c8901541694600e89015497610f4b6004610f0a600f8d01549c6011810154608052610f036040518094819301614a25565b038261402b565b60405160e0526102208a151560e0515261010051602060e051015260a051604060e051015260c051606060e051015280608060e051015260e05101906140d9565b9a60a060e051015260c060e051015260e08051015261010060e051015261012060e051015261014060e051015261016060e0510152151561018060e05101526101a060e05101526101c060e05101526101e060e051015260805161020060e051015260e051900360e051f35b346106c25760003660031901126106c25760206040516102588152f35b346106c25760003660031901126106c25760c95460008060015b83811115611026575060c09260cc5460cb549160ca5493604051958652602086015260408501526060840152608083015260a0820152f35b600081815260dc6020818152604090922060068101546001600160a01b039190821661105f575b5050505061105a90614274565b610fee565b600701541615611071575b808061104d565b909361107c90614274565b93826000525260ff600a60406000200154166003811015610bed576002146110a6575b848061106a565b906110b361105a91614274565b91905061109f565b346106c25760003660031901126106c25760ce546001600160a01b039081169033821480156111c5575b80156111b8575b6110f590614152565b60d15416604051916370a0823160e01b83523060048401526020928381602481865afa90811561044a5760009161118b575b50801561045657611152928492600060405180968195829463a9059cbb60e01b845260048401614137565b03925af191821561044a5760009261116e575b505015610d1357005b6111849250803d1061044357610435818361402b565b8180611165565b90508381813d83116111b1575b6111a2818361402b565b810103126106c2575184611127565b503d611198565b5060d054811633146110ec565b508060cf541633146110e5565b346106c2576020806003193601126106c2576111ec613fcb565b60cb5460009290916001600160a01b03169060015b8381111561121457602085604051908152f35b8060005260df8252604060002083600052825260406000205480611242575b5061123d90614274565b611201565b6112509061123d92966141d0565b9490611233565b614092565b346106c2576101603660031901126106c257611276613fcb565b61127e613fb5565b604435906001600160a01b03821682036106c2576084356001600160a01b03811681036106c25760c4356001600160a01b03811681036106c25760e435916001600160a01b03831683036106c2576000549460ff8660081c16159586809761155a575b8015611543575b156114e75760ff198116600117600055866114d5575b506000549661134460ff8960081c1661131681615ebd565b61131f81615ebd565b6001805561132c81615ebd565b61133581615ebd565b60ff1960655416606555615ebd565b6001600160a01b03169485156114b1576001600160a01b031680156114b1576001600160a01b038216156114b1576001600160a01b038316156114b15761138860a435116114c3576001600160a01b038416156114b1576001600160a01b038516156114b157611c206101043510610e115761010435610124351115610e11576276a7006101243511610e1157610144351561149f5760018060a01b031995338760ce54161760ce558660cf54161760cf558560d054161760d05560018060a01b03168460d154161760d15560643560d25560018060a01b03168360d354161760d35560a43560d55560018060a01b03168260d454161760d45560018060a01b03169060d654161760d6556101043560d7556101243560d8556101443560d95561146a57005b61ff0019166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1005b60405163caa4529360e01b8152600490fd5b60405163e6c4247b60e01b8152600490fd5b604051634bc8818d60e01b8152600490fd5b61ffff191661010117600055876112fe565b60405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608490fd5b50303b1580156112e85750600160ff8216146112e8565b50600160ff8216106112e1565b346106c2576020806003193601126106c25760ce546001600160a01b0391906004359083163314801561177a575b801561176d575b6115a590614152565b8060005260e0825260406000208381541693841561175b5760018201546202a300810180911161062a574210611749578060d35416918160d4541660d654600080516020615f1e833981519152861460001461165457505060e0955054168060018060a01b031960d354161760d3557f0e9a5a32e19719472e7cb3bd8c36eb65dfd1e391bc5633d3cfc0f4e93c89f01d84604051338152a35b6000525260006001604082208281550155600080f35b909350600080516020615f5e83398151915285036116b2575060e0955054168060018060a01b031960d454161760d4557f7963ae943d9641b634840b56e4c979190468ff8794291aceead96a926362cf7584604051338152a361163e565b92505093600080516020615f7e8339815191528314600014611715576001600160a01b03198216811760d65560405133815260e095909216917f9ad49de13a22f74f4c53dd6045338efbffc0f40cdf199e0d21224faf06b852ac908590a361163e565b60405162461bcd60e51b815260206004820152600c60248201526b496e76616c696420726f6c6560a01b6044820152606490fd5b6040516364037fb760e11b8152600490fd5b6040516319b2c6ef60e31b8152600490fd5b5060d0548316331461159c565b508260cf54163314611595565b346106c25760403660031901126106c2576117a0613fb5565b60043560005260df60205260406000209060018060a01b03166000526020526020604060002054604051908152f35b346106c25760203660031901126106c2576004356117eb615c39565b6117f3615cd8565b600081815260dc6020526040902060078101546001600160a01b03908116611911578060ce541633148015611904575b80156118f7575b8160068401541633811415806118ef575b6118dd5760c07f89286b87817869de907bda6acb681e5f79865b3fa1f74bedda22f9d1aaf9255d91838794906118d3575b6118aa6001880154966003890154169760048101549360ff600a600284015493015416916040519586526020860152604085015260608401906140cc565b151560808201523360a0820152a460005260dc6020526118cd60406000206143d2565b60018055005b508033141561186c565b60405163ea8e4eb560e01b8152600490fd5b50811561183b565b508060d05416331461182a565b508060cf54163314611823565b60405163898c8e6760e01b8152600490fd5b346106c25760203660031901126106c25760ce546004359061196190336001600160a01b03918216149081156119d5575b81156119c7575b50614152565b611388811180156119bf575b6119ad576119a8817fed5072b486d890371f081f989230c7a948bbaef620b21b1f1a81d27013ac22689260d55560405191829133908361425b565b0390a1005b60405163800c7e9160e01b8152600490fd5b50600061196d565b905060d0541633148361195b565b80915060cf5416331490611954565b346106c25760003660031901126106c2576101a060018060a01b038060d154169060d2549060d5548160d354168260d454168360d654169060d7549260d8549460d9549660cd541697604051998a5260208a015260408901526060880152608087015260a086015260c085015260e0840152600a610100840152600a610120840152600a610140840152610160830152610180820152f35b346106c25760203660031901126106c257611a95615c39565b611a9d615cd8565b6118cd60043561564c565b346106c25760003660031901126106c25760d6546040516001600160a01b039091168152602090f35b346106c25760203660031901126106c25760043560005260e060205260406000206001808060a01b0382541691015490611b1060405192839283614137565b0390f35b346106c257611b2236613f9f565b611b2a615c39565b611b32615cd8565b8160005260209160dc835260406000209160018060a01b0393846006850154163303610de05760088401918083549355600a85019560ff8754166003811015610bed57600214611bd8575b6080927fa55701bd3811959cdea77e84a5b8020d8e5e65f72a27ee93e48ee6afe8e8fd0b949260ff6004611bcb9460038b0154169901549954169160405194855284015260408301906140cc565b336060820152a460018055005b600083611c078360cd541660028a0154604051948580948193631794d9df60e21b83528a33916004850161418f565b03925af190811561044a57600091611c5a575b50611b7d5760405162461bcd60e51b8152600481018490526013602482015272141c9a58d9481d5c19185d194819985a5b1959606a1b6044820152606490fd5b611c719150843d861161044357610435818361402b565b88611c1a565b346106c25760c03660031901126106c257611c90613fcb565b600360643510156106c2576084356001600160401b0381116106c257611cba903690600401614119565b9060a4356001600160401b0381116106c257611cda903690600401614119565b91611ce3615c39565b611ceb615cd8565b6040516331a9108f60e11b81526024803560048301526020908290816001600160a01b0387165afa90811561044a57600091612244575b50336001600160a01b0390911603610de057600160c95401908160c955600060026064351460001461216457506020611dae611dc09260018060a01b0360cd5416906000604051809681958294636b10dc6f60e01b845233600485015260018060a01b038c1660248501526024356044850152604435606485015260e0608485015260e48401906140d9565b8281036003190160a48401528b6140d9565b8860c483015203925af190811561044a57600091612132575b50925b60d254806120b7575b5060405190611df382613ffc565b828252600060208301819052604083018690526001600160a01b0385166060840152602435608084015260a083018290523360c084015260e083015260443561010083015242610120830152611e4f6064356101408401614bb0565b8260005260dc60205260406000208251815560208301516001820155604083015160028201556003810160018060a01b0360608501511660018060a01b03198254161790556080830151600482015560a08301518051906001600160401b038211610bd757611ec16005840154614337565b601f8111612082575b50602090601f831160011461200c5782600a936101409593611f02936000926120015750508160011b916000199060031b1c19161790565b60058201555b60c08501516006820180546001600160a01b039283166001600160a01b03199182161790915560e0870151600784018054919093169116179055610100850151600882015561012085015160098201559190930151920191906003821015610bed576000947f0dd4662f81edc32f268c050d6b6bdcaec3b2d7f6479e1efef899d2bce416b66f93611fc09360ff8019835416911617905560d254604051938493602435855261010060208601526101008501906140d9565b976040840152604435606084015260808301524260a0830152611fe860c083016064356140cc565b3360e08301526001600160a01b0316950390a460018055005b015190508b806108d0565b906005840160005260206000209160005b601f198516811061206a5750926101409492600192600a9583601f19811610612051575b505050811b016005820155611f08565b015160001960f88460031b161c191690558a8080612041565b9192602060018192868501518155019401920161201d565b6120b190600585016000526020600020601f850160051c81019160208610610bcd57601f0160051c0190614371565b88611eca565b60d15460d3546040516323b872dd60e01b81529260209284926001600160a01b0391821692849260009284926120f492909116336004850161447d565b03925af190811561044a57600091612113575b5015610d135784611de5565b61212c915060203d60201161044357610435818361402b565b85612107565b90506020813d60201161215c575b8161214d6020938361402b565b810103126106c2575184611dd9565b3d9150612140565b60405163e985e9c560e01b8152336004820152306024820152909491506020816044816001600160a01b0388165afa90811561044a57600091612225575b5080156121b8575b6121b390614e28565b611ddc565b5060405163020604bf60e21b81526024803560048301526020908290816001600160a01b0388165afa801561044a576121b391600091612206575b506001600160a01b0316301490506121aa565b61221f915060203d602011610dba57610dac818361402b565b866121f3565b61223e915060203d60201161044357610435818361402b565b856121a2565b61225d915060203d602011610dba57610dac818361402b565b84611d22565b346106c2576118cd61227436613f9f565b9061227d615c39565b612285615cd8565b614e82565b346106c25760003660031901126106c25760ce546001600160a01b031633148015612732575b801561271e575b6122c090614152565b6122c8615c8f565b60ff60655416156106b05760db5460ff81168015612714575b156126c35760ff191660011760db5560da5460d95461230090826141d0565b9060cb548083116126bb575b506001810180911161062a575b818111156123a457508060da55807f77e825ffbe7f38ee62aafbbcbd2bb0745c08722d44452cc334cbfac5d486ab1061235c60d95460405191829133908361425b565b0390a260cb541461236957005b7fdaffe2bfd09bcd715b3d2ae6a04adfcabc4c2f04eb4557334699ba11c1113a956020604051338152a1600060da5560db805460ff19169055005b8060005260dd6020526040600020600c8101805460ff8116156123d3575b5050506123ce90614274565b612319565b60019060ff959394951916179055600182015460005260dc6020526123fb60406000206143d2565b612403615d1c565b60005b600f8301548110156125e15761241f81600f85016141dd565b9190548560005260de9283602052604060002060018060a01b03838360031b1c166000526020526040600020549384612460575b5050506001915001612406565b6000888152602091825260408082206001600160a01b03600386901b87901c811680855291855282842084815560010184905560d154925163a9059cbb60e01b815295949386939091169183919082906124bf908c9060048401614137565b03925af194851561044a5760019589936000916125c2575b501561252f57600080516020615f9e833981519152908689015492612523888060a01b0360028c0154169660038c01549360405194859433938d8060a01b039160031b1c169085614abb565b0390a45b858080612453565b7ff11fd747bdfb8a50931846fe0cacf080c846822ede6a8541251b7acd9e008071908360005260df6020526040600020878060a01b03868560031b1c1660005260205260406000206125828282546141d0565b905586890154926125ba888060a01b0360028c0154169660038c01549360405194859433938d8060a01b039160031b1c169085614abb565b0390a4612527565b6125db915060203d60201161044357610435818361402b565b8a6124d7565b506009820180546001600160a01b03191690556000600a8301819055600b83018190559192916010840191905b600f850154811015612652578061262a600192600f88016141dd565b838060a01b0391549060031b1c1660005283602052604060002060ff1981541690550161260e565b50926123ce929150612666600f820161441a565b6001810154827fce01c0f23510101cca2ff918bb26382aba649759f8d6ac7526819a968a1571066126b0600360018060a01b0360028701541695015460405191829133908361425b565b0390a49083806123c2565b91508261230c565b60405162461bcd60e51b8152602060048201526024808201527f456d657267656e63792063616e63656c6c6174696f6e206e6f7420696e697469604482015263185d195960e21b6064820152608490fd5b5060da54156122e1565b5060d0546001600160a01b031633146122b7565b5060cf546001600160a01b031633146122b0565b346106c25760203660031901126106c25760ce546004359061278290336001600160a01b03918216149081156119d55781156119c75750614152565b801561149f576119a8817f9d2d9ea2ae356695a8ab5a41eb0ad8ae11a8a8876db41935e9ae86610b30c1519260d95560405191829133908361425b565b346106c25760003660031901126106c2576020604051600080516020615f5e8339815191528152f35b346106c2576127ff6127f936613f9f565b90614bbc565b60405160209182820192808352815180945260408301938160408260051b8601019301916000955b8287106128345785850386f35b909192938280600192603f198982030185526128d9885191610160928051825284810151858301526040810151604083015261289c6060948583015195898060a01b03809716908501526080808401519085015260a0908082850151928601528401906140d9565b9360c08181840151169084015260e08201511660e083015261010080820151908301526101208082015190830152610140809101519101906140cc565b9601920196019592919092612827565b346106c2576020806003193601126106c25760ce546001600160a01b039060043590821633148015612c12575b8015612c05575b61292690614152565b8060005260dd8352604060002092600d84015415612bf357600c84019081549160ff8316612be157600160ff1993841681179091559091600f86019190856000835b612a52575b50508180880194855460005260dc815261298a60406000206143d2565b612992615d1c565b6009890180546001600160a01b03191690556000600a8a01819055600b8a0181905560108a01925b612a10575b8989897fce01c0f23510101cca2ff918bb26382aba649759f8d6ac7526819a968a157106612a0b60038c6129f28d61441a565b549460028701541695015460405191829133908361425b565b0390a4005b8554811015612a4d579084828a612a2a839796958a6141dd565b90549060031b1c16600052838352604060002085815416905501909192936129ba565b6129bf565b83908596939654811015612bd857612a6a81876141dd565b939054600394851b1c168860005260de9081865260406000208160005286526040600020549182612aa7575b505050819250018791959295612968565b9091935089600052855260406000208160005285526000866040822082815501558960d1541685604051809263a9059cbb60e01b825281600081612aef8a8960048401614137565b03925af190811561044a57879586958e948d948f94600091612bbb575b5015612b4d57612b41600080516020615f9e833981519152938988015495600289015416970154604051938493339285614abb565b0390a45b8a8080612a96565b612bb37ff11fd747bdfb8a50931846fe0cacf080c846822ede6a8541251b7acd9e008071938660005260df8c526040600020836000528c526040600020612b958582546141d0565b90558988015495600289015416970154604051938493339285614abb565b0390a4612b45565b612bd291508b3d8d1161044357610435818361402b565b38612b0c565b5094919461296d565b60405163dda144a560e01b8152600490fd5b6040516335cce53960e11b8152600490fd5b5060d0548216331461291d565b508160cf54163314612916565b346106c25760003660031901126106c25760ce546040516001600160a01b039091168152602090f35b346106c25760203660031901126106c257612c61613fcb565b60ce546001600160a01b03918291821633148015612ce4575b8015612cd7575b612c8a90614152565b169081156114b15760d180546001600160a01b0319811684179091556040513381529116907f826f5d78b60194f32d27ffe83398019b7fe1b4af633fd41c838d8bb81b4e75ae90602090a3005b5060d05482163314612c81565b508160cf54163314612c7a565b346106c25760203660031901126106c25760043560005260dc602052604060002060018101549060018060a01b0391611b10836003840154169260048101549460028201549381600684015416600984015492600785015416151590612d9f6005600887015494612d7b60ff600a8a01541698612d746040518095819301614a25565b038361402b565b6040519b8c9b610160928d5260208d015260408c01528060608c01528a01906140d9565b96608089015260a088015282151560c088015260e08701526101008601526101208501526101408401906140cc565b346106c25760003660031901126106c25760ce54612e0790336001600160a01b0391821614908115612e56575b8115612e485750614152565b612e0f615cd8565b600160ff1960655416176065557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b905060d0541633148261195b565b80915060cf5416331490612dfb565b346106c25760003660031901126106c257602060405160038152f35b346106c25760203660031901126106c257612e9a613fcb565b60ce546001600160a01b03918291821633148015612f1d575b8015612f10575b612ec390614152565b169081156114b15760cd80546001600160a01b0319811684179091556040513381529116907fc9f5ccdbb22252fbf060a425c7266a75b2a7098a5a6e00e4d62662281133610990602090a3005b5060d05482163314612eba565b508160cf54163314612eb3565b346106c25760003660031901126106c25760d3546040516001600160a01b039091168152602090f35b346106c25760003660031901126106c257602060d254604051908152f35b346106c25760003660031901126106c25760d4546040516001600160a01b039091168152602090f35b346106c25760003660031901126106c25760ce5460cf5460d054604080516001600160a01b0394851681529284166020840152921691810191909152606090f35b346106c25760603660031901126106c257612ff4615c39565b612ffc615cd8565b6118cd60443560243560043561449f565b346106c25760003660031901126106c2576020604051610e108152f35b346106c25760003660031901126106c257602060ff606554166040519015158152f35b346106c25760203660031901126106c257600435613069615c39565b613071615cd8565b600081815260dd6020526040902060058101546001600160a01b03919082163303610de05760ff600c82015416612be157816009820154166131f55760078101546130cb6130c4600d84015480936141b0565b91426141b0565b61070881101591826131d2575b50506131c057600391837f8b28b29dc0b314415825aa3152f1ff03e4e37643012b612f724e0d1b02177b78613125600185015495869460028701541695015460405191829133908361425b565b0390a460005260dc60205261313d60406000206143d2565b60005260dd602052600060116040822082815582600182015582600282015582600382015561316e60048201614388565b82600582015582600682015582600782015582600882015582600982015582600a82015582600b82015582600c82015582600d82015582600e8201556131b6600f820161441a565b01556118cd615d1c565b6040516361023c2f60e11b8152600490fd5b909150600a810290808204600a149015171561062a5760649004111584806130d8565b604051631129da7b60e11b8152600490fd5b346106c25760003660031901126106c257602060d754604051908152f35b346106c25760003660031901126106c257602060d854604051908152f35b346106c2576020806003193601126106c257600435613260615c39565b8060005260dd825260406000209160df81526040600020336000528152604060002054908115610456578260005260df815260406000203360005281526000604081205560018060a01b03918260d1541682604051809263a9059cbb60e01b8252816000816132d3883360048401614137565b03925af190811561044a576000916133a2575b501561333b577f90ee277560364d9e260a184f1718dd8c188dfbaf994e58156a9a55674a9bf0c5915060036001860154936002870154169501549061333260405192839233918461418f565b0390a460018055005b7f1ff1e24ef7e42839320b4820d13caaa7d552beba226afabdc9b10ee926a09d82918460005260df815260406000209033600052528060406000205560036001860154936002870154169501549061339a60405192839233918461418f565b0390a46118cd565b6133b99150833d851161044357610435818361402b565b866132e6565b346106c25760003660031901126106c25760ce546133f790336001600160a01b0391821614908115612e56578115612e485750614152565b6133ff615c8f565b60ff19606554166065557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b346106c25760403660031901126106c25761344e613fb5565b60043560005260de60205260406000209060018060a01b03166000526020526040806000206001815491015482519182526020820152f35b346106c25760403660031901126106c25760606134c96134b06134a7613fcb565b6024359061429b565b90604093929351938452602084015260408301906140cc565bf35b346106c25760003660031901126106c25760ce5461350390336001600160a01b0391821614908115612e56578115612e485750614152565b61350b615c8f565b60db5460ff81166135275760ff191660011760db55600060da55005b6040516313b43ed960e01b8152600490fd5b346106c25760003660031901126106c25760206040516107088152f35b346106c25760003660031901126106c25760d1546040516001600160a01b039091168152602090f35b346106c25760403660031901126106c25760043561359b613fb5565b60ce546001600160a01b0391908216331480156136e4575b80156136d7575b6135c390614152565b8181169182156114b157600080516020615f1e83398151915284148080156136c0575b80156136a9575b15611715576040517f48db44a1e2b3ac5f85f45c9f66393c8ba8644fb99fc249f621d18b4374c5cbae9461362082613fe1565b81526001602082014281528760005260e0602052846040600020935116828060a01b0319845416178355519101556000146136825760d354165b604080516001600160a01b0393841681529190921660208201523391810191909152606090a2005b600080516020615f5e83398151915284036136a05760d4541661365a565b60d6541661365a565b50600080516020615f7e83398151915285146135ed565b50600080516020615f5e83398151915285146135e6565b5060d054821633146135ba565b508160cf541633146135b3565b6140ae565b346106c25760003660031901126106c25760cd546040516001600160a01b039091168152602090f35b346106c25760003660031901126106c257602060d954604051908152f35b346106c25760003660031901126106c257613756615c39565b600060cb5460015b81811115613809578280156104565760d15460405163a9059cbb60e01b81529060209082906001600160a01b03168160008161379e883360048401614137565b03925af190811561044a576000916137ea575b5015610d13576103d97fa4170b874565e0e4a2955b01057e7ce5cac5d3343c6d44419c09a28e39dd23989160405191829133908361425b565b613803915060203d60201161044357610435818361402b565b826137b1565b8060005260df60208181526040600020336000528152604060002054908161383d575b50505061383890614274565b61375e565b60dd9061384f836138389695986141d0565b968460005281526040600020336000528152600060408120558360005252816040600020917f90ee277560364d9e260a184f1718dd8c188dfbaf994e58156a9a55674a9bf0c5600184015491600360018060a01b03600287015416950154906138bf60405192839233918461418f565b0390a490848061382c565b346106c25760003660031901126106c2576020604051600080516020615f7e8339815191528152f35b346106c25760803660031901126106c25761390c613fcb565b50613915613fb5565b506064356001600160401b0381116106c257366023820112156106c25761394690369060248160040135910161404c565b50604051630a85bd0160e11b8152602090f35b346106c25760403660031901126106c257600435613975613fb5565b60ce546001600160a01b0392918391821633148015613a7c575b8015613a6f575b61399f90614152565b169182156114b1576001821490818015613a65575b15613a2a577f1ecc4026e3d033ab2e679e35d978f52e84498a1fc36ac2463823c1db02a265db9115613a0f5760cf80546001600160a01b03198116861790915581165b613a0a604051928392169433908361425b565b0390a3005b60d080546001600160a01b03198116861790915581166139f7565b60405162461bcd60e51b815260206004820152601360248201527224b73b30b634b21030b236b4b7273ab6b132b960691b6044820152606490fd5b50600283146139b4565b5060d05482163314613996565b508160cf5416331461398f565b346106c25760203660031901126106c2577f5d9adf4688f9972d62738759ea7d3892eb4134b9e79b6f7dcc60752fa5d6ae456119a8600435613ae660018060a01b038060ce54163314908115613b06575b8115613af85750614152565b8060d25560405191829133908361425b565b905060d0541633148561195b565b80915060cf5416331490613ada565b346106c25760003660031901126106c257606060ff60db541660da5460cb5490604051921515835260208301526040820152f35b346106c25760003660031901126106c257602060d554604051908152f35b346106c25760003660031901126106c25760cf546040516001600160a01b039091168152602090f35b346106c2576020806003193601126106c25760043590613bae615c39565b8160005260dd81526040600020600d810154928315612bf35760ff600c83015416612be15760078201549384421015612be1578160005260de84526040600020336000528452604060002094855491821561045657610258613c29613c186001809a0154426141b0565b92613c2381426141b0565b946141b0565b91119182613dcf575b505015613dbd576009830180546001600160a01b0392919083163314613da0575b9486958460005260de825260406000203360005282526000876040822082815501558460005260df825260406000203360005282526040600020613c988482546141d0565b905580546001600160a01b03191690556000600a8601819055600b8601819055600f860190875b613d27575b505090600080516020615f3e8339815191529133600052601086019052604060002060ff19815416905560118501613cfc815461424e565b90556003868601549360028701541695015490613d2060405192839233918461418f565b0390a48055005b815480821015613d9a57613d3b82846141dd565b905460039291831b1c87163314613d56575050870187613cbf565b9092919596979850600019810190811161062a57600080516020615f3e833981519152956105b188613d8f956105a46105cf95876141dd565b869594939288613cc4565b50613cc4565b600f8501548714613c53576040516308feb88f60e01b8152600490fd5b60405163bb3b50dd60e01b8152600490fd5b909150610e10811191821592613de9575b50508680613c32565b909150600a810290808204600a149015171561062a576064900410158680613de0565b346106c25760003660031901126106c257602060405160058152f35b346106c257613e3636613f9f565b90613e5c60018060a01b038060ce54163314908115613ebf575b8115613eb15750614152565b610e1081108015613ea7575b610e11577f29308d6d8dfb3d5a37c66c383a61daaef60a765cdfa917c9f63e9fed3884f840918160d7558060d8556119a860405192839233918461418f565b5081811015613e68565b905060d0541633148461195b565b80915060cf5416331490613e50565b346106c25760203660031901126106c25760ce54600435906001600160a01b0390811633148015613f6e575b8015613f61575b613f0a90614152565b8160005260e0602052604060002054161561175b578060005260e0602052600060016040822082815501557f4dd588dbbb195c6fddee7aa2ac0d0aa03d5e1f3ada97072c957fba117de7c3326020604051338152a2005b5060d05481163314613f01565b508060cf54163314613efa565b346106c25760003660031901126106c25760d0546001600160a01b03168152602090f35b60409060031901126106c2576004359060243590565b602435906001600160a01b03821682036106c257565b600435906001600160a01b03821682036106c257565b604081019081106001600160401b03821117610bd757604052565b61016081019081106001600160401b03821117610bd757604052565b6001600160401b038111610bd757604052565b90601f801991011681019081106001600160401b03821117610bd757604052565b9291926001600160401b038211610bd75760405191614075601f8201601f19166020018461402b565b8294818452818301116106c2578281602093846000960137010152565b346106c25760003660031901126106c2576020604051600a8152f35b346106c25760003660031901126106c25760206040516202a3008152f35b906003821015610bed5752565b919082519283825260005b848110614105575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016140e4565b9080601f830112156106c2578160206141349335910161404c565b90565b6001600160a01b039091168152602081019190915260400190565b1561415957565b60405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606490fd5b90815260208101919091526001600160a01b03909116604082015260600190565b9190820391821161062a57565b8181029291811591840414171561062a57565b9190820180921161062a57565b80548210156141f55760005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b8054801561423857600019019061422282826141dd565b81549060018060a01b039060031b1b1916905555565b634e487b7160e01b600052603160045260246000fd5b801561062a576000190190565b9081526001600160a01b03909116602082015260400190565b600019811461062a5760010190565b908160209103126106c2575180151581036106c25790565b9060c9549060019060015b838111156142be575050505050600090600090600090565b6040600082815260dc6020522060018060a01b0380600383015416818816149081614329575b81614319575b506142fe57506142f990614274565b6142a6565b9593505050915060ff600a8454938501549401541691929190565b90506006820154161515386142ea565b6004830154851491506142e4565b90600182811c92168015614367575b602083101461435157565b634e487b7160e01b600052602260045260246000fd5b91607f1691614346565b81811061437c575050565b60008155600101614371565b6143928154614337565b908161439c575050565b81601f600093116001146143af5750555b565b9080839182526143ce601f60208420940160051c840160018501614371565b5555565b600a6000918281558260018201558260028201558260038201558260048201556143fe60058201614388565b8260068201558260078201558260088201558260098201550155565b80546000825580614429575050565b6143ad91600052602060002090810190614371565b908160209103126106c257516001600160a01b03811681036106c25790565b9081526001600160a01b0391821660208201529116604082015260600190565b6001600160a01b03918216815291166020820152604081019190915260600190565b9060009282845260209060dd825260408086209360ff600c86015416614a145760078501968754421015614a0357600286019560018060a01b039182885416600383019a8b54918751926331a9108f60e11b845260049381858201528b81602481865afa9081156149f95790889187916149dc575b50816005890154169182911603614991575050506006840154978887106149815761271090818111801561497a575b61496a57600a8601998a54906005820291801592818104600514841715614957579060646145729204906141d0565b9161494f575b50881061493f57878b939261458e8f93836141bd565b049a8a61459b8d846141d0565b9380895260de8752818920338a52875281892054856148b4575b15614813575b614627968960098c01938d85541690816147be575b505083546001600160a01b031916331790935550505055600b86018a90558851906145fa82613fe1565b815260018d8c830190428252875260de8d528a87203388528d528a872092518355519101554290546141b0565b6008840154600a810290808204600a14901517156147ab5760649004118061479d575b6146a8575b5050917f7a496e924117ff19fc766993af9f5a64c721c0b05b6f43dec06d56b1ffe7cc179593916001846011608098960161468a8154614274565b905501549754169854938251948552840152820152336060820152a4565b89825260dd885285822091600883015491600a830292808404600a149015171561478a57505060809694927f7a496e924117ff19fc766993af9f5a64c721c0b05b6f43dec06d56b1ffe7cc17989694926064600193046202a300808211614782575b5061471a600783019182546141d0565b809155600e820161472b8154614274565b90558c7f050c87359b703f9aef55b00097337f098d8eb5097bd418f09b87733d2abe1feb8584015492600388600287015416950154906147718b5192839233918461418f565b0390a492949650819395975061464f565b90503861470a565b634e487b7160e01b825260119052602490fd5b506003600e8401541061464a565b634e487b7160e01b845260118352602484fd5b60019185845260de85528184209084528452822082815501556147e78454600b8d0154906141d0565b918a5260df81528d8a20908c8454168b52526148078d8a209182546141d0565b90558f8e89388f6145d0565b60108a01338a5280885260ff838b20541615614830575b506145bb565b9350505091929350600f8701805490600160401b8210156148a1578f8e8c946148888f948661486a9160016146279d9c9b990181556141dd565b81546001600160a01b0360039290921b91821b19163390911b179055565b338b528152828a20805460ff191660011790559661482a565b634e487b7160e01b885260418752602488fd5b93505050919293508760d154168c8b5180926323b872dd60e01b8252818a816148e38a8d30903390850161447d565b03925af1908115614935578791614918575b5015614908578b9392918a8f8b936145b5565b89516312171d8360e31b81528590fd5b61492f91508d803d1061044357610435818361402b565b386148f5565b8b513d89823e3d90fd5b885163741b327560e11b81528490fd5b905038614578565b634e487b7160e01b895260118852602489fd5b88516367e3b83560e01b81528490fd5b5084614543565b875163741b327560e11b81528390fd5b989c9b5098509b505050507f5a01339528b377e455f2c0f9272e7de02f20da46ec56a348edd72eca059ca1c595506149d79250600191500154955192839233918461445d565b0390a4565b6149f391508d803d10610dba57610dac818361402b565b38614514565b8a513d88823e3d90fd5b825163dda144a560e01b8152600490fd5b815163dda144a560e01b8152600490fd5b805460009392614a3482614337565b91828252602093600191600181169081600014614a9c5750600114614a5b575b5050505050565b90939495506000929192528360002092846000945b838610614a8857505050500101903880808080614a54565b805485870183015294019385908201614a70565b60ff19168685015250505090151560051b010191503880808080614a54565b9081526001600160a01b0391821660208201526040810192909252909116606082015260800190565b6001600160401b038111610bd75760051b60200190565b90614b0582614ae4565b604090614b15604051918261402b565b8381528093614b26601f1991614ae4565b019160005b838110614b385750505050565b6020908251614b4681613ffc565b600081528260008183015260008583015260606000818401526000608084015260a0830152600060c0830152600060e0830152600061010083015260006101208301526000610140830152828601015201614b2b565b80518210156141f55760209160051b010190565b6003821015610bed5752565b9060c95491600060015b84811115614dc8575080821015614da15781614be1916141b0565b91808311614d99575b50614bf482614afb565b600091829360015b8681111580614d90575b15614d3b5780600052602060dc81526040806000209060018060a01b038060078401541691821580614d2c575b614c4b575b5050505050614c4690614274565b614bfc565b878b969b10600014614c74575050505050614c68614c4691614274565b955b9038808080614c38565b600a614c46969b9a94614d269694614d0b948460ff955197614c9589613ffc565b845489526001850154908901526002840154818901528160038501541660608901526004840154608089015251614cd381610f038160058801614a25565b60a088015260068301541660c087015260e0860152600881015461010086015260098101546101208601520154166101408301614bb0565b614d158288614b9c565b52614d208187614b9c565b50614274565b94614c6a565b50816006850154161515614c33565b509293505092508110614d4c575090565b614d5581614afb565b9160005b828110614d665750505090565b80614d7360019284614b9c565b51614d7e8287614b9c565b52614d898186614b9c565b5001614d59565b50818510614c06565b915038614bea565b50505050604051602081018181106001600160401b03821117610bd7576040526000815290565b600081815260dc6020526040902060078101546001600160a01b03908116159182614e18575b5050614e03575b614dfe90614274565b614bc6565b90614e10614dfe91614274565b919050614df5565b6006015416151590503880614dee565b15614e2f57565b60405162461bcd60e51b815260206004820152602560248201527f4d75737420617070726f766520636f6e747261637420746f207472616e7366656044820152641c8813919560da1b6064820152608490fd5b61271082118015615644575b61563257600081815260dc6020526040812060078101549192916001600160a01b03166119115760088101546004808301546002840154600685015460038601546040516331a9108f60e11b81529485018490526001600160a01b0390811699939692959294911691906020816024818d5afa9081156154d9579083918a91615613575b506001600160a01b0316036155c15760ff600a8501541660038110156155ad576002036154e45760cd5484546006860154604051632e8e1b0760e11b81526004810189905260248101929092526001600160a01b0390811660448301523360648301529091602091839160849183918e91165af180156154d9576154aa575b505b612710614fa260d554836141bd565b0491612710614fb185846141bd565b0493614fbd85846141d0565b614fc785856141b0565b9060018060a01b0360d154166040516370a0823160e01b8152336004820152602081602481855afa908115615456579083918f91615475575b501061546357604051636eb1769f60e11b8152336004820152306024820152602081604481855afa908115615456579083918f9161541d575b501061540b578c918661539c575b5050908061532c575b50508361529f575b61521c575b60ff600a8601541660038110156151a8576002036151bc575b600160ca540160ca5560ff600a8601541660038110156151a8576002810361511d575092615111928592600597956150ed60ff600a7fd05ec9d9cb9934a59d6933e8142684af05f04369ebc44b9b7caf0dd88f07f85a9c9a015416956040519a8b9a610120908c528060208d01528b019101614a25565b9660408901526060880152608087015260a086015260c085015260e08401906140cc565b336101008301520390a4565b6143ad9a9650906151928998928b9a967f3a20319c37fd8191e52c2356689f3d62f59e7157cc4e5a847e55c13e79f1d06c9660059661517460409f9b604051998a99610100908b528060208c01528a019101614a25565b958f8801526060870152608086015260a085015260c08401906140cc565b3360e08301520390a4815260dc602052206143d2565b634e487b7160e01b8a52602160045260248afd5b893b1561521857604051632142170760e11b815289818c8183816151e58e338a6004850161447d565b03925af1801561520d576151fa575b50615076565b61520690999199614018565b97386151f4565b6040513d8c823e3d90fd5b8880fd5b60d15460d65460405163a9059cbb60e01b81529160209183916001600160a01b039081169183918f918391615257918d911660048401614137565b03925af190811561520d578a91615280575b5061505d576040516312171d8360e31b8152600490fd5b615299915060203d60201161044357610435818361402b565b38615269565b6152d960208560018060a01b0360d154168d60018060a01b0360d454169060405180968195829463a9059cbb60e01b845260048401614137565b03925af1908115615321578b91615302575b50615058576040516312171d8360e31b8152600490fd5b61531b915060203d60201161044357610435818361402b565b386152eb565b6040513d8d823e3d90fd5b60d15460405163a9059cbb60e01b81529260209284926001600160a01b0316918391829061535e908a60048401614137565b03925af1908115615321578b9161537d575b5015610d13578938615050565b615396915060203d60201161044357610435818361402b565b38615370565b6020916153c1916040519485809481936323b872dd60e01b835230336004850161447d565b03925af1908115615400578c916153e1575b5015610d13578a3880615047565b6153fa915060203d60201161044357610435818361402b565b386153d3565b6040513d8e823e3d90fd5b6040516313be252b60e01b8152600490fd5b9150506020813d60201161544e575b816154396020938361402b565b8101031261544a5782905138615039565b8d80fd5b3d915061542c565b8e604051903d90823e3d90fd5b60405163356680b760e01b8152600490fd5b9150506020813d6020116154a2575b816154916020938361402b565b8101031261544a5782905138615000565b3d9150615484565b602090813d83116154d2575b6154c0818361402b565b810103126154ce5738614f91565b8780fd5b503d6154b6565b6040513d8b823e3d90fd5b60405163e985e9c560e01b8152600481018390523060248201526020816044818d5afa9081156154d957899161558e575b50801561552b575b61552690614e28565b614f93565b5060405163020604bf60e21b8152600481018790526020816024818d5afa9081156154d95790615526918a9161556f575b506001600160a01b03163014905061551d565b615588915060203d602011610dba57610dac818361402b565b3861555c565b6155a7915060203d60201161044357610435818361402b565b38615515565b634e487b7160e01b89526021600452602489fd5b506143ad9792508594936040979692507f8709e10d9fcc641d17848440865d3bb5515e53d1d05fc21959ada103bb4ffff291615603895192839233918461445d565b0390a4815260dc602052206143d2565b61562c915060203d602011610dba57610dac818361402b565b38614f12565b6040516367e3b83560e01b8152600490fd5b506000614e8e565b9060009180835260dd602052604083209060078201544210615c2757600c82019360ff855416612be15760098301546001600160a01b031615615b2557600283015460038401546040516331a9108f60e11b8152600481018290526001600160a01b039092169190602082602481865afa918215615991578492615b04575b5060058601546001600160a01b039081169216829003615ab757505050600183810154825260dc6020908152604080842085855260de83528185206009880180546001600160a01b03908116885291909452918520858155909301849055600286015460058701549254600388015494959493918316929081169116823b15615ab35791615774939185809460405196879586948593632142170760e11b85526004850161447d565b03925af18015615aa857615a99575b5090600a840154906157a561271061579d60d554856141bd565b0480936141b0565b80615a1f575b508161599c575b600b85015480615919575b50600760018060a09998991b0360098701541691019060018060a01b0319825416179055600160ca540160ca556001840154825260dc602052615802604083206143d2565b6001840154837f65e227a95eea12b03b854cda3bbce156959ffe7bd0165b52fa138ee5776f3f5a600460018060a01b03600289015416946003890154908960018060a01b036005820154169160018060a01b03600983015416600a83015490615885600b85015494604051988998610100908a528060208b015289019101614a25565b9460408701526060860152608085015260a084015260c08301523360e08301520390a493600f8301945b85548110156158ff57806158c5600192886141dd565b838060a01b0391549060031b1c16828060a01b0360098701541681036158ed575b50016158af565b6158f990339086615d73565b386158e6565b509350505061590c615d1c565b805460ff19166001179055565b60d15460d65460405163a9059cbb60e01b81529260209284926001600160a01b039182169284928a9284926159549290911660048401614137565b03925af1908115615991578491615972575b5015610d1357386157bd565b61598b915060203d60201161044357610435818361402b565b38615966565b6040513d86823e3d90fd5b60d15460d45460405163a9059cbb60e01b81529160209183916001600160a01b03908116918391899183916159d7918b911660048401614137565b03925af1908115615991578491615a00575b506157b2576040516312171d8360e31b8152600490fd5b615a19915060203d60201161044357610435818361402b565b386159e9565b60d154600587015460405163a9059cbb60e01b81529260209284926001600160a01b039182169284928a928492615a5c9290911660048401614137565b03925af1908115615991578491615a7a575b5015610d1357386157ab565b615a93915060203d60201161044357610435818361402b565b38615a6e565b615aa290614018565b38615783565b6040513d84823e3d90fd5b8480fd5b9093925060017f95044bb9f737782fa4645640656fd001314e983ee8bf43d3b4395012e2ba493e9295979697015493615af760405192839233918461445d565b0390a4805460ff19169055565b615b1e91925060203d602011610dba57610dac818361402b565b90386156cb565b6001949394929183600f600185018054855260dc602052615b48604086206143d2565b549360018060a01b03600287015416600395857f65e227a95eea12b03b854cda3bbce156959ffe7bd0165b52fa138ee5776f3f5a600460038b015460018060a01b0360058d015416615baf8d60405194859461010090865280602087015285019101614a25565b9060408301528760608301528760808301528760a08301528760c08301523360e08301520390a49401905b615bec575b505050505061590c615d1c565b8054841015615c22578484615c1b615c058397856141dd565b90543391881b1c6001600160a01b031686615d73565b0193615bda565b615bdf565b604051632e745dfb60e01b8152600490fd5b600260015414615c4a576002600155565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b60ff6065541615615c9c57565b60405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606490fd5b60ff60655416615ce457565b60405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606490fd5b60cc548015615d2e576000190160cc55565b60405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606490fd5b9060009082825260209360dd85526040908184209560df81528285209060018060a01b0395868616928382528252848120549283615db8575b50505050505050505050565b88825260df8352858220818352835285822082905560d154865163a9059cbb60e01b815290849082908b16818681615df48b8f60048401614137565b03925af1908115615eb3578391615e96575b5015615e5357505050600080516020615f9e833981519152939291615e4191600360018a01549760028b015416990154935194859485614abb565b0390a438808080808080808080615dac565b88825260df835285822091528152835162461bcd60e51b81526004810191909152600d60248201526c1499599d5b990819985a5b1959609a1b6044820152606490fd5b615ead9150843d861161044357610435818361402b565b38615e06565b87513d85823e3d90fd5b15615ec457565b60405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608490fdfe27ae2d6f40ff64397ccf7fa296d21eea1bbe92eba3dbd94ecaa472f4e60442b969a77523079983d052c6b0c98b02872b75c73e412413df669e27df9809928c0348252a6ca2960e735b2954de9435ff6eb4de90fca8519b844375927dbc0ebd98add4632aa2d8a787219eced569014d71aaf94010dc879f4ea42617cb0d5ce959523e04f6d63e0420c83217f89a193623483daca08af6cc8b980fc530cc1ba5d9a2646970667358221220b066317ae458e14f6f2c232dbe5b5152a9fba02e16acf0af9f288cd20ca3e76264736f6c63430008180033