Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,500 NONO
Holders
854
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 NONOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NONO
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-07 */ // Sources flattened with hardhat v2.8.3 https://hardhat.org // File erc721a/contracts/[email protected] // SPDX-License-Identifier: MIT // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721A compliant contract. */ interface IERC721A { /** * The caller must own the token or be an approved operator. */ error ApprovalCallerNotOwnerNorApproved(); /** * The token does not exist. */ error ApprovalQueryForNonexistentToken(); /** * The caller cannot approve to their own address. */ error ApproveToCaller(); /** * The caller cannot approve to the current owner. */ error ApprovalToCurrentOwner(); /** * Cannot query the balance for the zero address. */ error BalanceQueryForZeroAddress(); /** * Cannot mint to the zero address. */ error MintToZeroAddress(); /** * The quantity of tokens minted must be more than zero. */ error MintZeroQuantity(); /** * The token does not exist. */ error OwnerQueryForNonexistentToken(); /** * The caller must own the token or be an approved operator. */ error TransferCallerNotOwnerNorApproved(); /** * The token must be owned by `from`. */ error TransferFromIncorrectOwner(); /** * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface. */ error TransferToNonERC721ReceiverImplementer(); /** * Cannot transfer to the zero address. */ error TransferToZeroAddress(); /** * The token does not exist. */ error URIQueryForNonexistentToken(); struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } /** * @dev Returns the total amount of tokens stored by the contract. * * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens. */ function totalSupply() external view returns (uint256); // ============================== // IERC165 // ============================== /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); // ============================== // IERC721 // ============================== /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); // ============================== // IERC721Metadata // ============================== /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev Interface of an ERC721AQueryable compliant contract. */ interface IERC721AQueryable is IERC721A { /** * Invalid query range (`start` >= `stop`). */ error InvalidQueryRange(); /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory); /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory); /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view returns (uint256[] memory); /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view returns (uint256[] memory); } // File erc721a/contracts/[email protected] // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @dev ERC721 token receiver interface. */ interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is IERC721A { // Mask of an entry in packed address data. uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; // The bit position of `numberMinted` in packed address data. uint256 private constant BITPOS_NUMBER_MINTED = 64; // The bit position of `numberBurned` in packed address data. uint256 private constant BITPOS_NUMBER_BURNED = 128; // The bit position of `aux` in packed address data. uint256 private constant BITPOS_AUX = 192; // Mask of all 256 bits in packed address data except the 64 bits for `aux`. uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; // The bit position of `startTimestamp` in packed ownership. uint256 private constant BITPOS_START_TIMESTAMP = 160; // The bit mask of the `burned` bit in packed ownership. uint256 private constant BITMASK_BURNED = 1 << 224; // The bit position of the `nextInitialized` bit in packed ownership. uint256 private constant BITPOS_NEXT_INITIALIZED = 225; // The bit mask of the `nextInitialized` bit in packed ownership. uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225; // The tokenId of the next token to be minted. uint256 private _currentIndex; // The number of tokens burned. uint256 private _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. // See `_packedOwnershipOf` implementation for details. // // Bits Layout: // - [0..159] `addr` // - [160..223] `startTimestamp` // - [224] `burned` // - [225] `nextInitialized` mapping(uint256 => uint256) private _packedOwnerships; // Mapping owner address to address data. // // Bits Layout: // - [0..63] `balance` // - [64..127] `numberMinted` // - [128..191] `numberBurned` // - [192..255] `aux` mapping(address => uint256) private _packedAddressData; // Mapping from token ID to approved address. mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * @dev Returns the starting token ID. * To change the starting token ID, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Returns the next token ID to be minted. */ function _nextTokenId() internal view returns (uint256) { return _currentIndex; } /** * @dev Returns the total number of tokens in existence. * Burned tokens will reduce the count. * To get the total number of tokens minted, please see `_totalMinted`. */ function totalSupply() public view override returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than `_currentIndex - _startTokenId()` times. unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * @dev Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to `_startTokenId()` unchecked { return _currentIndex - _startTokenId(); } } /** * @dev Returns the total number of tokens burned. */ function _totalBurned() internal view returns (uint256) { return _burnCounter; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { // The interface IDs are constants representing the first 4 bytes of the XOR of // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165 // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)` return interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165. interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721. interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata. } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY; } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> BITPOS_AUX); } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; assembly { // Cast aux without masking. auxCasted := aux } packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX); _packedAddressData[owner] = packed; } /** * Returns the packed ownership data of `tokenId`. */ function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; // If not burned. if (packed & BITMASK_BURNED == 0) { // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. // // We can directly compare the packed value. // If the address is zero, packed is zero. while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } /** * Returns the unpacked `TokenOwnership` struct from `packed`. */ function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP); ownership.burned = packed & BITMASK_BURNED != 0; } /** * Returns the unpacked `TokenOwnership` struct at `index`. */ function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } /** * @dev Initializes the ownership slot minted at `index` for efficiency purposes. */ function _initializeOwnershipAt(uint256 index) internal { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev Casts the address to uint256 without masking. */ function _addressToUint256(address value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev Casts the boolean to uint256 without branching. */ function _boolToUint256(bool value) private pure returns (uint256 result) { assembly { result := value } } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = address(uint160(_packedOwnershipOf(tokenId))); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSenderERC721A()) revert ApproveToCaller(); _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned. } /** * @dev Equivalent to `_safeMint(to, quantity, '')`. */ function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement * {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (to.code.length != 0) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex < end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint(address to, uint256 quantity) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { // Updates: // - `balance += quantity`. // - `numberMinted += quantity`. // // We can directly add to the balance and number minted. _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1); // Updates: // - `address` to the owner. // - `startTimestamp` to the timestamp of minting. // - `burned` to `false`. // - `nextInitialized` to `quantity == 1`. _packedOwnerships[startTokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex < end); _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // We can directly increment and decrement the balances. --_packedAddressData[from]; // Updates: `balance -= 1`. ++_packedAddressData[to]; // Updates: `balance += 1`. // Updates: // - `address` to the next owner. // - `startTimestamp` to the timestamp of transfering. // - `burned` to `false`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(to) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Equivalent to `_burn(tokenId, false)`. */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); if (approvalCheck) { bool isApprovedOrOwner = (_msgSenderERC721A() == from || isApprovedForAll(from, _msgSenderERC721A()) || getApproved(tokenId) == _msgSenderERC721A()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner. delete _tokenApprovals[tokenId]; // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { // Updates: // - `balance -= 1`. // - `numberBurned += 1`. // // We can directly decrement the balance, and increment the number burned. // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`. _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1; // Updates: // - `address` to the last owner. // - `startTimestamp` to the timestamp of burning. // - `burned` to `true`. // - `nextInitialized` to `true`. _packedOwnerships[tokenId] = _addressToUint256(from) | (block.timestamp << BITPOS_START_TIMESTAMP) | BITMASK_BURNED | BITMASK_NEXT_INITIALIZED; // If the next slot may not have been initialized (i.e. `nextInitialized == false`) . if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; // If the next slot's address is zero and not burned (i.e. packed value is zero). if (_packedOwnerships[nextTokenId] == 0) { // If the next slot is within bounds. if (nextTokenId != _currentIndex) { // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`. _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Returns the message sender (defaults to `msg.sender`). * * If you are writing GSN compatible contracts, you need to override this function. */ function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function _toString(uint256 value) internal pure returns (string memory ptr) { assembly { // The maximum value of a uint256 contains 78 digits (1 byte per digit), // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged. // We will need 1 32-byte word to store the length, // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128. ptr := add(mload(0x40), 128) // Update the free memory pointer to allocate. mstore(0x40, ptr) // Cache the end of the memory to calculate the length later. let end := ptr // We write the string from the rightmost digit to the leftmost digit. // The following is essentially a do-while loop that also handles the zero case. // Costs a bit more than early returning for the zero case, // but cheaper in terms of deployment and overall runtime costs. for { // Initialize and perform the first pass without check. let temp := value // Move the pointer 1 byte leftwards to point to an empty character slot. ptr := sub(ptr, 1) // Write the character to the pointer. 48 is the ASCII index of '0'. mstore8(ptr, add(48, mod(temp, 10))) temp := div(temp, 10) } temp { // Keep dividing `temp` until zero. temp := div(temp, 10) } { // Body of the for loop. ptr := sub(ptr, 1) mstore8(ptr, add(48, mod(temp, 10))) } let length := sub(end, ptr) // Move the pointer 32 bytes leftwards to make room for the length. ptr := sub(ptr, 32) // Store the length. mstore(ptr, length) } } } // File erc721a/contracts/extensions/[email protected] // ERC721A Contracts v4.0.0 // Creator: Chiru Labs pragma solidity ^0.8.4; /** * @title ERC721A Queryable * @dev ERC721A subclass with convenience query functions. */ abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable { /** * @dev Returns the `TokenOwnership` struct at `tokenId` without reverting. * * If the `tokenId` is out of bounds: * - `addr` = `address(0)` * - `startTimestamp` = `0` * - `burned` = `false` * * If the `tokenId` is burned: * - `addr` = `<Address of owner before token was burned>` * - `startTimestamp` = `<Timestamp when token was burned>` * - `burned = `true` * * Otherwise: * - `addr` = `<Address of owner>` * - `startTimestamp` = `<Timestamp of start of ownership>` * - `burned = `false` */ function explicitOwnershipOf(uint256 tokenId) public view override returns (TokenOwnership memory) { TokenOwnership memory ownership; if (tokenId < _startTokenId() || tokenId >= _nextTokenId()) { return ownership; } ownership = _ownershipAt(tokenId); if (ownership.burned) { return ownership; } return _ownershipOf(tokenId); } /** * @dev Returns an array of `TokenOwnership` structs at `tokenIds` in order. * See {ERC721AQueryable-explicitOwnershipOf} */ function explicitOwnershipsOf(uint256[] memory tokenIds) external view override returns (TokenOwnership[] memory) { unchecked { uint256 tokenIdsLength = tokenIds.length; TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength); for (uint256 i; i != tokenIdsLength; ++i) { ownerships[i] = explicitOwnershipOf(tokenIds[i]); } return ownerships; } } /** * @dev Returns an array of token IDs owned by `owner`, * in the range [`start`, `stop`) * (i.e. `start <= tokenId < stop`). * * This function allows for tokens to be queried if the collection * grows too big for a single call of {ERC721AQueryable-tokensOfOwner}. * * Requirements: * * - `start` < `stop` */ function tokensOfOwnerIn( address owner, uint256 start, uint256 stop ) external view override returns (uint256[] memory) { unchecked { if (start >= stop) revert InvalidQueryRange(); uint256 tokenIdsIdx; uint256 stopLimit = _nextTokenId(); // Set `start = max(start, _startTokenId())`. if (start < _startTokenId()) { start = _startTokenId(); } // Set `stop = min(stop, stopLimit)`. if (stop > stopLimit) { stop = stopLimit; } uint256 tokenIdsMaxLength = balanceOf(owner); // Set `tokenIdsMaxLength = min(balanceOf(owner), stop - start)`, // to cater for cases where `balanceOf(owner)` is too big. if (start < stop) { uint256 rangeLength = stop - start; if (rangeLength < tokenIdsMaxLength) { tokenIdsMaxLength = rangeLength; } } else { tokenIdsMaxLength = 0; } uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength); if (tokenIdsMaxLength == 0) { return tokenIds; } // We need to call `explicitOwnershipOf(start)`, // because the slot at `start` may not be initialized. TokenOwnership memory ownership = explicitOwnershipOf(start); address currOwnershipAddr; // If the starting slot exists (i.e. not burned), initialize `currOwnershipAddr`. // `ownership.address` will not be zero, as `start` is clamped to the valid token ID range. if (!ownership.burned) { currOwnershipAddr = ownership.addr; } for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) { ownership = _ownershipAt(i); if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } // Downsize the array to fit. assembly { mstore(tokenIds, tokenIdsIdx) } return tokenIds; } } /** * @dev Returns an array of token IDs owned by `owner`. * * This function scans the ownership mapping and is O(totalSupply) in complexity. * It is meant to be called off-chain. * * See {ERC721AQueryable-tokensOfOwnerIn} for splitting the scan into * multiple smaller scans if the collection is large enough to cause * an out-of-gas error (10K pfp collections should be fine). */ function tokensOfOwner(address owner) external view override returns (uint256[] memory) { unchecked { uint256 tokenIdsIdx; address currOwnershipAddr; uint256 tokenIdsLength = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenIdsLength); TokenOwnership memory ownership; for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) { ownership = _ownershipAt(i); if (ownership.burned) { continue; } if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { tokenIds[tokenIdsIdx++] = i; } } return tokenIds; } } } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/NONO.sol pragma solidity ^0.8.4; contract NONO is ERC721A, ERC721AQueryable, Ownable { modifier onlyCores { require(isCore[msg.sender], "cores only"); _; } bool public revealed; bool public start; uint256 public preMintPeriod; uint256 public alistMintPeriod; uint256 public startAt; string private baseURI_; string private preRevealURI_; address public collabManager; address[] public cores; address[] public devs; address[] public alist; address[] public whitelist; mapping(address => bool) public isWhitelisted; mapping(address => bool) public isCore; mapping(address => bool) public isAlist; mapping(address => bool) public isDev; uint256 public mintLimit; uint256 public whitelistMintLimit; uint256 public alistMintLimit; uint256 public devMintLimit; uint256 public collabMintLimit; uint256 public coreMintLimit; mapping(address => uint256) public mintCount; mapping(address => uint256) public alistMintCount; mapping(address => uint256) public whitelistMintCount; mapping(address => uint256) public devMintCount; mapping(address => uint256) public collabMintCount; mapping(address => uint256) public coreMintCount; uint256 public PRICE; uint256 public MAX_SUPPLY; constructor( string memory name, string memory symbol, string memory uri, string memory preUri, uint256 mintPrice, uint256 maxSupply ) ERC721A(name, symbol) { baseURI_ = uri; preRevealURI_ = preUri; PRICE = mintPrice; MAX_SUPPLY = maxSupply; alistMintPeriod = 4 hours; preMintPeriod = 24 hours; } function reveal() external onlyOwner { revealed = true; } function baseURI() public view returns(string memory) { if(revealed) { return baseURI_; } else { return preRevealURI_; } } function tokenURI(uint256 tokenId) public view override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory base = baseURI(); return revealed ? string(abi.encodePacked(base, _toString(tokenId))) : base; } function setAlistMintPeriod(uint256 timePeriod) external onlyOwner { alistMintPeriod = timePeriod; } function setPreMintPeriod(uint256 timePeriod) external onlyOwner { preMintPeriod = timePeriod; } function setBaseURI(string memory uri) external onlyOwner { baseURI_ = uri; } function setPreRevealURI(string memory uri) external onlyOwner { preRevealURI_ = uri; } function setPrice(uint256 _price) external onlyOwner { require(_price > 0, "zero price"); PRICE = _price; } function setMaxSupply(uint256 supply) external onlyOwner { require(supply >= totalSupply(), "cannot lower than current supply"); MAX_SUPPLY = supply; } function starts() external onlyOwner { start = true; startAt = block.timestamp; } function setMintLimit(uint256 _mintLimit) external onlyOwner { mintLimit = _mintLimit; } function setWhitelistMintLimit(uint256 _whitelistMintLimit) external onlyOwner { whitelistMintLimit = _whitelistMintLimit; } function setAlistMintLimit(uint256 _alistMintLimit) external onlyOwner { alistMintLimit = _alistMintLimit; } function setDevMintLimit(uint256 _devMintLimit) external onlyOwner { devMintLimit = _devMintLimit; } function setCollabMintLimit(uint256 _collabMintLimit) external onlyOwner { collabMintLimit = _collabMintLimit; } function setCoreMintLimit(uint256 _corebMintLimit) external onlyOwner { coreMintLimit = _corebMintLimit; } function setCores(address[] memory _cores) external onlyOwner { cores = _cores; for(uint256 i = 0; i < _cores.length; i++) { isCore[_cores[i]] = true; } } function setDevs(address[] memory _devs) external onlyOwner { require(_devs.length > 0, "zero length"); devs = _devs; for(uint256 i; i < _devs.length; i++) { isDev[_devs[i]] = true; } } function setAlist(address[] memory _alist) external onlyOwner { require(_alist.length > 0, "zero length"); alist = _alist; for(uint256 i; i < _alist.length; i++) { isAlist[_alist[i]] = true; } } function setCollab(address _collab) external onlyOwner { require(_collab != address(0), "zero length"); collabManager = _collab; } function setWhitelist(address[] memory _whitelist) external onlyOwner { require(_whitelist.length > 0, "zero length"); whitelist = _whitelist; for(uint256 i; i < _whitelist.length; i++) { isWhitelisted[_whitelist[i]] = true; } } function drop(address at, uint256 quantity) external onlyOwner { require(totalSupply()+quantity <= MAX_SUPPLY, "max supply reached"); _safeMint(at, quantity); } function withdraw() external onlyOwner { payable(owner()).transfer(address(this).balance); } function burn(uint256 tokenId) external onlyOwner { _burn(tokenId); } function mint(uint256 quantity) external payable { require(start, "sale not start"); require(quantity > 0, "zero quantity"); require(totalSupply() + quantity <= MAX_SUPPLY, "max supply reached"); bool haveRole; uint256 mintSize; if(isDev[msg.sender] && block.timestamp > startAt + alistMintPeriod + preMintPeriod) { require(devMintCount[msg.sender] + mintCount[msg.sender] + quantity <= devMintLimit + mintLimit, "mint limit reached"); haveRole = true; uint256 devSize = quantity + devMintCount[msg.sender] <= devMintLimit ? quantity : devMintLimit - devMintCount[msg.sender]; mintSize = quantity - devSize; devMintCount[msg.sender] += devSize; if(devSize > 0) { alistMint(msg.sender, devSize, 0); } } if(collabManager == msg.sender) { require(collabMintCount[msg.sender] + mintCount[msg.sender] < mintLimit + collabMintLimit, "mint limit reached"); haveRole = true; uint256 collabSize = quantity + collabMintCount[msg.sender] <= collabMintLimit ? quantity : collabMintLimit - collabMintCount[msg.sender]; mintSize = quantity - collabSize; if(collabSize > 0) { alistMint(msg.sender, collabSize, 2); } } if(isAlist[msg.sender]) { require(alistMintCount[msg.sender] + mintCount[msg.sender] < mintLimit + alistMintLimit, "free mint limit reached"); haveRole = true; uint256 alistSize = quantity + alistMintCount[msg.sender] <= alistMintLimit ? quantity : alistMintLimit - alistMintCount[msg.sender]; mintSize = quantity - alistSize; if(alistSize > 0) { alistMint(msg.sender, alistSize, 1); } } // premint if(isWhitelisted[msg.sender]) { if (block.timestamp > startAt + alistMintPeriod && block.timestamp <= startAt + alistMintPeriod + preMintPeriod) { require(whitelistMintCount[msg.sender] + quantity <= whitelistMintLimit, "whitelist mint limit reached"); require(msg.value >= quantity * PRICE, "value too low"); whitelistMintCount[msg.sender] += quantity; _safeMint(msg.sender, quantity); return; } } if(!haveRole) { require(mintCount[msg.sender] + quantity <= mintLimit, "public mint limit reached"); mintSize = quantity; } else { require(mintCount[msg.sender] + mintSize <= mintLimit, "public mint limit reached"); } if(mintSize > 0) { if(block.timestamp > startAt + alistMintPeriod) { require(msg.value >= mintSize * PRICE, "value too low"); mintCount[msg.sender] += mintSize; _safeMint(msg.sender, mintSize); } else { revert("public mint not start"); } } } function coreRewards(uint256 quantity) external onlyCores { require(coreMintCount[msg.sender] + quantity <= coreMintLimit, "core limit reeached"); coreMintCount[msg.sender] += quantity; _safeMint(msg.sender, quantity); } function alistMint(address to, uint256 quantity, uint256 role) internal { if(role == 1) { alistMintCount[msg.sender] += quantity; } else if(role == 2) { collabMintCount[msg.sender] += quantity; } else { devMintCount[msg.sender] += quantity; } _safeMint(to, quantity); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"string","name":"preUri","type":"string"},{"internalType":"uint256","name":"mintPrice","type":"uint256"},{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"alist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"alistMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alistMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"alistMintPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collabManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"collabMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collabMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"coreMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coreMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"coreRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"cores","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"devMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"devs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"at","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"drop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAlist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isCore","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDev","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preMintPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_alist","type":"address[]"}],"name":"setAlist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alistMintLimit","type":"uint256"}],"name":"setAlistMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timePeriod","type":"uint256"}],"name":"setAlistMintPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_collab","type":"address"}],"name":"setCollab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_collabMintLimit","type":"uint256"}],"name":"setCollabMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_corebMintLimit","type":"uint256"}],"name":"setCoreMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_cores","type":"address[]"}],"name":"setCores","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devMintLimit","type":"uint256"}],"name":"setDevMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_devs","type":"address[]"}],"name":"setDevs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintLimit","type":"uint256"}],"name":"setMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timePeriod","type":"uint256"}],"name":"setPreMintPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setPreRevealURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_whitelist","type":"address[]"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_whitelistMintLimit","type":"uint256"}],"name":"setWhitelistMintLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"starts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelist","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMintLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003b2f38038062003b2f83398101604081905262000034916200026c565b8551869086906200004d90600290602085019062000113565b5080516200006390600390602084019062000113565b505060008055506200007533620000c1565b83516200008a90600c90602087019062000113565b508251620000a090600d90602086019062000113565b506023919091556024555050613840600a55505062015180600955620003b7565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620001219062000332565b90600052602060002090601f01602090048101928262000145576000855562000190565b82601f106200016057805160ff191683800117855562000190565b8280016001018555821562000190579182015b828111156200019057825182559160200191906001019062000173565b506200019e929150620001a2565b5090565b5b808211156200019e5760008155600101620001a3565b600082601f830112620001ca578081fd5b81516001600160401b0380821115620001e757620001e762000388565b604051601f8301601f19908116603f0116810190828211818310171562000212576200021262000388565b816040528381526020925086838588010111156200022e578485fd5b8491505b8382101562000251578582018301518183018401529082019062000232565b838211156200026257848385830101525b9695505050505050565b60008060008060008060c0878903121562000285578182fd5b86516001600160401b03808211156200029c578384fd5b620002aa8a838b01620001b9565b97506020890151915080821115620002c0578384fd5b620002ce8a838b01620001b9565b96506040890151915080821115620002e4578384fd5b620002f28a838b01620001b9565b9550606089015191508082111562000308578384fd5b506200031789828a01620001b9565b9350506080870151915060a087015190509295509295509295565b600181811c908216806200034757607f821691505b6020821081141562000382577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61376880620003c76000396000f3fe6080604052600436106104355760003560e01c806370a08231116102295780639e6a1d7d1161012e578063c23dc68f116100b6578063e985e9c51161007a578063e985e9c514610cf7578063ed9ec88814610d17578063ede5a96d14610d44578063f2fde38b14610d70578063f421764814610d9057600080fd5b8063c23dc68f14610c5e578063c744656514610c8b578063c87b56dd14610ca1578063ca13229e14610cc1578063ddd1783a14610ce157600080fd5b8063ae941890116100fd578063ae94189014610bad578063b67f94ba14610bcd578063b6c912fc14610bed578063b88d4fde14610c1d578063be9a655514610c3d57600080fd5b80639e6a1d7d14610b45578063a0712d6814610b65578063a22cb46514610b78578063a475b5dd14610b9857600080fd5b80638d859f3e116101b157806391ca3bb51161018057806391ca3bb514610acf57806395d89b4114610ae4578063996517cf14610af957806399a2557a14610b0f5780639afb583014610b2f57600080fd5b80638d859f3e14610a5b5780638da5cb5b14610a715780638de48c0b14610a8f57806391b7f5ed14610aaf57600080fd5b80637ebd1b30116101f85780637ebd1b30146109b85780638462151c146109d85780638936bc1114610a055780638c59314f14610a1b5780638d0f8cef14610a3b57600080fd5b806370a0823114610926578063715018a614610946578063740090b41461095b5780637b2e5c371461098857600080fd5b8063381b965c1161033a57806351830227116102c25780635eeacb5f116102865780635eeacb5f146108915780636352211e146108b157806369e1fd3a146108d15780636c0360eb146108f15780636f8b44b01461090657600080fd5b806351830227146107ed57806353e911af1461080e57806355f804b31461082e5780635755294c1461084e5780635bbb21771461086457600080fd5b80633fe9cbed116103095780633fe9cbed1461074057806341626a6f1461076057806342842e0e1461078d57806342966c68146107ad578063475aa7a7146107cd57600080fd5b8063381b965c146106ae5780633af32abf146106ce5780633bdf4ac6146106fe5780633ccfd60b1461072b57600080fd5b806311264cf3116103bd57806326b6b7b71161038c57806326b6b7b71461060b5780632a85db55146106385780633132eb911461065857806332cb6b0c14610678578063369b012d1461068e57600080fd5b806311264cf31461059c57806315011a28146105b257806318160ddd146105d257806323b872dd146105eb57600080fd5b8063081812fc11610404578063081812fc146104f4578063091bd95314610514578063095ea7b3146105365780630c3f64bf146105565780630d1482d61461058657600080fd5b806301ffc9a714610441578063046ac3c81461047657806304d5e0e51461049a57806306fdde03146104d257600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061046161045c36600461333c565b610db0565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b5061048c60195481565b60405190815260200161046d565b3480156104a657600080fd5b506104ba6104b53660046133b9565b610e02565b6040516001600160a01b03909116815260200161046d565b3480156104de57600080fd5b506104e7610e2c565b60405161046d919061350b565b34801561050057600080fd5b506104ba61050f3660046133b9565b610ebe565b34801561052057600080fd5b5061053461052f3660046133b9565b610f02565b005b34801561054257600080fd5b506105346105513660046131bd565b610f3a565b34801561056257600080fd5b50610461610571366004613084565b60166020526000908152604090205460ff1681565b34801561059257600080fd5b5061048c601c5481565b3480156105a857600080fd5b5061048c60095481565b3480156105be57600080fd5b506105346105cd3660046133b9565b61100d565b3480156105de57600080fd5b506001546000540361048c565b3480156105f757600080fd5b506105346106063660046130d0565b61103c565b34801561061757600080fd5b5061048c610626366004613084565b601e6020526000908152604090205481565b34801561064457600080fd5b50610534610653366004613374565b61104c565b34801561066457600080fd5b50610534610673366004613218565b61108d565b34801561068457600080fd5b5061048c60245481565b34801561069a57600080fd5b506105346106a9366004613084565b611141565b3480156106ba57600080fd5b506105346106c93660046133b9565b6111b3565b3480156106da57600080fd5b506104616106e9366004613084565b60136020526000908152604090205460ff1681565b34801561070a57600080fd5b5061048c610719366004613084565b601f6020526000908152604090205481565b34801561073757600080fd5b506105346111e2565b34801561074c57600080fd5b5061053461075b3660046133b9565b611253565b34801561076c57600080fd5b5061048c61077b366004613084565b60216020526000908152604090205481565b34801561079957600080fd5b506105346107a83660046130d0565b611282565b3480156107b957600080fd5b506105346107c83660046133b9565b61129d565b3480156107d957600080fd5b506105346107e83660046133b9565b6112d0565b3480156107f957600080fd5b5060085461046190600160a01b900460ff1681565b34801561081a57600080fd5b50610534610829366004613218565b6112ff565b34801561083a57600080fd5b50610534610849366004613374565b6113d4565b34801561085a57600080fd5b5061048c601a5481565b34801561087057600080fd5b5061088461087f3660046132b6565b611411565b60405161046d9190613469565b34801561089d57600080fd5b506104ba6108ac3660046133b9565b611501565b3480156108bd57600080fd5b506104ba6108cc3660046133b9565b611511565b3480156108dd57600080fd5b506104ba6108ec3660046133b9565b61151c565b3480156108fd57600080fd5b506104e761152c565b34801561091257600080fd5b506105346109213660046133b9565b61155b565b34801561093257600080fd5b5061048c610941366004613084565b6115e0565b34801561095257600080fd5b5061053461162e565b34801561096757600080fd5b5061048c610976366004613084565b60226020526000908152604090205481565b34801561099457600080fd5b506104616109a3366004613084565b60156020526000908152604090205460ff1681565b3480156109c457600080fd5b506104ba6109d33660046133b9565b611664565b3480156109e457600080fd5b506109f86109f3366004613084565b611674565b60405161046d91906134d3565b348015610a1157600080fd5b5061048c600a5481565b348015610a2757600080fd5b50610534610a36366004613218565b611798565b348015610a4757600080fd5b50610534610a563660046131bd565b61186d565b348015610a6757600080fd5b5061048c60235481565b348015610a7d57600080fd5b506008546001600160a01b03166104ba565b348015610a9b57600080fd5b50600e546104ba906001600160a01b031681565b348015610abb57600080fd5b50610534610aca3660046133b9565b6118ff565b348015610adb57600080fd5b5061053461196b565b348015610af057600080fd5b506104e76119ae565b348015610b0557600080fd5b5061048c60175481565b348015610b1b57600080fd5b506109f8610b2a3660046131e6565b6119bd565b348015610b3b57600080fd5b5061048c601b5481565b348015610b5157600080fd5b50610534610b603660046133b9565b611b56565b610534610b733660046133b9565b611b85565b348015610b8457600080fd5b50610534610b93366004613183565b6122bc565b348015610ba457600080fd5b50610534612352565b348015610bb957600080fd5b50610534610bc83660046133b9565b612391565b348015610bd957600080fd5b50610534610be83660046133b9565b61246e565b348015610bf957600080fd5b50610461610c08366004613084565b60146020526000908152604090205460ff1681565b348015610c2957600080fd5b50610534610c3836600461310b565b61249d565b348015610c4957600080fd5b5060085461046190600160a81b900460ff1681565b348015610c6a57600080fd5b50610c7e610c793660046133b9565b6124e7565b60405161046d9190613578565b348015610c9757600080fd5b5061048c600b5481565b348015610cad57600080fd5b506104e7610cbc3660046133b9565b612550565b348015610ccd57600080fd5b50610534610cdc3660046133b9565b6125cd565b348015610ced57600080fd5b5061048c60185481565b348015610d0357600080fd5b50610461610d1236600461309e565b6125fc565b348015610d2357600080fd5b5061048c610d32366004613084565b601d6020526000908152604090205481565b348015610d5057600080fd5b5061048c610d5f366004613084565b602080526000908152604090205481565b348015610d7c57600080fd5b50610534610d8b366004613084565b61262a565b348015610d9c57600080fd5b50610534610dab366004613218565b6126c2565b60006301ffc9a760e01b6001600160e01b031983161480610de157506380ac58cd60e01b6001600160e01b03198316145b80610dfc5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600f8181548110610e1257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060028054610e3b9061367a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e679061367a565b8015610eb45780601f10610e8957610100808354040283529160200191610eb4565b820191906000526020600020905b815481529060010190602001808311610e9757829003601f168201915b5050505050905090565b6000610ec982612797565b610ee6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6008546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c90613543565b60405180910390fd5b600a55565b6000610f45826127be565b9050806001600160a01b0316836001600160a01b03161415610f7a5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610fb157610f9481336125fc565b610fb1576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146110375760405162461bcd60e51b8152600401610f2c90613543565b601a55565b61104783838361281f565b505050565b6008546001600160a01b031633146110765760405162461bcd60e51b8152600401610f2c90613543565b805161108990600d906020840190612f23565b5050565b6008546001600160a01b031633146110b75760405162461bcd60e51b8152600401610f2c90613543565b80516110ca90600f906020840190612fa7565b5060005b8151811015611089576001601460008484815181106110fd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611139816136b5565b9150506110ce565b6008546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610f2c90613543565b6001600160a01b0381166111915760405162461bcd60e51b8152600401610f2c9061351e565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610f2c90613543565b601855565b6008546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610f2c90613543565b6008546001600160a01b03166040516001600160a01b039190911690303180156108fc02916000818181858888f19350505050158015611250573d6000803e3d6000fd5b50565b6008546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610f2c90613543565b600955565b6110478383836040518060200160405280600081525061249d565b6008546001600160a01b031633146112c75760405162461bcd60e51b8152600401610f2c90613543565b611250816129b0565b6008546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610f2c90613543565b601c55565b6008546001600160a01b031633146113295760405162461bcd60e51b8152600401610f2c90613543565b600081511161134a5760405162461bcd60e51b8152600401610f2c9061351e565b805161135d906011906020840190612fa7565b5060005b81518110156110895760016015600084848151811061139057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113cc816136b5565b915050611361565b6008546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610f2c90613543565b805161108990600c906020840190612f23565b80516060906000816001600160401b0381111561143e57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561148957816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161145c5790505b50905060005b8281146114f9576114c68582815181106114b957634e487b7160e01b600052603260045260246000fd5b60200260200101516124e7565b8282815181106114e657634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161148f565b509392505050565b60108181548110610e1257600080fd5b6000610dfc826127be565b60118181548110610e1257600080fd5b600854606090600160a01b900460ff161561154e57600c8054610e3b9061367a565b600d8054610e3b9061367a565b6008546001600160a01b031633146115855760405162461bcd60e51b8152600401610f2c90613543565b600154600054038110156115db5760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f74206c6f776572207468616e2063757272656e7420737570706c796044820152606401610f2c565b602455565b60006001600160a01b038216611609576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146116585760405162461bcd60e51b8152600401610f2c90613543565b61166260006129bb565b565b60128181548110610e1257600080fd5b60606000806000611684856115e0565b90506000816001600160401b038111156116ae57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116d7578160200160208202803683370190505b5090506116fd604080516060810182526000808252602082018190529181019190915290565b60005b83861461178c5761171081612a0d565b915081604001511561172157611784565b81516001600160a01b03161561173657815194505b876001600160a01b0316856001600160a01b03161415611784578083878060010198508151811061177757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611700565b50909695505050505050565b6008546001600160a01b031633146117c25760405162461bcd60e51b8152600401610f2c90613543565b60008151116117e35760405162461bcd60e51b8152600401610f2c9061351e565b80516117f6906010906020840190612fa7565b5060005b81518110156110895760016016600084848151811061182957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611865816136b5565b9150506117fa565b6008546001600160a01b031633146118975760405162461bcd60e51b8152600401610f2c90613543565b602454816118a86001546000540390565b6118b29190613600565b11156118f55760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610f2c565b6110898282612a42565b6008546001600160a01b031633146119295760405162461bcd60e51b8152600401610f2c90613543565b600081116119665760405162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b6044820152606401610f2c565b602355565b6008546001600160a01b031633146119955760405162461bcd60e51b8152600401610f2c90613543565b6008805460ff60a81b1916600160a81b17905542600b55565b606060038054610e3b9061367a565b60608183106119df57604051631960ccad60e11b815260040160405180910390fd5b6000806119eb60005490565b9050808411156119f9578093505b6000611a04876115e0565b905084861015611a235785850381811015611a1d578091505b50611a27565b5060005b6000816001600160401b03811115611a4f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611a78578160200160208202803683370190505b50905081611a8b579350611b4f92505050565b6000611a96886124e7565b905060008160400151611aa7575080515b885b888114158015611ab95750848714155b15611b4357611ac781612a0d565b9250826040015115611ad857611b3b565b82516001600160a01b031615611aed57825191505b8a6001600160a01b0316826001600160a01b03161415611b3b5780848880600101995081518110611b2e57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611aa9565b50505092835250909150505b9392505050565b6008546001600160a01b03163314611b805760405162461bcd60e51b8152600401610f2c90613543565b601755565b600854600160a81b900460ff16611bcf5760405162461bcd60e51b815260206004820152600e60248201526d1cd85b19481b9bdd081cdd185c9d60921b6044820152606401610f2c565b60008111611c0f5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610f2c565b60245481611c206001546000540390565b611c2a9190613600565b1115611c6d5760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610f2c565b33600090815260166020526040812054819060ff168015611ca95750600954600a54600b54611c9c9190613600565b611ca69190613600565b42115b15611dc457601754601a54611cbe9190613600565b336000908152601d6020908152604080832054918052909120548591611ce391613600565b611ced9190613600565b1115611d305760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b6044820152606401610f2c565b601a5433600090815260208052604081205460019450909190611d539086613600565b1115611d7a57336000908152602080526040902054601a54611d759190613637565b611d7c565b835b9050611d888185613637565b336000908152602080526040812080549294508392909190611dab908490613600565b90915550508015611dc257611dc233826000612a5c565b505b600e546001600160a01b0316331415611ebf57601b54601754611de79190613600565b336000908152601d6020908152604080832054602190925290912054611e0d9190613600565b10611e4f5760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b6044820152606401610f2c565b601b543360009081526021602052604081205460019450909190611e739086613600565b1115611e9b5733600090815260216020526040902054601b54611e969190613637565b611e9d565b835b9050611ea98185613637565b91508015611ebd57611ebd33826002612a5c565b505b3360009081526015602052604090205460ff1615611fca57601954601754611ee79190613600565b336000908152601d6020908152604080832054601e90925290912054611f0d9190613600565b10611f5a5760405162461bcd60e51b815260206004820152601760248201527f66726565206d696e74206c696d697420726561636865640000000000000000006044820152606401610f2c565b601954336000908152601e602052604081205460019450909190611f7e9086613600565b1115611fa657336000908152601e6020526040902054601954611fa19190613637565b611fa8565b835b9050611fb48185613637565b91508015611fc857611fc833826001612a5c565b505b3360009081526013602052604090205460ff161561210857600a54600b54611ff29190613600565b4211801561201c5750600954600a54600b5461200e9190613600565b6120189190613600565b4211155b1561210857601854336000908152601f602052604090205461203f908590613600565b111561208d5760405162461bcd60e51b815260206004820152601c60248201527f77686974656c697374206d696e74206c696d69742072656163686564000000006044820152606401610f2c565b60235461209a9084613618565b3410156120d95760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610f2c565b336000908152601f6020526040812080548592906120f8908490613600565b9091555061104790503384612a42565b8161217c57601754336000908152601d602052604090205461212b908590613600565b11156121755760405162461bcd60e51b81526020600482015260196024820152781c1d589b1a58c81b5a5b9d081b1a5b5a5d081c995858da1959603a1b6044820152606401610f2c565b50816121e4565b601754336000908152601d602052604090205461219a908390613600565b11156121e45760405162461bcd60e51b81526020600482015260196024820152781c1d589b1a58c81b5a5b9d081b1a5b5a5d081c995858da1959603a1b6044820152606401610f2c565b801561104757600a54600b546121fa9190613600565b42111561227c5760235461220e9082613618565b34101561224d5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610f2c565b336000908152601d60205260408120805483929061226c908490613600565b9091555061104790503382612a42565b60405162461bcd60e51b81526020600482015260156024820152741c1d589b1a58c81b5a5b9d081b9bdd081cdd185c9d605a1b6044820152606401610f2c565b6001600160a01b0382163314156122e65760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b0316331461237c5760405162461bcd60e51b8152600401610f2c90613543565b6008805460ff60a01b1916600160a01b179055565b3360009081526014602052604090205460ff166123dd5760405162461bcd60e51b815260206004820152600a602482015269636f726573206f6e6c7960b01b6044820152606401610f2c565b601c54336000908152602260205260409020546123fb908390613600565b111561243f5760405162461bcd60e51b815260206004820152601360248201527218dbdc99481b1a5b5a5d081c99595858da1959606a1b6044820152606401610f2c565b336000908152602260205260408120805483929061245e908490613600565b9091555061125090503382612a42565b6008546001600160a01b031633146124985760405162461bcd60e51b8152600401610f2c90613543565b601955565b6124a884848461281f565b6001600160a01b0383163b156124e1576124c484848484612ae5565b6124e1576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101839052909150600054831061252c5792915050565b61253583612a0d565b90508060400151156125475792915050565b611b4f83612bdd565b606061255b82612797565b61257857604051630a14c4b560e41b815260040160405180910390fd5b600061258261152c565b600854909150600160a01b900460ff1661259c5780611b4f565b806125a684612c0b565b6040516020016125b79291906133fd565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146125f75760405162461bcd60e51b8152600401610f2c90613543565b601b55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146126545760405162461bcd60e51b8152600401610f2c90613543565b6001600160a01b0381166126b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f2c565b611250816129bb565b6008546001600160a01b031633146126ec5760405162461bcd60e51b8152600401610f2c90613543565b600081511161270d5760405162461bcd60e51b8152600401610f2c9061351e565b8051612720906012906020840190612fa7565b5060005b81518110156110895760016013600084848151811061275357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061278f816136b5565b915050612724565b6000805482108015610dfc575050600090815260046020526040902054600160e01b161590565b60008160005481101561280657600081815260046020526040902054600160e01b8116612804575b80611b4f5750600019016000818152600460205260409020546127e6565b505b604051636f96cda160e11b815260040160405180910390fd5b600061282a826127be565b9050836001600160a01b0316816001600160a01b03161461285d5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061287b575061287b85336125fc565b8061289657503361288b84610ebe565b6001600160a01b0316145b9050806128b657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166128dd57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661297a57600183016000818152600460205260409020546129785760005481146129785760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b031660008051602061371383398151915260405160405180910390a45050505050565b611250816000612c5a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160608101825260008082526020820181905291810191909152600082815260046020526040902054610dfc90612d9c565b611089828260405180602001604052806000815250612dd6565b8060011415612a8f57336000908152601e602052604081208054849290612a84908490613600565b90915550612adb9050565b8060021415612ab7573360009081526021602052604081208054849290612a84908490613600565b33600090815260208052604081208054849290612ad5908490613600565b90915550505b6110478383612a42565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612b1a90339089908890889060040161342c565b602060405180830381600087803b158015612b3457600080fd5b505af1925050508015612b64575060408051601f3d908101601f19168201909252612b6191810190613358565b60015b612bbf573d808015612b92576040519150601f19603f3d011682016040523d82523d6000602084013e612b97565b606091505b508051612bb7576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160608101825260008082526020820181905291810191909152610dfc612c06836127be565b612d9c565b604080516080810191829052607f0190826030600a8206018353600a90045b8015612c4857600183039250600a81066030018353600a9004612c2a565b50819003601f19909101908152919050565b6000612c65836127be565b9050808215612cc9576000336001600160a01b0383161480612c8c5750612c8c82336125fc565b80612ca7575033612c9c86610ebe565b6001600160a01b0316145b905080612cc757604051632ce44b5f60e11b815260040160405180910390fd5b505b600084815260066020908152604080832080546001600160a01b03191690556001600160a01b03841683526005825280832080546fffffffffffffffffffffffffffffffff01905586835260049091529020600360e01b4260a01b8317179055600160e11b8216612d685760018401600081815260046020526040902054612d66576000548114612d665760008181526004602052604090208390555b505b60405184906000906001600160a01b03841690600080516020613713833981519152908390a4505060018054810190555050565b604080516060810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b90921615159082015290565b6000546001600160a01b038416612dff57604051622e076360e81b815260040160405180910390fd5b82612e1d5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15612ee0575b60405182906001600160a01b03881690600090600080516020613713833981519152908290a4612ea96000878480600101955087612ae5565b612ec6576040516368d2bf6b60e11b815260040160405180910390fd5b808210612e70578260005414612edb57600080fd5b612f13565b5b6040516001830192906001600160a01b03881690600090600080516020613713833981519152908290a4808210612ee1575b5060009081556124e19085838684565b828054612f2f9061367a565b90600052602060002090601f016020900481019282612f515760008555612f97565b82601f10612f6a57805160ff1916838001178555612f97565b82800160010185558215612f97579182015b82811115612f97578251825591602001919060010190612f7c565b50612fa3929150612ffc565b5090565b828054828255906000526020600020908101928215612f97579160200282015b82811115612f9757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fc7565b5b80821115612fa35760008155600101612ffd565b60006001600160401b0383111561302a5761302a6136e6565b61303d601f8401601f19166020016135ad565b905082815283838301111561305157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461307f57600080fd5b919050565b600060208284031215613095578081fd5b611b4f82613068565b600080604083850312156130b0578081fd5b6130b983613068565b91506130c760208401613068565b90509250929050565b6000806000606084860312156130e4578081fd5b6130ed84613068565b92506130fb60208501613068565b9150604084013590509250925092565b60008060008060808587031215613120578081fd5b61312985613068565b935061313760208601613068565b92506040850135915060608501356001600160401b03811115613158578182fd5b8501601f81018713613168578182fd5b61317787823560208401613011565b91505092959194509250565b60008060408385031215613195578182fd5b61319e83613068565b9150602083013580151581146131b2578182fd5b809150509250929050565b600080604083850312156131cf578182fd5b6131d883613068565b946020939093013593505050565b6000806000606084860312156131fa578283fd5b61320384613068565b95602085013595506040909401359392505050565b6000602080838503121561322a578182fd5b82356001600160401b0381111561323f578283fd5b8301601f8101851361324f578283fd5b803561326261325d826135dd565b6135ad565b80828252848201915084840188868560051b8701011115613281578687fd5b8694505b838510156132aa5761329681613068565b835260019490940193918501918501613285565b50979650505050505050565b600060208083850312156132c8578182fd5b82356001600160401b038111156132dd578283fd5b8301601f810185136132ed578283fd5b80356132fb61325d826135dd565b80828252848201915084840188868560051b870101111561331a578687fd5b8694505b838510156132aa57803583526001949094019391850191850161331e565b60006020828403121561334d578081fd5b8135611b4f816136fc565b600060208284031215613369578081fd5b8151611b4f816136fc565b600060208284031215613385578081fd5b81356001600160401b0381111561339a578182fd5b8201601f810184136133aa578182fd5b612bd584823560208401613011565b6000602082840312156133ca578081fd5b5035919050565b600081518084526133e981602086016020860161364e565b601f01601f19169290920160200192915050565b6000835161340f81846020880161364e565b83519083019061342381836020880161364e565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061345f908301846133d1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561178c576134c083855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b9284019260609290920191600101613485565b6020808252825182820181905260009190848201906040850190845b8181101561178c578351835292840192918401916001016134ef565b602081526000611b4f60208301846133d1565b6020808252600b908201526a0f4cae4de40d8cadccee8d60ab1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610dfc565b604051601f8201601f191681016001600160401b03811182821017156135d5576135d56136e6565b604052919050565b60006001600160401b038211156135f6576135f66136e6565b5060051b60200190565b60008219821115613613576136136136d0565b500190565b6000816000190483118215151615613632576136326136d0565b500290565b600082821015613649576136496136d0565b500390565b60005b83811015613669578181015183820152602001613651565b838111156124e15750506000910152565b600181811c9082168061368e57607f821691505b602082108114156136af57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136c9576136c96136d0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461125057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122016cfe8cc7bc5e5a903efd7e81842e0a311fc36a6b5bfcd603dc3e4e63518154f64736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000f8b0a10e4700000000000000000000000000000000000000000000000000000000000000001f90000000000000000000000000000000000000000000000000000000000000000e4e6f4e6f2066726f6d205345455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4f4e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5242526779767037784665454d7065483365334b48344c446e4b38396b32506a556436504b4e4269614b52370000000000000000000000
Deployed Bytecode
0x6080604052600436106104355760003560e01c806370a08231116102295780639e6a1d7d1161012e578063c23dc68f116100b6578063e985e9c51161007a578063e985e9c514610cf7578063ed9ec88814610d17578063ede5a96d14610d44578063f2fde38b14610d70578063f421764814610d9057600080fd5b8063c23dc68f14610c5e578063c744656514610c8b578063c87b56dd14610ca1578063ca13229e14610cc1578063ddd1783a14610ce157600080fd5b8063ae941890116100fd578063ae94189014610bad578063b67f94ba14610bcd578063b6c912fc14610bed578063b88d4fde14610c1d578063be9a655514610c3d57600080fd5b80639e6a1d7d14610b45578063a0712d6814610b65578063a22cb46514610b78578063a475b5dd14610b9857600080fd5b80638d859f3e116101b157806391ca3bb51161018057806391ca3bb514610acf57806395d89b4114610ae4578063996517cf14610af957806399a2557a14610b0f5780639afb583014610b2f57600080fd5b80638d859f3e14610a5b5780638da5cb5b14610a715780638de48c0b14610a8f57806391b7f5ed14610aaf57600080fd5b80637ebd1b30116101f85780637ebd1b30146109b85780638462151c146109d85780638936bc1114610a055780638c59314f14610a1b5780638d0f8cef14610a3b57600080fd5b806370a0823114610926578063715018a614610946578063740090b41461095b5780637b2e5c371461098857600080fd5b8063381b965c1161033a57806351830227116102c25780635eeacb5f116102865780635eeacb5f146108915780636352211e146108b157806369e1fd3a146108d15780636c0360eb146108f15780636f8b44b01461090657600080fd5b806351830227146107ed57806353e911af1461080e57806355f804b31461082e5780635755294c1461084e5780635bbb21771461086457600080fd5b80633fe9cbed116103095780633fe9cbed1461074057806341626a6f1461076057806342842e0e1461078d57806342966c68146107ad578063475aa7a7146107cd57600080fd5b8063381b965c146106ae5780633af32abf146106ce5780633bdf4ac6146106fe5780633ccfd60b1461072b57600080fd5b806311264cf3116103bd57806326b6b7b71161038c57806326b6b7b71461060b5780632a85db55146106385780633132eb911461065857806332cb6b0c14610678578063369b012d1461068e57600080fd5b806311264cf31461059c57806315011a28146105b257806318160ddd146105d257806323b872dd146105eb57600080fd5b8063081812fc11610404578063081812fc146104f4578063091bd95314610514578063095ea7b3146105365780630c3f64bf146105565780630d1482d61461058657600080fd5b806301ffc9a714610441578063046ac3c81461047657806304d5e0e51461049a57806306fdde03146104d257600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b5061046161045c36600461333c565b610db0565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b5061048c60195481565b60405190815260200161046d565b3480156104a657600080fd5b506104ba6104b53660046133b9565b610e02565b6040516001600160a01b03909116815260200161046d565b3480156104de57600080fd5b506104e7610e2c565b60405161046d919061350b565b34801561050057600080fd5b506104ba61050f3660046133b9565b610ebe565b34801561052057600080fd5b5061053461052f3660046133b9565b610f02565b005b34801561054257600080fd5b506105346105513660046131bd565b610f3a565b34801561056257600080fd5b50610461610571366004613084565b60166020526000908152604090205460ff1681565b34801561059257600080fd5b5061048c601c5481565b3480156105a857600080fd5b5061048c60095481565b3480156105be57600080fd5b506105346105cd3660046133b9565b61100d565b3480156105de57600080fd5b506001546000540361048c565b3480156105f757600080fd5b506105346106063660046130d0565b61103c565b34801561061757600080fd5b5061048c610626366004613084565b601e6020526000908152604090205481565b34801561064457600080fd5b50610534610653366004613374565b61104c565b34801561066457600080fd5b50610534610673366004613218565b61108d565b34801561068457600080fd5b5061048c60245481565b34801561069a57600080fd5b506105346106a9366004613084565b611141565b3480156106ba57600080fd5b506105346106c93660046133b9565b6111b3565b3480156106da57600080fd5b506104616106e9366004613084565b60136020526000908152604090205460ff1681565b34801561070a57600080fd5b5061048c610719366004613084565b601f6020526000908152604090205481565b34801561073757600080fd5b506105346111e2565b34801561074c57600080fd5b5061053461075b3660046133b9565b611253565b34801561076c57600080fd5b5061048c61077b366004613084565b60216020526000908152604090205481565b34801561079957600080fd5b506105346107a83660046130d0565b611282565b3480156107b957600080fd5b506105346107c83660046133b9565b61129d565b3480156107d957600080fd5b506105346107e83660046133b9565b6112d0565b3480156107f957600080fd5b5060085461046190600160a01b900460ff1681565b34801561081a57600080fd5b50610534610829366004613218565b6112ff565b34801561083a57600080fd5b50610534610849366004613374565b6113d4565b34801561085a57600080fd5b5061048c601a5481565b34801561087057600080fd5b5061088461087f3660046132b6565b611411565b60405161046d9190613469565b34801561089d57600080fd5b506104ba6108ac3660046133b9565b611501565b3480156108bd57600080fd5b506104ba6108cc3660046133b9565b611511565b3480156108dd57600080fd5b506104ba6108ec3660046133b9565b61151c565b3480156108fd57600080fd5b506104e761152c565b34801561091257600080fd5b506105346109213660046133b9565b61155b565b34801561093257600080fd5b5061048c610941366004613084565b6115e0565b34801561095257600080fd5b5061053461162e565b34801561096757600080fd5b5061048c610976366004613084565b60226020526000908152604090205481565b34801561099457600080fd5b506104616109a3366004613084565b60156020526000908152604090205460ff1681565b3480156109c457600080fd5b506104ba6109d33660046133b9565b611664565b3480156109e457600080fd5b506109f86109f3366004613084565b611674565b60405161046d91906134d3565b348015610a1157600080fd5b5061048c600a5481565b348015610a2757600080fd5b50610534610a36366004613218565b611798565b348015610a4757600080fd5b50610534610a563660046131bd565b61186d565b348015610a6757600080fd5b5061048c60235481565b348015610a7d57600080fd5b506008546001600160a01b03166104ba565b348015610a9b57600080fd5b50600e546104ba906001600160a01b031681565b348015610abb57600080fd5b50610534610aca3660046133b9565b6118ff565b348015610adb57600080fd5b5061053461196b565b348015610af057600080fd5b506104e76119ae565b348015610b0557600080fd5b5061048c60175481565b348015610b1b57600080fd5b506109f8610b2a3660046131e6565b6119bd565b348015610b3b57600080fd5b5061048c601b5481565b348015610b5157600080fd5b50610534610b603660046133b9565b611b56565b610534610b733660046133b9565b611b85565b348015610b8457600080fd5b50610534610b93366004613183565b6122bc565b348015610ba457600080fd5b50610534612352565b348015610bb957600080fd5b50610534610bc83660046133b9565b612391565b348015610bd957600080fd5b50610534610be83660046133b9565b61246e565b348015610bf957600080fd5b50610461610c08366004613084565b60146020526000908152604090205460ff1681565b348015610c2957600080fd5b50610534610c3836600461310b565b61249d565b348015610c4957600080fd5b5060085461046190600160a81b900460ff1681565b348015610c6a57600080fd5b50610c7e610c793660046133b9565b6124e7565b60405161046d9190613578565b348015610c9757600080fd5b5061048c600b5481565b348015610cad57600080fd5b506104e7610cbc3660046133b9565b612550565b348015610ccd57600080fd5b50610534610cdc3660046133b9565b6125cd565b348015610ced57600080fd5b5061048c60185481565b348015610d0357600080fd5b50610461610d1236600461309e565b6125fc565b348015610d2357600080fd5b5061048c610d32366004613084565b601d6020526000908152604090205481565b348015610d5057600080fd5b5061048c610d5f366004613084565b602080526000908152604090205481565b348015610d7c57600080fd5b50610534610d8b366004613084565b61262a565b348015610d9c57600080fd5b50610534610dab366004613218565b6126c2565b60006301ffc9a760e01b6001600160e01b031983161480610de157506380ac58cd60e01b6001600160e01b03198316145b80610dfc5750635b5e139f60e01b6001600160e01b03198316145b92915050565b600f8181548110610e1257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060028054610e3b9061367a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e679061367a565b8015610eb45780601f10610e8957610100808354040283529160200191610eb4565b820191906000526020600020905b815481529060010190602001808311610e9757829003601f168201915b5050505050905090565b6000610ec982612797565b610ee6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6008546001600160a01b03163314610f355760405162461bcd60e51b8152600401610f2c90613543565b60405180910390fd5b600a55565b6000610f45826127be565b9050806001600160a01b0316836001600160a01b03161415610f7a5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610fb157610f9481336125fc565b610fb1576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6008546001600160a01b031633146110375760405162461bcd60e51b8152600401610f2c90613543565b601a55565b61104783838361281f565b505050565b6008546001600160a01b031633146110765760405162461bcd60e51b8152600401610f2c90613543565b805161108990600d906020840190612f23565b5050565b6008546001600160a01b031633146110b75760405162461bcd60e51b8152600401610f2c90613543565b80516110ca90600f906020840190612fa7565b5060005b8151811015611089576001601460008484815181106110fd57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611139816136b5565b9150506110ce565b6008546001600160a01b0316331461116b5760405162461bcd60e51b8152600401610f2c90613543565b6001600160a01b0381166111915760405162461bcd60e51b8152600401610f2c9061351e565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6008546001600160a01b031633146111dd5760405162461bcd60e51b8152600401610f2c90613543565b601855565b6008546001600160a01b0316331461120c5760405162461bcd60e51b8152600401610f2c90613543565b6008546001600160a01b03166040516001600160a01b039190911690303180156108fc02916000818181858888f19350505050158015611250573d6000803e3d6000fd5b50565b6008546001600160a01b0316331461127d5760405162461bcd60e51b8152600401610f2c90613543565b600955565b6110478383836040518060200160405280600081525061249d565b6008546001600160a01b031633146112c75760405162461bcd60e51b8152600401610f2c90613543565b611250816129b0565b6008546001600160a01b031633146112fa5760405162461bcd60e51b8152600401610f2c90613543565b601c55565b6008546001600160a01b031633146113295760405162461bcd60e51b8152600401610f2c90613543565b600081511161134a5760405162461bcd60e51b8152600401610f2c9061351e565b805161135d906011906020840190612fa7565b5060005b81518110156110895760016015600084848151811061139057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806113cc816136b5565b915050611361565b6008546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610f2c90613543565b805161108990600c906020840190612f23565b80516060906000816001600160401b0381111561143e57634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561148957816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161145c5790505b50905060005b8281146114f9576114c68582815181106114b957634e487b7160e01b600052603260045260246000fd5b60200260200101516124e7565b8282815181106114e657634e487b7160e01b600052603260045260246000fd5b602090810291909101015260010161148f565b509392505050565b60108181548110610e1257600080fd5b6000610dfc826127be565b60118181548110610e1257600080fd5b600854606090600160a01b900460ff161561154e57600c8054610e3b9061367a565b600d8054610e3b9061367a565b6008546001600160a01b031633146115855760405162461bcd60e51b8152600401610f2c90613543565b600154600054038110156115db5760405162461bcd60e51b815260206004820181905260248201527f63616e6e6f74206c6f776572207468616e2063757272656e7420737570706c796044820152606401610f2c565b602455565b60006001600160a01b038216611609576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b031633146116585760405162461bcd60e51b8152600401610f2c90613543565b61166260006129bb565b565b60128181548110610e1257600080fd5b60606000806000611684856115e0565b90506000816001600160401b038111156116ae57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156116d7578160200160208202803683370190505b5090506116fd604080516060810182526000808252602082018190529181019190915290565b60005b83861461178c5761171081612a0d565b915081604001511561172157611784565b81516001600160a01b03161561173657815194505b876001600160a01b0316856001600160a01b03161415611784578083878060010198508151811061177757634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611700565b50909695505050505050565b6008546001600160a01b031633146117c25760405162461bcd60e51b8152600401610f2c90613543565b60008151116117e35760405162461bcd60e51b8152600401610f2c9061351e565b80516117f6906010906020840190612fa7565b5060005b81518110156110895760016016600084848151811061182957634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611865816136b5565b9150506117fa565b6008546001600160a01b031633146118975760405162461bcd60e51b8152600401610f2c90613543565b602454816118a86001546000540390565b6118b29190613600565b11156118f55760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610f2c565b6110898282612a42565b6008546001600160a01b031633146119295760405162461bcd60e51b8152600401610f2c90613543565b600081116119665760405162461bcd60e51b815260206004820152600a6024820152697a65726f20707269636560b01b6044820152606401610f2c565b602355565b6008546001600160a01b031633146119955760405162461bcd60e51b8152600401610f2c90613543565b6008805460ff60a81b1916600160a81b17905542600b55565b606060038054610e3b9061367a565b60608183106119df57604051631960ccad60e11b815260040160405180910390fd5b6000806119eb60005490565b9050808411156119f9578093505b6000611a04876115e0565b905084861015611a235785850381811015611a1d578091505b50611a27565b5060005b6000816001600160401b03811115611a4f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611a78578160200160208202803683370190505b50905081611a8b579350611b4f92505050565b6000611a96886124e7565b905060008160400151611aa7575080515b885b888114158015611ab95750848714155b15611b4357611ac781612a0d565b9250826040015115611ad857611b3b565b82516001600160a01b031615611aed57825191505b8a6001600160a01b0316826001600160a01b03161415611b3b5780848880600101995081518110611b2e57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505b600101611aa9565b50505092835250909150505b9392505050565b6008546001600160a01b03163314611b805760405162461bcd60e51b8152600401610f2c90613543565b601755565b600854600160a81b900460ff16611bcf5760405162461bcd60e51b815260206004820152600e60248201526d1cd85b19481b9bdd081cdd185c9d60921b6044820152606401610f2c565b60008111611c0f5760405162461bcd60e51b815260206004820152600d60248201526c7a65726f207175616e7469747960981b6044820152606401610f2c565b60245481611c206001546000540390565b611c2a9190613600565b1115611c6d5760405162461bcd60e51b81526020600482015260126024820152711b585e081cdd5c1c1b1e481c995858da195960721b6044820152606401610f2c565b33600090815260166020526040812054819060ff168015611ca95750600954600a54600b54611c9c9190613600565b611ca69190613600565b42115b15611dc457601754601a54611cbe9190613600565b336000908152601d6020908152604080832054918052909120548591611ce391613600565b611ced9190613600565b1115611d305760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b6044820152606401610f2c565b601a5433600090815260208052604081205460019450909190611d539086613600565b1115611d7a57336000908152602080526040902054601a54611d759190613637565b611d7c565b835b9050611d888185613637565b336000908152602080526040812080549294508392909190611dab908490613600565b90915550508015611dc257611dc233826000612a5c565b505b600e546001600160a01b0316331415611ebf57601b54601754611de79190613600565b336000908152601d6020908152604080832054602190925290912054611e0d9190613600565b10611e4f5760405162461bcd60e51b81526020600482015260126024820152711b5a5b9d081b1a5b5a5d081c995858da195960721b6044820152606401610f2c565b601b543360009081526021602052604081205460019450909190611e739086613600565b1115611e9b5733600090815260216020526040902054601b54611e969190613637565b611e9d565b835b9050611ea98185613637565b91508015611ebd57611ebd33826002612a5c565b505b3360009081526015602052604090205460ff1615611fca57601954601754611ee79190613600565b336000908152601d6020908152604080832054601e90925290912054611f0d9190613600565b10611f5a5760405162461bcd60e51b815260206004820152601760248201527f66726565206d696e74206c696d697420726561636865640000000000000000006044820152606401610f2c565b601954336000908152601e602052604081205460019450909190611f7e9086613600565b1115611fa657336000908152601e6020526040902054601954611fa19190613637565b611fa8565b835b9050611fb48185613637565b91508015611fc857611fc833826001612a5c565b505b3360009081526013602052604090205460ff161561210857600a54600b54611ff29190613600565b4211801561201c5750600954600a54600b5461200e9190613600565b6120189190613600565b4211155b1561210857601854336000908152601f602052604090205461203f908590613600565b111561208d5760405162461bcd60e51b815260206004820152601c60248201527f77686974656c697374206d696e74206c696d69742072656163686564000000006044820152606401610f2c565b60235461209a9084613618565b3410156120d95760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610f2c565b336000908152601f6020526040812080548592906120f8908490613600565b9091555061104790503384612a42565b8161217c57601754336000908152601d602052604090205461212b908590613600565b11156121755760405162461bcd60e51b81526020600482015260196024820152781c1d589b1a58c81b5a5b9d081b1a5b5a5d081c995858da1959603a1b6044820152606401610f2c565b50816121e4565b601754336000908152601d602052604090205461219a908390613600565b11156121e45760405162461bcd60e51b81526020600482015260196024820152781c1d589b1a58c81b5a5b9d081b1a5b5a5d081c995858da1959603a1b6044820152606401610f2c565b801561104757600a54600b546121fa9190613600565b42111561227c5760235461220e9082613618565b34101561224d5760405162461bcd60e51b815260206004820152600d60248201526c76616c756520746f6f206c6f7760981b6044820152606401610f2c565b336000908152601d60205260408120805483929061226c908490613600565b9091555061104790503382612a42565b60405162461bcd60e51b81526020600482015260156024820152741c1d589b1a58c81b5a5b9d081b9bdd081cdd185c9d605a1b6044820152606401610f2c565b6001600160a01b0382163314156122e65760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b0316331461237c5760405162461bcd60e51b8152600401610f2c90613543565b6008805460ff60a01b1916600160a01b179055565b3360009081526014602052604090205460ff166123dd5760405162461bcd60e51b815260206004820152600a602482015269636f726573206f6e6c7960b01b6044820152606401610f2c565b601c54336000908152602260205260409020546123fb908390613600565b111561243f5760405162461bcd60e51b815260206004820152601360248201527218dbdc99481b1a5b5a5d081c99595858da1959606a1b6044820152606401610f2c565b336000908152602260205260408120805483929061245e908490613600565b9091555061125090503382612a42565b6008546001600160a01b031633146124985760405162461bcd60e51b8152600401610f2c90613543565b601955565b6124a884848461281f565b6001600160a01b0383163b156124e1576124c484848484612ae5565b6124e1576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101839052909150600054831061252c5792915050565b61253583612a0d565b90508060400151156125475792915050565b611b4f83612bdd565b606061255b82612797565b61257857604051630a14c4b560e41b815260040160405180910390fd5b600061258261152c565b600854909150600160a01b900460ff1661259c5780611b4f565b806125a684612c0b565b6040516020016125b79291906133fd565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146125f75760405162461bcd60e51b8152600401610f2c90613543565b601b55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b031633146126545760405162461bcd60e51b8152600401610f2c90613543565b6001600160a01b0381166126b95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f2c565b611250816129bb565b6008546001600160a01b031633146126ec5760405162461bcd60e51b8152600401610f2c90613543565b600081511161270d5760405162461bcd60e51b8152600401610f2c9061351e565b8051612720906012906020840190612fa7565b5060005b81518110156110895760016013600084848151811061275357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061278f816136b5565b915050612724565b6000805482108015610dfc575050600090815260046020526040902054600160e01b161590565b60008160005481101561280657600081815260046020526040902054600160e01b8116612804575b80611b4f5750600019016000818152600460205260409020546127e6565b505b604051636f96cda160e11b815260040160405180910390fd5b600061282a826127be565b9050836001600160a01b0316816001600160a01b03161461285d5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061287b575061287b85336125fc565b8061289657503361288b84610ebe565b6001600160a01b0316145b9050806128b657604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166128dd57604051633a954ecd60e21b815260040160405180910390fd5b600083815260066020908152604080832080546001600160a01b03191690556001600160a01b038881168452600583528184208054600019019055871683528083208054600101905585835260049091529020600160e11b4260a01b86178117909155821661297a57600183016000818152600460205260409020546129785760005481146129785760008181526004602052604090208390555b505b82846001600160a01b0316866001600160a01b031660008051602061371383398151915260405160405180910390a45050505050565b611250816000612c5a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160608101825260008082526020820181905291810191909152600082815260046020526040902054610dfc90612d9c565b611089828260405180602001604052806000815250612dd6565b8060011415612a8f57336000908152601e602052604081208054849290612a84908490613600565b90915550612adb9050565b8060021415612ab7573360009081526021602052604081208054849290612a84908490613600565b33600090815260208052604081208054849290612ad5908490613600565b90915550505b6110478383612a42565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612b1a90339089908890889060040161342c565b602060405180830381600087803b158015612b3457600080fd5b505af1925050508015612b64575060408051601f3d908101601f19168201909252612b6191810190613358565b60015b612bbf573d808015612b92576040519150601f19603f3d011682016040523d82523d6000602084013e612b97565b606091505b508051612bb7576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160608101825260008082526020820181905291810191909152610dfc612c06836127be565b612d9c565b604080516080810191829052607f0190826030600a8206018353600a90045b8015612c4857600183039250600a81066030018353600a9004612c2a565b50819003601f19909101908152919050565b6000612c65836127be565b9050808215612cc9576000336001600160a01b0383161480612c8c5750612c8c82336125fc565b80612ca7575033612c9c86610ebe565b6001600160a01b0316145b905080612cc757604051632ce44b5f60e11b815260040160405180910390fd5b505b600084815260066020908152604080832080546001600160a01b03191690556001600160a01b03841683526005825280832080546fffffffffffffffffffffffffffffffff01905586835260049091529020600360e01b4260a01b8317179055600160e11b8216612d685760018401600081815260046020526040902054612d66576000548114612d665760008181526004602052604090208390555b505b60405184906000906001600160a01b03841690600080516020613713833981519152908390a4505060018054810190555050565b604080516060810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b90921615159082015290565b6000546001600160a01b038416612dff57604051622e076360e81b815260040160405180910390fd5b82612e1d5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b15612ee0575b60405182906001600160a01b03881690600090600080516020613713833981519152908290a4612ea96000878480600101955087612ae5565b612ec6576040516368d2bf6b60e11b815260040160405180910390fd5b808210612e70578260005414612edb57600080fd5b612f13565b5b6040516001830192906001600160a01b03881690600090600080516020613713833981519152908290a4808210612ee1575b5060009081556124e19085838684565b828054612f2f9061367a565b90600052602060002090601f016020900481019282612f515760008555612f97565b82601f10612f6a57805160ff1916838001178555612f97565b82800160010185558215612f97579182015b82811115612f97578251825591602001919060010190612f7c565b50612fa3929150612ffc565b5090565b828054828255906000526020600020908101928215612f97579160200282015b82811115612f9757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fc7565b5b80821115612fa35760008155600101612ffd565b60006001600160401b0383111561302a5761302a6136e6565b61303d601f8401601f19166020016135ad565b905082815283838301111561305157600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b038116811461307f57600080fd5b919050565b600060208284031215613095578081fd5b611b4f82613068565b600080604083850312156130b0578081fd5b6130b983613068565b91506130c760208401613068565b90509250929050565b6000806000606084860312156130e4578081fd5b6130ed84613068565b92506130fb60208501613068565b9150604084013590509250925092565b60008060008060808587031215613120578081fd5b61312985613068565b935061313760208601613068565b92506040850135915060608501356001600160401b03811115613158578182fd5b8501601f81018713613168578182fd5b61317787823560208401613011565b91505092959194509250565b60008060408385031215613195578182fd5b61319e83613068565b9150602083013580151581146131b2578182fd5b809150509250929050565b600080604083850312156131cf578182fd5b6131d883613068565b946020939093013593505050565b6000806000606084860312156131fa578283fd5b61320384613068565b95602085013595506040909401359392505050565b6000602080838503121561322a578182fd5b82356001600160401b0381111561323f578283fd5b8301601f8101851361324f578283fd5b803561326261325d826135dd565b6135ad565b80828252848201915084840188868560051b8701011115613281578687fd5b8694505b838510156132aa5761329681613068565b835260019490940193918501918501613285565b50979650505050505050565b600060208083850312156132c8578182fd5b82356001600160401b038111156132dd578283fd5b8301601f810185136132ed578283fd5b80356132fb61325d826135dd565b80828252848201915084840188868560051b870101111561331a578687fd5b8694505b838510156132aa57803583526001949094019391850191850161331e565b60006020828403121561334d578081fd5b8135611b4f816136fc565b600060208284031215613369578081fd5b8151611b4f816136fc565b600060208284031215613385578081fd5b81356001600160401b0381111561339a578182fd5b8201601f810184136133aa578182fd5b612bd584823560208401613011565b6000602082840312156133ca578081fd5b5035919050565b600081518084526133e981602086016020860161364e565b601f01601f19169290920160200192915050565b6000835161340f81846020880161364e565b83519083019061342381836020880161364e565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061345f908301846133d1565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561178c576134c083855180516001600160a01b031682526020808201516001600160401b0316908301526040908101511515910152565b9284019260609290920191600101613485565b6020808252825182820181905260009190848201906040850190845b8181101561178c578351835292840192918401916001016134ef565b602081526000611b4f60208301846133d1565b6020808252600b908201526a0f4cae4de40d8cadccee8d60ab1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b81516001600160a01b031681526020808301516001600160401b03169082015260408083015115159082015260608101610dfc565b604051601f8201601f191681016001600160401b03811182821017156135d5576135d56136e6565b604052919050565b60006001600160401b038211156135f6576135f66136e6565b5060051b60200190565b60008219821115613613576136136136d0565b500190565b6000816000190483118215151615613632576136326136d0565b500290565b600082821015613649576136496136d0565b500390565b60005b83811015613669578181015183820152602001613651565b838111156124e15750506000910152565b600181811c9082168061368e57607f821691505b602082108114156136af57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156136c9576136c96136d0565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461125057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122016cfe8cc7bc5e5a903efd7e81842e0a311fc36a6b5bfcd603dc3e4e63518154f64736f6c63430008040033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000f8b0a10e4700000000000000000000000000000000000000000000000000000000000000001f90000000000000000000000000000000000000000000000000000000000000000e4e6f4e6f2066726f6d205345455200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044e4f4e4f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5242526779767037784665454d7065483365334b48344c446e4b38396b32506a556436504b4e4269614b52370000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): NoNo from SEER
Arg [1] : symbol (string): NONO
Arg [2] : uri (string):
Arg [3] : preUri (string): ipfs://QmRBRgyvp7xFeEMpeH3e3KH4LDnK89k2PjUd6PKNBiaKR7
Arg [4] : mintPrice (uint256): 70000000000000000
Arg [5] : maxSupply (uint256): 8080
-----Encoded View---------------
14 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [4] : 00000000000000000000000000000000000000000000000000f8b0a10e470000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000001f90
Arg [6] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [7] : 4e6f4e6f2066726f6d2053454552000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 4e4f4e4f00000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [11] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [12] : 697066733a2f2f516d5242526779767037784665454d7065483365334b48344c
Arg [13] : 446e4b38396b32506a556436504b4e4269614b52370000000000000000000000
Deployed Bytecode Sourcemap
50619:9503:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15602:615;;;;;;;;;;-1:-1:-1;15602:615:0;;;;;:::i;:::-;;:::i;:::-;;;9469:14:1;;9462:22;9444:41;;9432:2;9417:18;15602:615:0;;;;;;;;51414:29;;;;;;;;;;;;;;;;;;;15763:25:1;;;15751:2;15736:18;51414:29:0;15718:76:1;51035:22:0;;;;;;;;;;-1:-1:-1;51035:22:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7399:32:1;;;7381:51;;7369:2;7354:18;51035:22:0;7336:102:1;20615:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22683:204::-;;;;;;;;;;-1:-1:-1;22683:204:0;;;;;:::i;:::-;;:::i;52959:114::-;;;;;;;;;;-1:-1:-1;52959:114:0;;;;;:::i;:::-;;:::i;:::-;;22143:474;;;;;;;;;;-1:-1:-1;22143:474:0;;;;;:::i;:::-;;:::i;51297:37::-;;;;;;;;;;-1:-1:-1;51297:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;51521:28;;;;;;;;;;;;;;;;50830;;;;;;;;;;;;;;;;54225:114;;;;;;;;;;-1:-1:-1;54225:114:0;;;;;:::i;:::-;;:::i;14656:315::-;;;;;;;;;;-1:-1:-1;14922:12:0;;14709:7;14906:13;:28;14656:315;;23569:170;;;;;;;;;;-1:-1:-1;23569:170:0;;;;;:::i;:::-;;:::i;51607:49::-;;;;;;;;;;-1:-1:-1;51607:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;53298:101;;;;;;;;;;-1:-1:-1;53298:101:0;;;;;:::i;:::-;;:::i;54609:199::-;;;;;;;;;;-1:-1:-1;54609:199:0;;;;;:::i;:::-;;:::i;51920:25::-;;;;;;;;;;;;;;;;55322:155;;;;;;;;;;-1:-1:-1;55322:155:0;;;;;:::i;:::-;;:::i;53949:138::-;;;;;;;;;;-1:-1:-1;53949:138:0;;;;;:::i;:::-;;:::i;51154:45::-;;;;;;;;;;-1:-1:-1;51154:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;51663:53;;;;;;;;;;-1:-1:-1;51663:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;55968:106;;;;;;;;;;;;;:::i;53081:110::-;;;;;;;;;;-1:-1:-1;53081:110:0;;;;;:::i;:::-;;:::i;51777:50::-;;;;;;;;;;-1:-1:-1;51777:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;23810:185;;;;;;;;;;-1:-1:-1;23810:185:0;;;;;:::i;:::-;;:::i;56082:83::-;;;;;;;;;;-1:-1:-1;56082:83:0;;;;;:::i;:::-;;:::i;54481:120::-;;;;;;;;;;-1:-1:-1;54481:120:0;;;;;:::i;:::-;;:::i;50779:20::-;;;;;;;;;;-1:-1:-1;50779:20:0;;;;-1:-1:-1;;;50779:20:0;;;;;;55065:250;;;;;;;;;;-1:-1:-1;55065:250:0;;;;;:::i;:::-;;:::i;53199:91::-;;;;;;;;;;-1:-1:-1;53199:91:0;;;;;:::i;:::-;;:::i;51450:27::-;;;;;;;;;;;;;;;;42404:468;;;;;;;;;;-1:-1:-1;42404:468:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;51064:21::-;;;;;;;;;;-1:-1:-1;51064:21:0;;;;;:::i;:::-;;:::i;20404:144::-;;;;;;;;;;-1:-1:-1;20404:144:0;;;;;:::i;:::-;;:::i;51092:22::-;;;;;;;;;;-1:-1:-1;51092:22:0;;;;;:::i;:::-;;:::i;52468:180::-;;;;;;;;;;;;;:::i;53545:174::-;;;;;;;;;;-1:-1:-1;53545:174:0;;;;;:::i;:::-;;:::i;16281:224::-;;;;;;;;;;-1:-1:-1;16281:224:0;;;;;:::i;:::-;;:::i;49735:103::-;;;;;;;;;;;;;:::i;51834:48::-;;;;;;;;;;-1:-1:-1;51834:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;51251:39;;;;;;;;;;-1:-1:-1;51251:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;51121:26;;;;;;;;;;-1:-1:-1;51121:26:0;;;;;:::i;:::-;;:::i;46216:892::-;;;;;;;;;;-1:-1:-1;46216:892:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50865:30::-;;;;;;;;;;;;;;;;54816:241;;;;;;;;;;-1:-1:-1;54816:241:0;;;;;:::i;:::-;;:::i;55777:183::-;;;;;;;;;;-1:-1:-1;55777:183:0;;;;;:::i;:::-;;:::i;51893:20::-;;;;;;;;;;;;;;;;49084:87;;;;;;;;;;-1:-1:-1;49157:6:0;;-1:-1:-1;;;;;49157:6:0;49084:87;;51000:28;;;;;;;;;;-1:-1:-1;51000:28:0;;;;-1:-1:-1;;;;;51000:28:0;;;53407:130;;;;;;;;;;-1:-1:-1;53407:130:0;;;;;:::i;:::-;;:::i;53727:104::-;;;;;;;;;;;;;:::i;20784:::-;;;;;;;;;;;;;:::i;51343:24::-;;;;;;;;;;;;;;;;43262:2505;;;;;;;;;;-1:-1:-1;43262:2505:0;;;;;:::i;:::-;;:::i;51484:30::-;;;;;;;;;;;;;;;;53839:102;;;;;;;;;;-1:-1:-1;53839:102:0;;;;;:::i;:::-;;:::i;56173:3279::-;;;;;;:::i;:::-;;:::i;22959:308::-;;;;;;;;;;-1:-1:-1;22959:308:0;;;;;:::i;:::-;;:::i;52389:71::-;;;;;;;;;;;;;:::i;59460:254::-;;;;;;;;;;-1:-1:-1;59460:254:0;;;;;:::i;:::-;;:::i;54095:122::-;;;;;;;;;;-1:-1:-1;54095:122:0;;;;;:::i;:::-;;:::i;51206:38::-;;;;;;;;;;-1:-1:-1;51206:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24066:396;;;;;;;;;;-1:-1:-1;24066:396:0;;;;;:::i;:::-;;:::i;50806:17::-;;;;;;;;;;-1:-1:-1;50806:17:0;;;;-1:-1:-1;;;50806:17:0;;;;;;41825:420;;;;;;;;;;-1:-1:-1;41825:420:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;50904:22::-;;;;;;;;;;;;;;;;52656:295;;;;;;;;;;-1:-1:-1;52656:295:0;;;;;:::i;:::-;;:::i;54347:126::-;;;;;;;;;;-1:-1:-1;54347:126:0;;;;;:::i;:::-;;:::i;51374:33::-;;;;;;;;;;;;;;;;23338:164;;;;;;;;;;-1:-1:-1;23338:164:0;;;;;:::i;:::-;;:::i;51556:44::-;;;;;;;;;;-1:-1:-1;51556:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;51723:47;;;;;;;;;;-1:-1:-1;51723:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;49993:201;;;;;;;;;;-1:-1:-1;49993:201:0;;;;;:::i;:::-;;:::i;55485:284::-;;;;;;;;;;-1:-1:-1;55485:284:0;;;;;:::i;:::-;;:::i;15602:615::-;15687:4;-1:-1:-1;;;;;;;;;15987:25:0;;;;:102;;-1:-1:-1;;;;;;;;;;16064:25:0;;;15987:102;:179;;;-1:-1:-1;;;;;;;;;;16141:25:0;;;15987:179;15967:199;15602:615;-1:-1:-1;;15602:615:0:o;51035:22::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;51035:22:0;;-1:-1:-1;51035:22:0;:::o;20615:100::-;20669:13;20702:5;20695:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20615:100;:::o;22683:204::-;22751:7;22776:16;22784:7;22776;:16::i;:::-;22771:64;;22801:34;;-1:-1:-1;;;22801:34:0;;;;;;;;;;;22771:64;-1:-1:-1;22855:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22855:24:0;;22683:204::o;52959:114::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;;;;;;;;;53037:15:::1;:28:::0;52959:114::o;22143:474::-;22216:13;22248:27;22267:7;22248:18;:27::i;:::-;22216:61;;22298:5;-1:-1:-1;;;;;22292:11:0;:2;-1:-1:-1;;;;;22292:11:0;;22288:48;;;22312:24;;-1:-1:-1;;;22312:24:0;;;;;;;;;;;22288:48;47882:10;-1:-1:-1;;;;;22353:28:0;;;22349:175;;22401:44;22418:5;47882:10;23338:164;:::i;22401:44::-;22396:128;;22473:35;;-1:-1:-1;;;22473:35:0;;;;;;;;;;;22396:128;22536:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;22536:29:0;-1:-1:-1;;;;;22536:29:0;;;;;;;;;22581:28;;22536:24;;22581:28;;;;;;;22143:474;;;:::o;54225:114::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54303:12:::1;:28:::0;54225:114::o;23569:170::-;23703:28;23713:4;23719:2;23723:7;23703:9;:28::i;:::-;23569:170;;;:::o;53298:101::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53372:19;;::::1;::::0;:13:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;:::-;;53298:101:::0;:::o;54609:199::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54682:14;;::::1;::::0;:5:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;54711:9;54707:94;54730:6;:13;54726:1;:17;54707:94;;;54785:4;54765:6;:17;54772:6;54779:1;54772:9;;;;;;-1:-1:-1::0;;;54772:9:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;54765:17:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;54765:17:0;:24;;-1:-1:-1;;54765:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54745:3;::::1;::::0;::::1;:::i;:::-;;;;54707:94;;55322:155:::0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;55396:21:0;::::1;55388:45;;;;-1:-1:-1::0;;;55388:45:0::1;;;;;;;:::i;:::-;55446:13;:23:::0;;-1:-1:-1;;;;;;55446:23:0::1;-1:-1:-1::0;;;;;55446:23:0;;;::::1;::::0;;;::::1;::::0;;55322:155::o;53949:138::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54039:18:::1;:40:::0;53949:138::o;55968:106::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;49157:6;;-1:-1:-1;;;;;49157:6:0;56018:48:::1;::::0;-1:-1:-1;;;;;56018:25:0;;;::::1;::::0;56052:4:::1;56044:21;56018:48:::0;::::1;;;::::0;::::1;::::0;;;56044:21;56018:25;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;55968:106::o:0;53081:110::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53157:13:::1;:26:::0;53081:110::o;23810:185::-;23948:39;23965:4;23971:2;23975:7;23948:39;;;;;;;;;;;;:16;:39::i;56082:83::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;56143:14:::1;56149:7;56143:5;:14::i;54481:120::-:0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54562:13:::1;:31:::0;54481:120::o;55065:250::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;55162:1:::1;55146:6;:13;:17;55138:41;;;;-1:-1:-1::0;;;55138:41:0::1;;;;;;;:::i;:::-;55192:14:::0;;::::1;::::0;:5:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55221:9;55217:91;55236:6;:13;55232:1;:17;55217:91;;;55292:4;55271:7;:18;55279:6;55286:1;55279:9;;;;;;-1:-1:-1::0;;;55279:9:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;55271:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;55271:18:0;:25;;-1:-1:-1;;55271:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55251:3;::::1;::::0;::::1;:::i;:::-;;;;55217:91;;53199::::0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53268:14;;::::1;::::0;:8:::1;::::0;:14:::1;::::0;::::1;::::0;::::1;:::i;42404:468::-:0;42579:15;;42493:23;;42554:22;42579:15;-1:-1:-1;;;;;42646:36:0;;;;;-1:-1:-1;;;42646:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;42646:36:0;;-1:-1:-1;;42646:36:0;;;;;;;;;;;;42609:73;;42702:9;42697:125;42718:14;42713:1;:19;42697:125;;42774:32;42794:8;42803:1;42794:11;;;;;;-1:-1:-1;;;42794:11:0;;;;;;;;;;;;;;;42774:19;:32::i;:::-;42758:10;42769:1;42758:13;;;;;;-1:-1:-1;;;42758:13:0;;;;;;;;;;;;;;;;;;:48;42734:3;;42697:125;;;-1:-1:-1;42843:10:0;42404:468;-1:-1:-1;;;42404:468:0:o;51064:21::-;;;;;;;;;;;;20404:144;20468:7;20511:27;20530:7;20511:18;:27::i;51092:22::-;;;;;;;;;;;;52468:180;52536:8;;52507:13;;-1:-1:-1;;;52536:8:0;;;;52533:108;;;52568:8;52561:15;;;;;:::i;52533:108::-;52616:13;52609:20;;;;;:::i;53545:174::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;14922:12;;14709:7;14906:13;:28;53621:6:::1;:23;;53613:68;;;::::0;-1:-1:-1;;;53613:68:0;;15190:2:1;53613:68:0::1;::::0;::::1;15172:21:1::0;;;15209:18;;;15202:30;15268:34;15248:18;;;15241:62;15320:18;;53613:68:0::1;15162:182:1::0;53613:68:0::1;53692:10;:19:::0;53545:174::o;16281:224::-;16345:7;-1:-1:-1;;;;;16369:19:0;;16365:60;;16397:28;;-1:-1:-1;;;16397:28:0;;;;;;;;;;;16365:60;-1:-1:-1;;;;;;16443:25:0;;;;;:18;:25;;;;;;-1:-1:-1;;;;;16443:54:0;;16281:224::o;49735:103::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;49800:30:::1;49827:1;49800:18;:30::i;:::-;49735:103::o:0;51121:26::-;;;;;;;;;;;;46216:892;46286:16;46340:19;46374:25;46414:22;46439:16;46449:5;46439:9;:16::i;:::-;46414:41;;46470:25;46512:14;-1:-1:-1;;;;;46498:29:0;;;;;-1:-1:-1;;;46498:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46498:29:0;;46470:57;;46542:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;46542:31:0;46593:9;46588:472;46637:14;46622:11;:29;46588:472;;46689:15;46702:1;46689:12;:15::i;:::-;46677:27;;46727:9;:16;;;46723:73;;;46768:8;;46723:73;46818:14;;-1:-1:-1;;;;;46818:28:0;;46814:111;;46891:14;;;-1:-1:-1;46814:111:0;46968:5;-1:-1:-1;;;;;46947:26:0;:17;-1:-1:-1;;;;;46947:26:0;;46943:102;;;47024:1;46998:8;47007:13;;;;;;46998:23;;;;;;-1:-1:-1;;;46998:23:0;;;;;;;;;;;;;;:27;;;;;46943:102;46653:3;;46588:472;;;-1:-1:-1;47081:8:0;;46216:892;-1:-1:-1;;;;;;46216:892:0:o;54816:241::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54910:1:::1;54895:5;:12;:16;54887:40;;;;-1:-1:-1::0;;;54887:40:0::1;;;;;;;:::i;:::-;54940:12:::0;;::::1;::::0;:4:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;;54967:9;54963:87;54982:5;:12;54978:1;:16;54963:87;;;55034:4;55016:5;:15;55022:5;55028:1;55022:8;;;;;;-1:-1:-1::0;;;55022:8:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;55016:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;55016:15:0;:22;;-1:-1:-1;;55016:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;54996:3;::::1;::::0;::::1;:::i;:::-;;;;54963:87;;55777:183:::0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;55885:10:::1;;55873:8;55859:13;14922:12:::0;;14709:7;14906:13;:28;;14656:315;55859:13:::1;:22;;;;:::i;:::-;:36;;55851:67;;;::::0;-1:-1:-1;;;55851:67:0;;12766:2:1;55851:67:0::1;::::0;::::1;12748:21:1::0;12805:2;12785:18;;;12778:30;-1:-1:-1;;;12824:18:1;;;12817:48;12882:18;;55851:67:0::1;12738:168:1::0;55851:67:0::1;55929:23;55939:2;55943:8;55929:9;:23::i;53407:130::-:0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53488:1:::1;53479:6;:10;53471:33;;;::::0;-1:-1:-1;;;53471:33:0;;12427:2:1;53471:33:0::1;::::0;::::1;12409:21:1::0;12466:2;12446:18;;;12439:30;-1:-1:-1;;;12485:18:1;;;12478:40;12535:18;;53471:33:0::1;12399:160:1::0;53471:33:0::1;53515:5;:14:::0;53407:130::o;53727:104::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53775:5:::1;:12:::0;;-1:-1:-1;;;;53775:12:0::1;-1:-1:-1::0;;;53775:12:0::1;::::0;;53808:15:::1;53798:7;:25:::0;53727:104::o;20784:::-;20840:13;20873:7;20866:14;;;;;:::i;43262:2505::-;43397:16;43464:4;43455:5;:13;43451:45;;43477:19;;-1:-1:-1;;;43477:19:0;;;;;;;;;;;43451:45;43511:19;43545:17;43565:14;14397:7;14424:13;;14350:95;43565:14;43545:34;-1:-1:-1;43816:9:0;43809:4;:16;43805:73;;;43853:9;43846:16;;43805:73;43892:25;43920:16;43930:5;43920:9;:16::i;:::-;43892:44;;44114:4;44106:5;:12;44102:278;;;44161:12;;;44196:31;;;44192:111;;;44272:11;44252:31;;44192:111;44102:278;;;;-1:-1:-1;44363:1:0;44102:278;44394:25;44436:17;-1:-1:-1;;;;;44422:32:0;;;;;-1:-1:-1;;;44422:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44422:32:0;-1:-1:-1;44394:60:0;-1:-1:-1;44473:22:0;44469:78;;44523:8;-1:-1:-1;44516:15:0;;-1:-1:-1;;;44516:15:0;44469:78;44691:31;44725:26;44745:5;44725:19;:26::i;:::-;44691:60;;44766:25;45011:9;:16;;;45006:92;;-1:-1:-1;45068:14:0;;45006:92;45129:5;45112:478;45141:4;45136:1;:9;;:45;;;;;45164:17;45149:11;:32;;45136:45;45112:478;;;45219:15;45232:1;45219:12;:15::i;:::-;45207:27;;45257:9;:16;;;45253:73;;;45298:8;;45253:73;45348:14;;-1:-1:-1;;;;;45348:28:0;;45344:111;;45421:14;;;-1:-1:-1;45344:111:0;45498:5;-1:-1:-1;;;;;45477:26:0;:17;-1:-1:-1;;;;;45477:26:0;;45473:102;;;45554:1;45528:8;45537:13;;;;;;45528:23;;;;;;-1:-1:-1;;;45528:23:0;;;;;;;;;;;;;;:27;;;;;45473:102;45183:3;;45112:478;;;-1:-1:-1;;;45675:29:0;;;-1:-1:-1;45682:8:0;;-1:-1:-1;;43262:2505:0;;;;;;:::o;53839:102::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;53911:9:::1;:22:::0;53839:102::o;56173:3279::-;56241:5;;-1:-1:-1;;;56241:5:0;;;;56233:32;;;;-1:-1:-1;;;56233:32:0;;11378:2:1;56233:32:0;;;11360:21:1;11417:2;11397:18;;;11390:30;-1:-1:-1;;;11436:18:1;;;11429:44;11490:18;;56233:32:0;11350:164:1;56233:32:0;56295:1;56284:8;:12;56276:38;;;;-1:-1:-1;;;56276:38:0;;14848:2:1;56276:38:0;;;14830:21:1;14887:2;14867:18;;;14860:30;-1:-1:-1;;;14906:18:1;;;14899:43;14959:18;;56276:38:0;14820:163:1;56276:38:0;56361:10;;56349:8;56333:13;14922:12;;14709:7;14906:13;:28;;14656:315;56333:13;:24;;;;:::i;:::-;:38;;56325:69;;;;-1:-1:-1;;;56325:69:0;;12766:2:1;56325:69:0;;;12748:21:1;12805:2;12785:18;;;12778:30;-1:-1:-1;;;12824:18:1;;;12817:48;12882:18;;56325:69:0;12738:168:1;56325:69:0;56475:10;56415:13;56469:17;;;:5;:17;;;;;;56415:13;;56469:17;;:80;;;;;56536:13;;56518:15;;56508:7;;:25;;;;:::i;:::-;:41;;;;:::i;:::-;56490:15;:59;56469:80;56466:635;;;56652:9;;56637:12;;:24;;;;:::i;:::-;56611:10;56601:21;;;;:9;:21;;;;;;;;;56574:24;;;;;;;56625:8;;56574:48;;;:::i;:::-;:59;;;;:::i;:::-;:87;;56566:118;;;;-1:-1:-1;;;56566:118:0;;14501:2:1;56566:118:0;;;14483:21:1;14540:2;14520:18;;;14513:30;-1:-1:-1;;;14559:18:1;;;14552:48;14617:18;;56566:118:0;14473:168:1;56566:118:0;56802:12;;56787:10;56745:15;56774:24;;;:12;:24;;;;;;56724:4;;-1:-1:-1;56745:15:0;;56802:12;56763:35;;:8;:35;:::i;:::-;:51;;:130;;56882:10;56869:24;;;;:12;:24;;;;;;56854:12;;:39;;56869:24;56854:39;:::i;:::-;56763:130;;;56830:8;56763:130;56745:148;-1:-1:-1;56921:18:0;56745:148;56921:8;:18;:::i;:::-;56969:10;56956:24;;;;:12;:24;;;;;:35;;56910:29;;-1:-1:-1;56984:7:0;;56956:24;;;:35;;56984:7;;56956:35;:::i;:::-;;;;-1:-1:-1;;57009:11:0;;57006:84;;57041:33;57051:10;57063:7;57072:1;57041:9;:33::i;:::-;56466:635;;57114:13;;-1:-1:-1;;;;;57114:13:0;57131:10;57114:27;57111:550;;;57232:15;;57220:9;;:27;;;;:::i;:::-;57206:10;57196:21;;;;:9;:21;;;;;;;;;57166:15;:27;;;;;;;:51;;57196:21;57166:51;:::i;:::-;:81;57158:112;;;;-1:-1:-1;;;57158:112:0;;14501:2:1;57158:112:0;;;14483:21:1;14540:2;14520:18;;;14513:30;-1:-1:-1;;;14559:18:1;;;14552:48;14617:18;;57158:112:0;14473:168:1;57158:112:0;57382:15;;57367:10;57319:18;57351:27;;;:15;:27;;;;;;57298:4;;-1:-1:-1;57319:18:0;;57382:15;57340:38;;:8;:38;:::i;:::-;:57;;:142;;57471:10;57455:27;;;;:15;:27;;;;;;57437:15;;:45;;57455:27;57437:45;:::i;:::-;57340:142;;;57413:8;57340:142;57319:163;-1:-1:-1;57510:21:0;57319:163;57510:8;:21;:::i;:::-;57499:32;-1:-1:-1;57563:14:0;;57560:90;;57598:36;57608:10;57620;57632:1;57598:9;:36::i;:::-;57111:550;;57682:10;57674:19;;;;:7;:19;;;;;;;;57671:537;;;57783:14;;57771:9;;:26;;;;:::i;:::-;57757:10;57747:21;;;;:9;:21;;;;;;;;;57718:14;:26;;;;;;;:50;;57747:21;57718:50;:::i;:::-;:79;57710:115;;;;-1:-1:-1;;;57710:115:0;;11721:2:1;57710:115:0;;;11703:21:1;11760:2;11740:18;;;11733:30;11799:25;11779:18;;;11772:53;11842:18;;57710:115:0;11693:173:1;57710:115:0;57947:14;;57932:10;57886:17;57917:26;;;:14;:26;;;;;;57865:4;;-1:-1:-1;57886:17:0;;57947:14;57906:37;;:8;:37;:::i;:::-;:55;;:138;;58033:10;58018:26;;;;:14;:26;;;;;;58001:14;;:43;;58018:26;58001:43;:::i;:::-;57906:138;;;57977:8;57906:138;57886:158;-1:-1:-1;58072:20:0;57886:158;58072:8;:20;:::i;:::-;58061:31;-1:-1:-1;58112:13:0;;58109:88;;58146:35;58156:10;58168:9;58179:1;58146:9;:35::i;:::-;57671:537;;58257:10;58243:25;;;;:13;:25;;;;;;;;58240:520;;;58317:15;;58307:7;;:25;;;;:::i;:::-;58289:15;:43;:107;;;;;58383:13;;58365:15;;58355:7;;:25;;;;:::i;:::-;:41;;;;:::i;:::-;58336:15;:60;;58289:107;58285:464;;;58470:18;;58444:10;58425:30;;;;:18;:30;;;;;;:41;;58458:8;;58425:41;:::i;:::-;:63;;58417:104;;;;-1:-1:-1;;;58417:104:0;;10679:2:1;58417:104:0;;;10661:21:1;10718:2;10698:18;;;10691:30;10757;10737:18;;;10730:58;10805:18;;58417:104:0;10651:178:1;58417:104:0;58572:5;;58561:16;;:8;:16;:::i;:::-;58548:9;:29;;58540:55;;;;-1:-1:-1;;;58540:55:0;;11036:2:1;58540:55:0;;;11018:21:1;11075:2;11055:18;;;11048:30;-1:-1:-1;;;11094:18:1;;;11087:43;11147:18;;58540:55:0;11008:163:1;58540:55:0;58635:10;58616:30;;;;:18;:30;;;;;:42;;58650:8;;58616:30;:42;;58650:8;;58616:42;:::i;:::-;;;;-1:-1:-1;58677:31:0;;-1:-1:-1;58687:10:0;58699:8;58677:9;:31::i;58285:464::-;58794:8;58790:286;;58863:9;;58837:10;58827:21;;;;:9;:21;;;;;;:32;;58851:8;;58827:32;:::i;:::-;:45;;58819:83;;;;-1:-1:-1;;;58819:83:0;;12073:2:1;58819:83:0;;;12055:21:1;12112:2;12092:18;;;12085:30;-1:-1:-1;;;12131:18:1;;;12124:55;12196:18;;58819:83:0;12045:175:1;58819:83:0;-1:-1:-1;58940:8:0;58790:286;;;59025:9;;58999:10;58989:21;;;;:9;:21;;;;;;:32;;59013:8;;58989:32;:::i;:::-;:45;;58981:83;;;;-1:-1:-1;;;58981:83:0;;12073:2:1;58981:83:0;;;12055:21:1;12112:2;12092:18;;;12085:30;-1:-1:-1;;;12131:18:1;;;12124:55;12196:18;;58981:83:0;12045:175:1;58981:83:0;59093:12;;59090:355;;59153:15;;59143:7;;:25;;;;:::i;:::-;59125:15;:43;59122:312;;;59221:5;;59210:16;;:8;:16;:::i;:::-;59197:9;:29;;59189:55;;;;-1:-1:-1;;;59189:55:0;;11036:2:1;59189:55:0;;;11018:21:1;11075:2;11055:18;;;11048:30;-1:-1:-1;;;11094:18:1;;;11087:43;11147:18;;59189:55:0;11008:163:1;59189:55:0;59273:10;59263:21;;;;:9;:21;;;;;:33;;59288:8;;59263:21;:33;;59288:8;;59263:33;:::i;:::-;;;;-1:-1:-1;59315:31:0;;-1:-1:-1;59325:10:0;59337:8;59315:9;:31::i;59122:312::-;59387:31;;-1:-1:-1;;;59387:31:0;;10329:2:1;59387:31:0;;;10311:21:1;10368:2;10348:18;;;10341:30;-1:-1:-1;;;10387:18:1;;;10380:51;10448:18;;59387:31:0;10301:171:1;22959:308:0;-1:-1:-1;;;;;23058:31:0;;47882:10;23058:31;23054:61;;;23098:17;;-1:-1:-1;;;23098:17:0;;;;;;;;;;;23054:61;47882:10;23128:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;23128:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;23128:60:0;;;;;;;;;;23204:55;;9444:41:1;;;23128:49:0;;47882:10;23204:55;;9417:18:1;23204:55:0;;;;;;;22959:308;;:::o;52389:71::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;52437:8:::1;:15:::0;;-1:-1:-1;;;;52437:15:0::1;-1:-1:-1::0;;;52437:15:0::1;::::0;;52389:71::o;59460:254::-;50725:10;50718:18;;;;:6;:18;;;;;;;;50710:41;;;;-1:-1:-1;;;50710:41:0;;14162:2:1;50710:41:0;;;14144:21:1;14201:2;14181:18;;;14174:30;-1:-1:-1;;;14220:18:1;;;14213:40;14270:18;;50710:41:0;14134:160:1;50710:41:0;59577:13:::1;::::0;59551:10:::1;59537:25;::::0;;;:13:::1;:25;::::0;;;;;:36:::1;::::0;59565:8;;59537:36:::1;:::i;:::-;:53;;59529:85;;;::::0;-1:-1:-1;;;59529:85:0;;13453:2:1;59529:85:0::1;::::0;::::1;13435:21:1::0;13492:2;13472:18;;;13465:30;-1:-1:-1;;;13511:18:1;;;13504:49;13570:18;;59529:85:0::1;13425:169:1::0;59529:85:0::1;59639:10;59625:25;::::0;;;:13:::1;:25;::::0;;;;:37;;59654:8;;59625:25;:37:::1;::::0;59654:8;;59625:37:::1;:::i;:::-;::::0;;;-1:-1:-1;59675:31:0::1;::::0;-1:-1:-1;59685:10:0::1;59697:8:::0;59675:9:::1;:31::i;54095:122::-:0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54177:14:::1;:32:::0;54095:122::o;24066:396::-;24233:28;24243:4;24249:2;24253:7;24233:9;:28::i;:::-;-1:-1:-1;;;;;24276:14:0;;;:19;24272:183;;24315:56;24346:4;24352:2;24356:7;24365:5;24315:30;:56::i;:::-;24310:145;;24399:40;;-1:-1:-1;;;24399:40:0;;;;;;;;;;;24310:145;24066:396;;;;:::o;41825:420::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14397:7:0;14424:13;42010:7;:25;41977:103;;42059:9;41825:420;-1:-1:-1;;41825:420:0:o;41977:103::-;42102:21;42115:7;42102:12;:21::i;:::-;42090:33;;42138:9;:16;;;42134:65;;;42178:9;41825:420;-1:-1:-1;;41825:420:0:o;42134:65::-;42216:21;42229:7;42216:12;:21::i;52656:295::-;52721:13;52760:16;52768:7;52760;:16::i;:::-;52755:59;;52785:29;;-1:-1:-1;;;52785:29:0;;;;;;;;;;;52755:59;52827:18;52848:9;:7;:9::i;:::-;52875:8;;52827:30;;-1:-1:-1;;;;52875:8:0;;;;:68;;52939:4;52875:68;;;52910:4;52916:18;52926:7;52916:9;:18::i;:::-;52893:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52868:75;52656:295;-1:-1:-1;;;52656:295:0:o;54347:126::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;54431:15:::1;:34:::0;54347:126::o;23338:164::-;-1:-1:-1;;;;;23459:25:0;;;23435:4;23459:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;23338:164::o;49993:201::-;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50082:22:0;::::1;50074:73;;;::::0;-1:-1:-1;;;50074:73:0;;9922:2:1;50074:73:0::1;::::0;::::1;9904:21:1::0;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;-1:-1:-1;;;10051:18:1;;;10044:36;10097:19;;50074:73:0::1;9894:228:1::0;50074:73:0::1;50158:28;50177:8;50158:18;:28::i;55485:284::-:0;49157:6;;-1:-1:-1;;;;;49157:6:0;47882:10;49304:23;49296:68;;;;-1:-1:-1;;;49296:68:0;;;;;;;:::i;:::-;55594:1:::1;55574:10;:17;:21;55566:45;;;;-1:-1:-1::0;;;55566:45:0::1;;;;;;;:::i;:::-;55624:22:::0;;::::1;::::0;:9:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;55661:9;55657:105;55676:10;:17;55672:1;:21;55657:105;;;55746:4;55715:13;:28;55729:10;55740:1;55729:13;;;;;;-1:-1:-1::0;;;55729:13:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;55715:28:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;55715:28:0;:35;;-1:-1:-1;;55715:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55695:3;::::1;::::0;::::1;:::i;:::-;;;;55657:105;;24717:273:::0;24774:4;24864:13;;24854:7;:23;24811:152;;;;-1:-1:-1;;24915:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;24915:43:0;:48;;24717:273::o;17919:1129::-;17986:7;18021;18123:13;;18116:4;:20;18112:869;;;18161:14;18178:23;;;:17;:23;;;;;;-1:-1:-1;;;18267:23:0;;18263:699;;18786:113;18793:11;18786:113;;-1:-1:-1;;;18864:6:0;18846:25;;;;:17;:25;;;;;;18786:113;;18263:699;18112:869;;19009:31;;-1:-1:-1;;;19009:31:0;;;;;;;;;;;29956:2515;30071:27;30101;30120:7;30101:18;:27::i;:::-;30071:57;;30186:4;-1:-1:-1;;;;;30145:45:0;30161:19;-1:-1:-1;;;;;30145:45:0;;30141:86;;30199:28;;-1:-1:-1;;;30199:28:0;;;;;;;;;;;30141:86;30240:22;47882:10;-1:-1:-1;;;;;30266:27:0;;;;:87;;-1:-1:-1;30310:43:0;30327:4;47882:10;23338:164;:::i;30310:43::-;30266:147;;;-1:-1:-1;47882:10:0;30370:20;30382:7;30370:11;:20::i;:::-;-1:-1:-1;;;;;30370:43:0;;30266:147;30240:174;;30432:17;30427:66;;30458:35;;-1:-1:-1;;;30458:35:0;;;;;;;;;;;30427:66;-1:-1:-1;;;;;30508:16:0;;30504:52;;30533:23;;-1:-1:-1;;;30533:23:0;;;;;;;;;;;30504:52;30685:24;;;;:15;:24;;;;;;;;30678:31;;-1:-1:-1;;;;;;30678:31:0;;;-1:-1:-1;;;;;31077:24:0;;;;;:18;:24;;;;;31075:26;;-1:-1:-1;;31075:26:0;;;31146:22;;;;;;;31144:24;;-1:-1:-1;31144:24:0;;;31439:26;;;:17;:26;;;;;-1:-1:-1;;;31527:15:0;12274:3;31527:41;31485:84;;:128;;31439:174;;;31733:46;;31729:626;;31837:1;31827:11;;31805:19;31960:30;;;:17;:30;;;;;;31956:384;;32098:13;;32083:11;:28;32079:242;;32245:30;;;;:17;:30;;;;;:52;;;32079:242;31729:626;;32402:7;32398:2;-1:-1:-1;;;;;32383:27:0;32392:4;-1:-1:-1;;;;;32383:27:0;-1:-1:-1;;;;;;;;;;;32383:27:0;;;;;;;;;29956:2515;;;;;:::o;32549:89::-;32609:21;32615:7;32624:5;32609;:21::i;50354:191::-;50447:6;;;-1:-1:-1;;;;;50464:17:0;;;-1:-1:-1;;;;;;50464:17:0;;;;;;;50497:40;;50447:6;;;50464:17;50447:6;;50497:40;;50428:16;;50497:40;50354:191;;:::o;19528:153::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;19648:24:0;;;;:17;:24;;;;;;19629:44;;:18;:44::i;25074:104::-;25143:27;25153:2;25157:8;25143:27;;;;;;;;;;;;:9;:27::i;59722:360::-;59808:4;59816:1;59808:9;59805:234;;;59849:10;59834:26;;;;:14;:26;;;;;:38;;59864:8;;59834:26;:38;;59864:8;;59834:38;:::i;:::-;;;;-1:-1:-1;59805:234:0;;-1:-1:-1;59805:234:0;;59893:4;59901:1;59893:9;59890:149;;;59935:10;59919:27;;;;:15;:27;;;;;:39;;59950:8;;59919:27;:39;;59950:8;;59919:39;:::i;59890:149::-;60004:10;59991:24;;;;:12;:24;;;;;:36;;60019:8;;59991:24;:36;;60019:8;;59991:36;:::i;:::-;;;;-1:-1:-1;;59890:149:0;60051:23;60061:2;60065:8;60051:9;:23::i;36168:716::-;36352:88;;-1:-1:-1;;;36352:88:0;;36331:4;;-1:-1:-1;;;;;36352:45:0;;;;;:88;;47882:10;;36419:4;;36425:7;;36434:5;;36352:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36352:88:0;;;;;;;;-1:-1:-1;;36352:88:0;;;;;;;;;;;;:::i;:::-;;;36348:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36635:13:0;;36631:235;;36681:40;;-1:-1:-1;;;36681:40:0;;;;;;;;;;;36631:235;36824:6;36818:13;36809:6;36805:2;36801:15;36794:38;36348:529;-1:-1:-1;;;;;;36511:64:0;-1:-1:-1;;;36511:64:0;;-1:-1:-1;36348:529:0;36168:716;;;;;;:::o;20184:158::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;20287:47:0;20306:27;20325:7;20306:18;:27::i;:::-;20287:18;:47::i;38910:1959::-;39381:4;39375:11;;39388:3;39371:21;;39466:17;;;;40163:11;;;40042:5;40295:2;40309;40299:13;;40291:22;40163:11;40278:36;40350:2;40340:13;;39933:682;40369:4;39933:682;;;40544:1;40539:3;40535:11;40528:18;;40595:2;40589:4;40585:13;40581:2;40577:22;40572:3;40564:36;40465:2;40455:13;;39933:682;;;-1:-1:-1;40657:13:0;;;-1:-1:-1;;40772:12:0;;;40832:19;;;40772:12;39006:1856;-1:-1:-1;39006:1856:0:o;32867:2809::-;32947:27;32977;32996:7;32977:18;:27::i;:::-;32947:57;-1:-1:-1;32947:57:0;33082:311;;;;33116:22;47882:10;-1:-1:-1;;;;;33142:27:0;;;;:91;;-1:-1:-1;33190:43:0;33207:4;47882:10;23338:164;:::i;33190:43::-;33142:155;;;-1:-1:-1;47882:10:0;33254:20;33266:7;33254:11;:20::i;:::-;-1:-1:-1;;;;;33254:43:0;;33142:155;33116:182;;33320:17;33315:66;;33346:35;;-1:-1:-1;;;33346:35:0;;;;;;;;;;;33315:66;33082:311;;33529:24;;;;:15;:24;;;;;;;;33522:31;;-1:-1:-1;;;;;;33522:31:0;;;-1:-1:-1;;;;;34142:24:0;;;;:18;:24;;;;;:59;;34170:31;34142:59;;;34439:26;;;:17;:26;;;;;-1:-1:-1;;;34529:15:0;12274:3;34529:41;34485:86;;:165;34439:211;;-1:-1:-1;;;34770:46:0;;34766:626;;34874:1;34864:11;;34842:19;34997:30;;;:17;:30;;;;;;34993:384;;35135:13;;35120:11;:28;35116:242;;35282:30;;;;:17;:30;;;;;:52;;;35116:242;34766:626;;35420:35;;35447:7;;35443:1;;-1:-1:-1;;;;;35420:35:0;;;-1:-1:-1;;;;;;;;;;;35420:35:0;35443:1;;35420:35;-1:-1:-1;;35643:12:0;:14;;;;;;-1:-1:-1;;32867:2809:0:o;19142:295::-;-1:-1:-1;;;;;;;;;;;;;19252:41:0;;;;12274:3;19338:32;;;-1:-1:-1;;;;;19304:67:0;-1:-1:-1;;;19304:67:0;-1:-1:-1;;;19401:23:0;;;:28;;-1:-1:-1;;;19382:47:0;-1:-1:-1;19142:295:0:o;25551:2236::-;25674:20;25697:13;-1:-1:-1;;;;;25725:16:0;;25721:48;;25750:19;;-1:-1:-1;;;25750:19:0;;;;;;;;;;;25721:48;25784:13;25780:44;;25806:18;;-1:-1:-1;;;25806:18:0;;;;;;;;;;;25780:44;-1:-1:-1;;;;;26373:22:0;;;;;;:18;:22;;;;11757:2;26373:22;;;:70;;26411:31;26399:44;;26373:70;;;26686:31;;;:17;:31;;;;;26779:15;12274:3;26779:41;26737:84;;-1:-1:-1;26857:13:0;;12537:3;26842:56;26737:162;26686:213;;:31;;26980:23;;;;27024:14;:19;27020:635;;27064:313;27095:38;;27120:12;;-1:-1:-1;;;;;27095:38:0;;;27112:1;;-1:-1:-1;;;;;;;;;;;27095:38:0;27112:1;;27095:38;27161:69;27200:1;27204:2;27208:14;;;;;;27224:5;27161:30;:69::i;:::-;27156:174;;27266:40;;-1:-1:-1;;;27266:40:0;;;;;;;;;;;27156:174;27372:3;27357:12;:18;27064:313;;27458:12;27441:13;;:29;27437:43;;27472:8;;;27437:43;27020:635;;;27521:119;27552:40;;27577:14;;;;;-1:-1:-1;;;;;27552:40:0;;;27569:1;;-1:-1:-1;;;;;;;;;;;27552:40:0;27569:1;;27552:40;27635:3;27620:12;:18;27521:119;;27020:635;-1:-1:-1;27669:13:0;:28;;;27719:60;;27752:2;27756:12;27770:8;27719:60;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:2;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:2;;;309:1;306;299:12;268:2;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;88:332;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:2;;588:1;585;578:12;522:2;474:124;;;:::o;603:196::-;662:6;715:2;703:9;694:7;690:23;686:32;683:2;;;736:6;728;721:22;683:2;764:29;783:9;764:29;:::i;804:270::-;872:6;880;933:2;921:9;912:7;908:23;904:32;901:2;;;954:6;946;939:22;901:2;982:29;1001:9;982:29;:::i;:::-;972:39;;1030:38;1064:2;1053:9;1049:18;1030:38;:::i;:::-;1020:48;;891:183;;;;;:::o;1079:338::-;1156:6;1164;1172;1225:2;1213:9;1204:7;1200:23;1196:32;1193:2;;;1246:6;1238;1231:22;1193:2;1274:29;1293:9;1274:29;:::i;:::-;1264:39;;1322:38;1356:2;1345:9;1341:18;1322:38;:::i;:::-;1312:48;;1407:2;1396:9;1392:18;1379:32;1369:42;;1183:234;;;;;:::o;1422:696::-;1517:6;1525;1533;1541;1594:3;1582:9;1573:7;1569:23;1565:33;1562:2;;;1616:6;1608;1601:22;1562:2;1644:29;1663:9;1644:29;:::i;:::-;1634:39;;1692:38;1726:2;1715:9;1711:18;1692:38;:::i;:::-;1682:48;;1777:2;1766:9;1762:18;1749:32;1739:42;;1832:2;1821:9;1817:18;1804:32;-1:-1:-1;;;;;1851:6:1;1848:30;1845:2;;;1896:6;1888;1881:22;1845:2;1924:22;;1977:4;1969:13;;1965:27;-1:-1:-1;1955:2:1;;2011:6;2003;1996:22;1955:2;2039:73;2104:7;2099:2;2086:16;2081:2;2077;2073:11;2039:73;:::i;:::-;2029:83;;;1552:566;;;;;;;:::o;2123:367::-;2188:6;2196;2249:2;2237:9;2228:7;2224:23;2220:32;2217:2;;;2270:6;2262;2255:22;2217:2;2298:29;2317:9;2298:29;:::i;:::-;2288:39;;2377:2;2366:9;2362:18;2349:32;2424:5;2417:13;2410:21;2403:5;2400:32;2390:2;;2451:6;2443;2436:22;2390:2;2479:5;2469:15;;;2207:283;;;;;:::o;2495:264::-;2563:6;2571;2624:2;2612:9;2603:7;2599:23;2595:32;2592:2;;;2645:6;2637;2630:22;2592:2;2673:29;2692:9;2673:29;:::i;:::-;2663:39;2749:2;2734:18;;;;2721:32;;-1:-1:-1;;;2582:177:1:o;2764:332::-;2841:6;2849;2857;2910:2;2898:9;2889:7;2885:23;2881:32;2878:2;;;2931:6;2923;2916:22;2878:2;2959:29;2978:9;2959:29;:::i;:::-;2949:39;3035:2;3020:18;;3007:32;;-1:-1:-1;3086:2:1;3071:18;;;3058:32;;2868:228;-1:-1:-1;;;2868:228:1:o;3101:953::-;3185:6;3216:2;3259;3247:9;3238:7;3234:23;3230:32;3227:2;;;3280:6;3272;3265:22;3227:2;3325:9;3312:23;-1:-1:-1;;;;;3350:6:1;3347:30;3344:2;;;3395:6;3387;3380:22;3344:2;3423:22;;3476:4;3468:13;;3464:27;-1:-1:-1;3454:2:1;;3510:6;3502;3495:22;3454:2;3551;3538:16;3574:60;3590:43;3630:2;3590:43;:::i;:::-;3574:60;:::i;:::-;3656:3;3680:2;3675:3;3668:15;3708:2;3703:3;3699:12;3692:19;;3739:2;3735;3731:11;3787:7;3782:2;3776;3773:1;3769:10;3765:2;3761:19;3757:28;3754:41;3751:2;;;3813:6;3805;3798:22;3751:2;3840:6;3831:15;;3855:169;3869:2;3866:1;3863:9;3855:169;;;3926:23;3945:3;3926:23;:::i;:::-;3914:36;;3887:1;3880:9;;;;;3970:12;;;;4002;;3855:169;;;-1:-1:-1;4043:5:1;3196:858;-1:-1:-1;;;;;;;3196:858:1:o;4059:947::-;4143:6;4174:2;4217;4205:9;4196:7;4192:23;4188:32;4185:2;;;4238:6;4230;4223:22;4185:2;4283:9;4270:23;-1:-1:-1;;;;;4308:6:1;4305:30;4302:2;;;4353:6;4345;4338:22;4302:2;4381:22;;4434:4;4426:13;;4422:27;-1:-1:-1;4412:2:1;;4468:6;4460;4453:22;4412:2;4509;4496:16;4532:60;4548:43;4588:2;4548:43;:::i;4532:60::-;4614:3;4638:2;4633:3;4626:15;4666:2;4661:3;4657:12;4650:19;;4697:2;4693;4689:11;4745:7;4740:2;4734;4731:1;4727:10;4723:2;4719:19;4715:28;4712:41;4709:2;;;4771:6;4763;4756:22;4709:2;4798:6;4789:15;;4813:163;4827:2;4824:1;4821:9;4813:163;;;4884:17;;4872:30;;4845:1;4838:9;;;;;4922:12;;;;4954;;4813:163;;5011:255;5069:6;5122:2;5110:9;5101:7;5097:23;5093:32;5090:2;;;5143:6;5135;5128:22;5090:2;5187:9;5174:23;5206:30;5230:5;5206:30;:::i;5271:259::-;5340:6;5393:2;5381:9;5372:7;5368:23;5364:32;5361:2;;;5414:6;5406;5399:22;5361:2;5451:9;5445:16;5470:30;5494:5;5470:30;:::i;5535:480::-;5604:6;5657:2;5645:9;5636:7;5632:23;5628:32;5625:2;;;5678:6;5670;5663:22;5625:2;5723:9;5710:23;-1:-1:-1;;;;;5748:6:1;5745:30;5742:2;;;5793:6;5785;5778:22;5742:2;5821:22;;5874:4;5866:13;;5862:27;-1:-1:-1;5852:2:1;;5908:6;5900;5893:22;5852:2;5936:73;6001:7;5996:2;5983:16;5978:2;5974;5970:11;5936:73;:::i;6020:190::-;6079:6;6132:2;6120:9;6111:7;6107:23;6103:32;6100:2;;;6153:6;6145;6138:22;6100:2;-1:-1:-1;6181:23:1;;6090:120;-1:-1:-1;6090:120:1:o;6215:257::-;6256:3;6294:5;6288:12;6321:6;6316:3;6309:19;6337:63;6393:6;6386:4;6381:3;6377:14;6370:4;6363:5;6359:16;6337:63;:::i;:::-;6454:2;6433:15;-1:-1:-1;;6429:29:1;6420:39;;;;6461:4;6416:50;;6264:208;-1:-1:-1;;6264:208:1:o;6760:470::-;6939:3;6977:6;6971:13;6993:53;7039:6;7034:3;7027:4;7019:6;7015:17;6993:53;:::i;:::-;7109:13;;7068:16;;;;7131:57;7109:13;7068:16;7165:4;7153:17;;7131:57;:::i;:::-;7204:20;;6947:283;-1:-1:-1;;;;6947:283:1:o;7443:488::-;-1:-1:-1;;;;;7712:15:1;;;7694:34;;7764:15;;7759:2;7744:18;;7737:43;7811:2;7796:18;;7789:34;;;7859:3;7854:2;7839:18;;7832:31;;;7637:4;;7880:45;;7905:19;;7897:6;7880:45;:::i;:::-;7872:53;7646:285;-1:-1:-1;;;;;;7646:285:1:o;7936:723::-;8167:2;8219:21;;;8289:13;;8192:18;;;8311:22;;;8138:4;;8167:2;8390:15;;;;8364:2;8349:18;;;8138:4;8436:197;8450:6;8447:1;8444:13;8436:197;;;8499:52;8547:3;8538:6;8532:13;6561:12;;-1:-1:-1;;;;;6557:38:1;6545:51;;6649:4;6638:16;;;6632:23;-1:-1:-1;;;;;6628:48:1;6612:14;;;6605:72;6740:4;6729:16;;;6723:23;6716:31;6709:39;6693:14;;6686:63;6535:220;8499:52;8608:15;;;;8580:4;8571:14;;;;;8472:1;8465:9;8436:197;;8664:635;8835:2;8887:21;;;8957:13;;8860:18;;;8979:22;;;8806:4;;8835:2;9058:15;;;;9032:2;9017:18;;;8806:4;9104:169;9118:6;9115:1;9112:13;9104:169;;;9179:13;;9167:26;;9248:15;;;;9213:12;;;;9140:1;9133:9;9104:169;;9496:219;9645:2;9634:9;9627:21;9608:4;9665:44;9705:2;9694:9;9690:18;9682:6;9665:44;:::i;12911:335::-;13113:2;13095:21;;;13152:2;13132:18;;;13125:30;-1:-1:-1;;;13186:2:1;13171:18;;13164:41;13237:2;13222:18;;13085:161::o;13599:356::-;13801:2;13783:21;;;13820:18;;;13813:30;13879:34;13874:2;13859:18;;13852:62;13946:2;13931:18;;13773:182::o;15349:263::-;6561:12;;-1:-1:-1;;;;;6557:38:1;6545:51;;6649:4;6638:16;;;6632:23;-1:-1:-1;;;;;6628:48:1;6612:14;;;6605:72;6740:4;6729:16;;;6723:23;6716:31;6709:39;6693:14;;;6686:63;15543:2;15528:18;;15555:51;6535:220;15799:275;15870:2;15864:9;15935:2;15916:13;;-1:-1:-1;;15912:27:1;15900:40;;-1:-1:-1;;;;;15955:34:1;;15991:22;;;15952:62;15949:2;;;16017:18;;:::i;:::-;16053:2;16046:22;15844:230;;-1:-1:-1;15844:230:1:o;16079:183::-;16139:4;-1:-1:-1;;;;;16164:6:1;16161:30;16158:2;;;16194:18;;:::i;:::-;-1:-1:-1;16239:1:1;16235:14;16251:4;16231:25;;16148:114::o;16267:128::-;16307:3;16338:1;16334:6;16331:1;16328:13;16325:2;;;16344:18;;:::i;:::-;-1:-1:-1;16380:9:1;;16315:80::o;16400:168::-;16440:7;16506:1;16502;16498:6;16494:14;16491:1;16488:21;16483:1;16476:9;16469:17;16465:45;16462:2;;;16513:18;;:::i;:::-;-1:-1:-1;16553:9:1;;16452:116::o;16573:125::-;16613:4;16641:1;16638;16635:8;16632:2;;;16646:18;;:::i;:::-;-1:-1:-1;16683:9:1;;16622:76::o;16703:258::-;16775:1;16785:113;16799:6;16796:1;16793:13;16785:113;;;16875:11;;;16869:18;16856:11;;;16849:39;16821:2;16814:10;16785:113;;;16916:6;16913:1;16910:13;16907:2;;;-1:-1:-1;;16951:1:1;16933:16;;16926:27;16756:205::o;16966:380::-;17045:1;17041:12;;;;17088;;;17109:2;;17163:4;17155:6;17151:17;17141:27;;17109:2;17216;17208:6;17205:14;17185:18;17182:38;17179:2;;;17262:10;17257:3;17253:20;17250:1;17243:31;17297:4;17294:1;17287:15;17325:4;17322:1;17315:15;17179:2;;17021:325;;;:::o;17351:135::-;17390:3;-1:-1:-1;;17411:17:1;;17408:2;;;17431:18;;:::i;:::-;-1:-1:-1;17478:1:1;17467:13;;17398:88::o;17491:127::-;17552:10;17547:3;17543:20;17540:1;17533:31;17583:4;17580:1;17573:15;17607:4;17604:1;17597:15;17623:127;17684:10;17679:3;17675:20;17672:1;17665:31;17715:4;17712:1;17705:15;17739:4;17736:1;17729:15;17755:131;-1:-1:-1;;;;;;17829:32:1;;17819:43;;17809:2;;17876:1;17873;17866:12
Swarm Source
ipfs://16cfe8cc7bc5e5a903efd7e81842e0a311fc36a6b5bfcd603dc3e4e63518154f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.