ETH Price: $3,422.41 (-2.16%)
Gas: 5 Gwei

Token

Stoned Punks (SP)
 

Overview

Max Total Supply

1,000 SP

Holders

374

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SP
0x56bc69694a77174061e48ee2f70e04e5197aba3c
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Just a bunch of Gutter Punks enjoying 4/20. Airdrop reward for Gutter Punks mints 5001-6000.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
StonedPunks

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-21
*/

// SPDX-License-Identifier: MIT

/**

 (              )     )    (       (            )     ) (     
 )\ )  *   ) ( /(  ( /(    )\ )    )\ )      ( /(  ( /( )\ )  
(()/(` )  /( )\()) )\())( (()/(   (()/(   (  )\()) )\()|()/(  
 /(_))( )(_)|(_)\ ((_)\ )\ /(_))   /(_))  )\((_)\|((_)\ /(_)) 
(_)) (_(_())  ((_) _((_|(_|_))_   (_)) _ ((_)_((_)_ ((_|_))   
/ __||_   _| / _ \| \| | __|   \  | _ \ | | | \| | |/ // __|  
\__ \  | |  | (_) | .` | _|| |) | |  _/ |_| | .` | ' < \__ \  
|___/  |_|   \___/|_|\_|___|___/  |_|  \___/|_|\_|_|\_\|___/  
                                                              
*/

pragma solidity ^0.8.9;







/**
 * @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;
    }
}




/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface 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);
}





/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @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`, 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 Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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 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);

    /**
     * @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;
}



/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @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);
}



/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}






/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}






/**
 * @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));
    }

    function isContractOwner() public virtual returns (bool) {
        return (_owner == _msgSender());
    }

    /**
     * @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);
    }
}




abstract contract Target721 { 
    function ownerOf(uint256 tokenId) public view virtual returns (address);
    function balanceOf(address owner) public view virtual returns (uint256);
    function getApproved(uint256 tokenId) public view virtual returns (address);
    function isApprovedForAll(address owner, address operator) public view virtual returns (bool);
}




/**
 * @title StonedPunks contract.
 * @author The Gutter Punks team.
 *
 */
contract StonedPunks is Context, ERC165, IERC721, IERC721Metadata, Ownable {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // 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;

    string internal _baseTokenURI;
    string internal _contractURI;

    uint256 internal _totalSupply;
    string public constant TOKEN_URI_EXTENSION = ".json";
    uint256 public constant GP_OFFSET = 5000;
    uint256 public constant MAX_SUPPLY = 1000;
	
	bool internal _finalize = false; 
	address internal _burnAddress = 0x000000000000000000000000000000000000dEaD;
	
	address internal _gpAddress = 0x9a54988016E97Fdc388D1b084BcbfE32De91b70c; 
	
    Target721 _gpTarget = Target721(0x9a54988016E97Fdc388D1b084BcbfE32De91b70c);


    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function setName(string memory name_) external onlyOwner {
        require(!_finalize, "Cannot change name after finalized.");
        _name = name_;
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
		
		string memory baseURI = _baseTokenURI;
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString(), TOKEN_URI_EXTENSION))
            : "";
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function setGutterPunksTargetContract(address contractAddress) external onlyOwner { 
		require(!_finalize, "Cannot set target contract after finalized."); 
		_gpAddress = contractAddress;
        _gpTarget = Target721(contractAddress);
    }

    function setURI(string calldata baseURI) external onlyOwner {
		require(!_finalize, "Cannot edit base URI after finalized."); 
        _baseTokenURI = baseURI;
    }

    function setFinalize(bool finalize) external onlyOwner {
		require(!_finalize, "Cannot change finalize after finalized."); 
        _finalize = finalize;
    }

    function airdrop(address[] calldata recipients) external onlyOwner {
		require(!_finalize, "Cannot airdrop after finalized."); 
        uint256 startingSupply = _totalSupply;
		require(startingSupply + recipients.length <= MAX_SUPPLY, "Cannot airdrop more than max supply.");
		

        // Update the total supply.
        _totalSupply = startingSupply + recipients.length;

        // Note: First token has ID #1.
        for (uint256 i = 0; i < recipients.length; i++) {
            _mint(recipients[i], startingSupply + i + 1);
        }
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ownerOf(tokenId), to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
        address approved = _tokenApprovals[tokenId];
        return approved;
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
		if(tokenId > MAX_SUPPLY) { return false; }
		else if(_owners[tokenId] == _burnAddress) { return false; }
		else if(_owners[tokenId] != address(0)) { return true; }
		else { 
			return _gpTarget.ownerOf((tokenId+GP_OFFSET)) != address(0);
		}
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _ownerOf(tokenId);
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
        address owner = _owners[tokenId];
        if(owner == address(0) && tokenId <= MAX_SUPPLY) {
            try _gpTarget.ownerOf((tokenId+GP_OFFSET)) returns (address result) { owner = result; } catch { owner = address(0); }
        }
        return owner;
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || _tokenApprovals[tokenId] == spender || isApprovedForAll(owner, spender));
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(_ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);
       
        unchecked { 
           _owners[tokenId] = to;
        }

        emit Transfer(from, to, tokenId);
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        uint256 balance = 0;
        for(uint256 i = 1;i <= MAX_SUPPLY;i++) {
           if(_ownerOf(i) == owner) { balance++; }
        }
        return balance;
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        emit Transfer(address(this), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ownerOf(tokenId);
		address burnAddress = _burnAddress;
        require(owner == _msgSender(), "Must own token to burn.");

        _beforeTokenTransfer(owner, burnAddress, tokenId);

        // Clear approvals
        _approve(address(0), tokenId);
		_owners[tokenId] = burnAddress;

        emit Transfer(owner, burnAddress, tokenId);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}


    function contractURI() external view returns (string memory) {
        return _contractURI;
    }

    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
	
	function parentTokenTransferred(address from, uint256 tokenId) public virtual { 
		require(_msgSender() == _gpAddress, "This function must be called by the airdrop token parent.");
		// Only update token owner if current owner is unset
        if(tokenId >= 5001 && tokenId <= 6000) {
            tokenId = tokenId - GP_OFFSET; // offset for GP reward batch GP #5001 -> SP #1
            if(_owners[tokenId] == address(0)) { _owners[tokenId] = from; }
        }
	}
}






/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}





/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"GP_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_URI_EXTENSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isContractOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"parentTokenTransferred","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"finalize","type":"bool"}],"name":"setFinalize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress","type":"address"}],"name":"setGutterPunksTargetContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setURI","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":[],"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"}]

6080604052600980546001600160a81b03191662dead00179055600a8054739a54988016e97fdc388d1b084bcbfe32de91b70c6001600160a01b03199182168117909255600b805490911690911790553480156200005c57600080fd5b506040516200224c3803806200224c8339810160408190526200007f9162000281565b6200008a33620000be565b81516200009f9060019060208501906200010e565b508051620000b59060029060208401906200010e565b50505062000328565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200011c90620002eb565b90600052602060002090601f0160209004810192826200014057600085556200018b565b82601f106200015b57805160ff19168380011785556200018b565b828001600101855582156200018b579182015b828111156200018b5782518255916020019190600101906200016e565b50620001999291506200019d565b5090565b5b808211156200019957600081556001016200019e565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001dc57600080fd5b81516001600160401b0380821115620001f957620001f9620001b4565b604051601f8301601f19908116603f01168101908282118183101715620002245762000224620001b4565b816040528381526020925086838588010111156200024157600080fd5b600091505b8382101562000265578582018301518183018401529082019062000246565b83821115620002775760008385830101525b9695505050505050565b600080604083850312156200029557600080fd5b82516001600160401b0380821115620002ad57600080fd5b620002bb86838701620001ca565b93506020850151915080821115620002d257600080fd5b50620002e185828601620001ca565b9150509250929050565b600181811c908216806200030057607f821691505b602082108114156200032257634e487b7160e01b600052602260045260246000fd5b50919050565b611f1480620003386000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063729ad39e116100f9578063c47f002711610097578063e8a3d48511610071578063e8a3d485146103a7578063e985e9c5146103af578063efd563cd146103eb578063f2fde38b146103fe57600080fd5b8063c47f00271461035d578063c87b56dd14610370578063d134dd4a1461038357600080fd5b806395d89b41116100d357806395d89b4114610326578063a13e31a01461032e578063a22cb46514610337578063b88d4fde1461034a57600080fd5b8063729ad39e146102ee5780637f7dcdbf146103015780638da5cb5b1461031557600080fd5b806323b872dd1161016657806342842e0e1161014057806342842e0e146102ad5780636352211e146102c057806370a08231146102d3578063715018a6146102e657600080fd5b806323b872dd1461027e5780632c00e7b91461029157806332cb6b0c146102a457600080fd5b8063081812fc116101a2578063081812fc1461021b578063095ea7b314610246578063109b79a91461025957806318160ddd1461026c57600080fd5b806301ffc9a7146101c957806302fe5305146101f157806306fdde0314610206575b600080fd5b6101dc6101d736600461185a565b610411565b60405190151581526020015b60405180910390f35b6102046101ff366004611877565b610463565b005b61020e610508565b6040516101e89190611941565b61022e610229366004611954565b61059a565b6040516001600160a01b0390911681526020016101e8565b610204610254366004611982565b610622565b6102046102673660046119ae565b610733565b6008545b6040519081526020016101e8565b61020461028c3660046119cb565b6107f0565b61020461029f366004611a1c565b610821565b6102706103e881565b6102046102bb3660046119cb565b6108c1565b61022e6102ce366004611954565b6108dc565b6102706102e13660046119ae565b610952565b610204610a14565b6102046102fc366004611a37565b610a4a565b6101dc6000546001600160a01b0316331490565b6000546001600160a01b031661022e565b61020e610ba5565b61027061138881565b610204610345366004611a9a565b610bb4565b610204610358366004611b5b565b610bc3565b61020461036b366004611bdb565b610bf5565b61020e61037e366004611954565b610c91565b61020e60405180604001604052806005815260200164173539b7b760d91b81525081565b61020e610dfe565b6101dc6103bd366004611c24565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102046103f9366004611982565b610e0d565b61020461040c3660046119ae565b610f07565b60006001600160e01b031982166380ac58cd60e01b148061044257506001600160e01b03198216635b5e139f60e01b145b8061045d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104965760405162461bcd60e51b815260040161048d90611c5d565b60405180910390fd5b60095460ff16156104f75760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420656469742062617365205552492061667465722066696e616c60448201526434bd32b21760d91b606482015260840161048d565b61050360068383611737565b505050565b60606001805461051790611c92565b80601f016020809104026020016040519081016040528092919081815260200182805461054390611c92565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b5050505050905090565b60006105a582610fa2565b6106065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161048d565b506000908152600460205260409020546001600160a01b031690565b600061062d826108dc565b9050806001600160a01b0316836001600160a01b0316141561069b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161048d565b336001600160a01b03821614806106b757506106b781336103bd565b6107295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161048d565b61050383836110b1565b6000546001600160a01b0316331461075d5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff16156107c45760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f74207365742074617267657420636f6e747261637420616674657260448201526a103334b730b634bd32b21760a91b606482015260840161048d565b600a80546001600160a01b039092166001600160a01b03199283168117909155600b8054909216179055565b6107fa338261111f565b6108165760405162461bcd60e51b815260040161048d90611ccd565b61050383838361119e565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff16156108ae5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206368616e67652066696e616c697a652061667465722066696e60448201526630b634bd32b21760c91b606482015260840161048d565b6009805460ff1916911515919091179055565b61050383838360405180602001604052806000815250610bc3565b6000806108e8836112e2565b90506001600160a01b03811661045d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161048d565b60006001600160a01b0382166109bd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161048d565b600060015b6103e88111610a0d57836001600160a01b03166109de826112e2565b6001600160a01b031614156109fb57816109f781611d34565b9250505b80610a0581611d34565b9150506109c2565b5092915050565b6000546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161048d90611c5d565b610a48600061139e565b565b6000546001600160a01b03163314610a745760405162461bcd60e51b815260040161048d90611c5d565b60095460ff1615610ac75760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742061697264726f702061667465722066696e616c697a65642e00604482015260640161048d565b6008546103e8610ad78383611d4f565b1115610b315760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f742061697264726f70206d6f7265207468616e206d61782073757060448201526338363c9760e11b606482015260840161048d565b610b3b8282611d4f565b60085560005b82811015610b9f57610b8d848483818110610b5e57610b5e611d67565b9050602002016020810190610b7391906119ae565b610b7d8385611d4f565b610b88906001611d4f565b6113ee565b80610b9781611d34565b915050610b41565b50505050565b60606002805461051790611c92565b610bbf33838361142a565b5050565b610bcd338361111f565b610be95760405162461bcd60e51b815260040161048d90611ccd565b610b9f848484846114f9565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff1615610c7e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206368616e6765206e616d652061667465722066696e616c697a60448201526232b21760e91b606482015260840161048d565b8051610bbf9060019060208401906117bb565b6060610c9c82610fa2565b610d005760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161048d565b600060068054610d0f90611c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3b90611c92565b8015610d885780601f10610d5d57610100808354040283529160200191610d88565b820191906000526020600020905b815481529060010190602001808311610d6b57829003601f168201915b505050505090506000815111610dad5760405180602001604052806000815250610df7565b80610db78461152c565b60405180604001604052806005815260200164173539b7b760d91b815250604051602001610de793929190611d7d565b6040516020818303038152906040525b9392505050565b60606007805461051790611c92565b600a546001600160a01b0316336001600160a01b031614610e965760405162461bcd60e51b815260206004820152603960248201527f546869732066756e6374696f6e206d7573742062652063616c6c65642062792060448201527f7468652061697264726f7020746f6b656e20706172656e742e00000000000000606482015260840161048d565b6113898110158015610eaa57506117708111155b15610bbf57610ebb61138882611dc0565b6000818152600360205260409020549091506001600160a01b0316610bbf57600081815260036020526040902080546001600160a01b0384166001600160a01b03199091161790555050565b6000546001600160a01b03163314610f315760405162461bcd60e51b815260040161048d90611c5d565b6001600160a01b038116610f965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161048d565b610f9f8161139e565b50565b60006103e8821115610fb657506000919050565b6009546000838152600360205260409020546001600160a01b03908116610100909204161415610fe857506000919050565b6000828152600360205260409020546001600160a01b03161561100d57506001919050565b600b546000906001600160a01b0316636352211e61102d61138886611d4f565b6040518263ffffffff1660e01b815260040161104b91815260200190565b60206040518083038186803b15801561106357600080fd5b505afa158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190611dd7565b6001600160a01b0316141592915050565b919050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110e6826108dc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061112b836108dc565b9050806001600160a01b0316846001600160a01b0316148061116657506000838152600460205260409020546001600160a01b038581169116145b8061119657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111b1826112e2565b6001600160a01b0316146112195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161048d565b6001600160a01b03821661127b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161048d565b6112866000826110b1565b60008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000818152600360205260408120546001600160a01b03168015801561130a57506103e88311155b1561045d57600b546001600160a01b0316636352211e61132c61138886611d4f565b6040518263ffffffff1660e01b815260040161134a91815260200190565b60206040518083038186803b15801561136257600080fd5b505afa925050508015611392575060408051601f3d908101601f1916820190925261138f91810190611dd7565b60015b610df75750600061045d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405181906001600160a01b0384169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a45050565b816001600160a01b0316836001600160a01b0316141561148c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161048d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61150484848461119e565b6115108484848461162a565b610b9f5760405162461bcd60e51b815260040161048d90611df4565b6060816115505750506040805180820190915260018152600360fc1b602082015290565b8160005b811561157a578061156481611d34565b91506115739050600a83611e5c565b9150611554565b60008167ffffffffffffffff81111561159557611595611acf565b6040519080825280601f01601f1916602001820160405280156115bf576020820181803683370190505b5090505b8415611196576115d4600183611dc0565b91506115e1600a86611e70565b6115ec906030611d4f565b60f81b81838151811061160157611601611d67565b60200101906001600160f81b031916908160001a905350611623600a86611e5c565b94506115c3565b60006001600160a01b0384163b1561172c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061166e903390899088908890600401611e84565b602060405180830381600087803b15801561168857600080fd5b505af19250505080156116b8575060408051601f3d908101601f191682019092526116b591810190611ec1565b60015b611712573d8080156116e6576040519150601f19603f3d011682016040523d82523d6000602084013e6116eb565b606091505b50805161170a5760405162461bcd60e51b815260040161048d90611df4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611196565b506001949350505050565b82805461174390611c92565b90600052602060002090601f01602090048101928261176557600085556117ab565b82601f1061177e5782800160ff198235161785556117ab565b828001600101855582156117ab579182015b828111156117ab578235825591602001919060010190611790565b506117b792915061182f565b5090565b8280546117c790611c92565b90600052602060002090601f0160209004810192826117e957600085556117ab565b82601f1061180257805160ff19168380011785556117ab565b828001600101855582156117ab579182015b828111156117ab578251825591602001919060010190611814565b5b808211156117b75760008155600101611830565b6001600160e01b031981168114610f9f57600080fd5b60006020828403121561186c57600080fd5b8135610df781611844565b6000806020838503121561188a57600080fd5b823567ffffffffffffffff808211156118a257600080fd5b818501915085601f8301126118b657600080fd5b8135818111156118c557600080fd5b8660208285010111156118d757600080fd5b60209290920196919550909350505050565b60005b838110156119045781810151838201526020016118ec565b83811115610b9f5750506000910152565b6000815180845261192d8160208601602086016118e9565b601f01601f19169290920160200192915050565b602081526000610df76020830184611915565b60006020828403121561196657600080fd5b5035919050565b6001600160a01b0381168114610f9f57600080fd5b6000806040838503121561199557600080fd5b82356119a08161196d565b946020939093013593505050565b6000602082840312156119c057600080fd5b8135610df78161196d565b6000806000606084860312156119e057600080fd5b83356119eb8161196d565b925060208401356119fb8161196d565b929592945050506040919091013590565b803580151581146110ac57600080fd5b600060208284031215611a2e57600080fd5b610df782611a0c565b60008060208385031215611a4a57600080fd5b823567ffffffffffffffff80821115611a6257600080fd5b818501915085601f830112611a7657600080fd5b813581811115611a8557600080fd5b8660208260051b85010111156118d757600080fd5b60008060408385031215611aad57600080fd5b8235611ab88161196d565b9150611ac660208401611a0c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b0057611b00611acf565b604051601f8501601f19908116603f01168101908282118183101715611b2857611b28611acf565b81604052809350858152868686011115611b4157600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215611b7157600080fd5b8435611b7c8161196d565b93506020850135611b8c8161196d565b925060408501359150606085013567ffffffffffffffff811115611baf57600080fd5b8501601f81018713611bc057600080fd5b611bcf87823560208401611ae5565b91505092959194509250565b600060208284031215611bed57600080fd5b813567ffffffffffffffff811115611c0457600080fd5b8201601f81018413611c1557600080fd5b61119684823560208401611ae5565b60008060408385031215611c3757600080fd5b8235611c428161196d565b91506020830135611c528161196d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611ca657607f821691505b60208210811415611cc757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d4857611d48611d1e565b5060010190565b60008219821115611d6257611d62611d1e565b500190565b634e487b7160e01b600052603260045260246000fd5b60008451611d8f8184602089016118e9565b845190830190611da38183602089016118e9565b8451910190611db68183602088016118e9565b0195945050505050565b600082821015611dd257611dd2611d1e565b500390565b600060208284031215611de957600080fd5b8151610df78161196d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611e6b57611e6b611e46565b500490565b600082611e7f57611e7f611e46565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eb790830184611915565b9695505050505050565b600060208284031215611ed357600080fd5b8151610df78161184456fea264697066735822122073eb4be3931ffa71d51a0713a8860f1b4fb68e968e41d41489d8b69b192fad4c64736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c53746f6e65642050756e6b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025350000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063729ad39e116100f9578063c47f002711610097578063e8a3d48511610071578063e8a3d485146103a7578063e985e9c5146103af578063efd563cd146103eb578063f2fde38b146103fe57600080fd5b8063c47f00271461035d578063c87b56dd14610370578063d134dd4a1461038357600080fd5b806395d89b41116100d357806395d89b4114610326578063a13e31a01461032e578063a22cb46514610337578063b88d4fde1461034a57600080fd5b8063729ad39e146102ee5780637f7dcdbf146103015780638da5cb5b1461031557600080fd5b806323b872dd1161016657806342842e0e1161014057806342842e0e146102ad5780636352211e146102c057806370a08231146102d3578063715018a6146102e657600080fd5b806323b872dd1461027e5780632c00e7b91461029157806332cb6b0c146102a457600080fd5b8063081812fc116101a2578063081812fc1461021b578063095ea7b314610246578063109b79a91461025957806318160ddd1461026c57600080fd5b806301ffc9a7146101c957806302fe5305146101f157806306fdde0314610206575b600080fd5b6101dc6101d736600461185a565b610411565b60405190151581526020015b60405180910390f35b6102046101ff366004611877565b610463565b005b61020e610508565b6040516101e89190611941565b61022e610229366004611954565b61059a565b6040516001600160a01b0390911681526020016101e8565b610204610254366004611982565b610622565b6102046102673660046119ae565b610733565b6008545b6040519081526020016101e8565b61020461028c3660046119cb565b6107f0565b61020461029f366004611a1c565b610821565b6102706103e881565b6102046102bb3660046119cb565b6108c1565b61022e6102ce366004611954565b6108dc565b6102706102e13660046119ae565b610952565b610204610a14565b6102046102fc366004611a37565b610a4a565b6101dc6000546001600160a01b0316331490565b6000546001600160a01b031661022e565b61020e610ba5565b61027061138881565b610204610345366004611a9a565b610bb4565b610204610358366004611b5b565b610bc3565b61020461036b366004611bdb565b610bf5565b61020e61037e366004611954565b610c91565b61020e60405180604001604052806005815260200164173539b7b760d91b81525081565b61020e610dfe565b6101dc6103bd366004611c24565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102046103f9366004611982565b610e0d565b61020461040c3660046119ae565b610f07565b60006001600160e01b031982166380ac58cd60e01b148061044257506001600160e01b03198216635b5e139f60e01b145b8061045d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6000546001600160a01b031633146104965760405162461bcd60e51b815260040161048d90611c5d565b60405180910390fd5b60095460ff16156104f75760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f7420656469742062617365205552492061667465722066696e616c60448201526434bd32b21760d91b606482015260840161048d565b61050360068383611737565b505050565b60606001805461051790611c92565b80601f016020809104026020016040519081016040528092919081815260200182805461054390611c92565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b5050505050905090565b60006105a582610fa2565b6106065760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161048d565b506000908152600460205260409020546001600160a01b031690565b600061062d826108dc565b9050806001600160a01b0316836001600160a01b0316141561069b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161048d565b336001600160a01b03821614806106b757506106b781336103bd565b6107295760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606482015260840161048d565b61050383836110b1565b6000546001600160a01b0316331461075d5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff16156107c45760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f74207365742074617267657420636f6e747261637420616674657260448201526a103334b730b634bd32b21760a91b606482015260840161048d565b600a80546001600160a01b039092166001600160a01b03199283168117909155600b8054909216179055565b6107fa338261111f565b6108165760405162461bcd60e51b815260040161048d90611ccd565b61050383838361119e565b6000546001600160a01b0316331461084b5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff16156108ae5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206368616e67652066696e616c697a652061667465722066696e60448201526630b634bd32b21760c91b606482015260840161048d565b6009805460ff1916911515919091179055565b61050383838360405180602001604052806000815250610bc3565b6000806108e8836112e2565b90506001600160a01b03811661045d5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b606482015260840161048d565b60006001600160a01b0382166109bd5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b606482015260840161048d565b600060015b6103e88111610a0d57836001600160a01b03166109de826112e2565b6001600160a01b031614156109fb57816109f781611d34565b9250505b80610a0581611d34565b9150506109c2565b5092915050565b6000546001600160a01b03163314610a3e5760405162461bcd60e51b815260040161048d90611c5d565b610a48600061139e565b565b6000546001600160a01b03163314610a745760405162461bcd60e51b815260040161048d90611c5d565b60095460ff1615610ac75760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f742061697264726f702061667465722066696e616c697a65642e00604482015260640161048d565b6008546103e8610ad78383611d4f565b1115610b315760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f742061697264726f70206d6f7265207468616e206d61782073757060448201526338363c9760e11b606482015260840161048d565b610b3b8282611d4f565b60085560005b82811015610b9f57610b8d848483818110610b5e57610b5e611d67565b9050602002016020810190610b7391906119ae565b610b7d8385611d4f565b610b88906001611d4f565b6113ee565b80610b9781611d34565b915050610b41565b50505050565b60606002805461051790611c92565b610bbf33838361142a565b5050565b610bcd338361111f565b610be95760405162461bcd60e51b815260040161048d90611ccd565b610b9f848484846114f9565b6000546001600160a01b03163314610c1f5760405162461bcd60e51b815260040161048d90611c5d565b60095460ff1615610c7e5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206368616e6765206e616d652061667465722066696e616c697a60448201526232b21760e91b606482015260840161048d565b8051610bbf9060019060208401906117bb565b6060610c9c82610fa2565b610d005760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161048d565b600060068054610d0f90611c92565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3b90611c92565b8015610d885780601f10610d5d57610100808354040283529160200191610d88565b820191906000526020600020905b815481529060010190602001808311610d6b57829003601f168201915b505050505090506000815111610dad5760405180602001604052806000815250610df7565b80610db78461152c565b60405180604001604052806005815260200164173539b7b760d91b815250604051602001610de793929190611d7d565b6040516020818303038152906040525b9392505050565b60606007805461051790611c92565b600a546001600160a01b0316336001600160a01b031614610e965760405162461bcd60e51b815260206004820152603960248201527f546869732066756e6374696f6e206d7573742062652063616c6c65642062792060448201527f7468652061697264726f7020746f6b656e20706172656e742e00000000000000606482015260840161048d565b6113898110158015610eaa57506117708111155b15610bbf57610ebb61138882611dc0565b6000818152600360205260409020549091506001600160a01b0316610bbf57600081815260036020526040902080546001600160a01b0384166001600160a01b03199091161790555050565b6000546001600160a01b03163314610f315760405162461bcd60e51b815260040161048d90611c5d565b6001600160a01b038116610f965760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161048d565b610f9f8161139e565b50565b60006103e8821115610fb657506000919050565b6009546000838152600360205260409020546001600160a01b03908116610100909204161415610fe857506000919050565b6000828152600360205260409020546001600160a01b03161561100d57506001919050565b600b546000906001600160a01b0316636352211e61102d61138886611d4f565b6040518263ffffffff1660e01b815260040161104b91815260200190565b60206040518083038186803b15801561106357600080fd5b505afa158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190611dd7565b6001600160a01b0316141592915050565b919050565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906110e6826108dc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061112b836108dc565b9050806001600160a01b0316846001600160a01b0316148061116657506000838152600460205260409020546001600160a01b038581169116145b8061119657506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166111b1826112e2565b6001600160a01b0316146112195760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b606482015260840161048d565b6001600160a01b03821661127b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161048d565b6112866000826110b1565b60008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000818152600360205260408120546001600160a01b03168015801561130a57506103e88311155b1561045d57600b546001600160a01b0316636352211e61132c61138886611d4f565b6040518263ffffffff1660e01b815260040161134a91815260200190565b60206040518083038186803b15801561136257600080fd5b505afa925050508015611392575060408051601f3d908101601f1916820190925261138f91810190611dd7565b60015b610df75750600061045d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405181906001600160a01b0384169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90600090a45050565b816001600160a01b0316836001600160a01b0316141561148c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161048d565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61150484848461119e565b6115108484848461162a565b610b9f5760405162461bcd60e51b815260040161048d90611df4565b6060816115505750506040805180820190915260018152600360fc1b602082015290565b8160005b811561157a578061156481611d34565b91506115739050600a83611e5c565b9150611554565b60008167ffffffffffffffff81111561159557611595611acf565b6040519080825280601f01601f1916602001820160405280156115bf576020820181803683370190505b5090505b8415611196576115d4600183611dc0565b91506115e1600a86611e70565b6115ec906030611d4f565b60f81b81838151811061160157611601611d67565b60200101906001600160f81b031916908160001a905350611623600a86611e5c565b94506115c3565b60006001600160a01b0384163b1561172c57604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061166e903390899088908890600401611e84565b602060405180830381600087803b15801561168857600080fd5b505af19250505080156116b8575060408051601f3d908101601f191682019092526116b591810190611ec1565b60015b611712573d8080156116e6576040519150601f19603f3d011682016040523d82523d6000602084013e6116eb565b606091505b50805161170a5760405162461bcd60e51b815260040161048d90611df4565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611196565b506001949350505050565b82805461174390611c92565b90600052602060002090601f01602090048101928261176557600085556117ab565b82601f1061177e5782800160ff198235161785556117ab565b828001600101855582156117ab579182015b828111156117ab578235825591602001919060010190611790565b506117b792915061182f565b5090565b8280546117c790611c92565b90600052602060002090601f0160209004810192826117e957600085556117ab565b82601f1061180257805160ff19168380011785556117ab565b828001600101855582156117ab579182015b828111156117ab578251825591602001919060010190611814565b5b808211156117b75760008155600101611830565b6001600160e01b031981168114610f9f57600080fd5b60006020828403121561186c57600080fd5b8135610df781611844565b6000806020838503121561188a57600080fd5b823567ffffffffffffffff808211156118a257600080fd5b818501915085601f8301126118b657600080fd5b8135818111156118c557600080fd5b8660208285010111156118d757600080fd5b60209290920196919550909350505050565b60005b838110156119045781810151838201526020016118ec565b83811115610b9f5750506000910152565b6000815180845261192d8160208601602086016118e9565b601f01601f19169290920160200192915050565b602081526000610df76020830184611915565b60006020828403121561196657600080fd5b5035919050565b6001600160a01b0381168114610f9f57600080fd5b6000806040838503121561199557600080fd5b82356119a08161196d565b946020939093013593505050565b6000602082840312156119c057600080fd5b8135610df78161196d565b6000806000606084860312156119e057600080fd5b83356119eb8161196d565b925060208401356119fb8161196d565b929592945050506040919091013590565b803580151581146110ac57600080fd5b600060208284031215611a2e57600080fd5b610df782611a0c565b60008060208385031215611a4a57600080fd5b823567ffffffffffffffff80821115611a6257600080fd5b818501915085601f830112611a7657600080fd5b813581811115611a8557600080fd5b8660208260051b85010111156118d757600080fd5b60008060408385031215611aad57600080fd5b8235611ab88161196d565b9150611ac660208401611a0c565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611b0057611b00611acf565b604051601f8501601f19908116603f01168101908282118183101715611b2857611b28611acf565b81604052809350858152868686011115611b4157600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215611b7157600080fd5b8435611b7c8161196d565b93506020850135611b8c8161196d565b925060408501359150606085013567ffffffffffffffff811115611baf57600080fd5b8501601f81018713611bc057600080fd5b611bcf87823560208401611ae5565b91505092959194509250565b600060208284031215611bed57600080fd5b813567ffffffffffffffff811115611c0457600080fd5b8201601f81018413611c1557600080fd5b61119684823560208401611ae5565b60008060408385031215611c3757600080fd5b8235611c428161196d565b91506020830135611c528161196d565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680611ca657607f821691505b60208210811415611cc757634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000600019821415611d4857611d48611d1e565b5060010190565b60008219821115611d6257611d62611d1e565b500190565b634e487b7160e01b600052603260045260246000fd5b60008451611d8f8184602089016118e9565b845190830190611da38183602089016118e9565b8451910190611db68183602088016118e9565b0195945050505050565b600082821015611dd257611dd2611d1e565b500390565b600060208284031215611de957600080fd5b8151610df78161196d565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b600082611e6b57611e6b611e46565b500490565b600082611e7f57611e7f611e46565b500690565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611eb790830184611915565b9695505050505050565b600060208284031215611ed357600080fd5b8151610df78161184456fea264697066735822122073eb4be3931ffa71d51a0713a8860f1b4fb68e968e41d41489d8b69b192fad4c64736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c53746f6e65642050756e6b73000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025350000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): Stoned Punks
Arg [1] : symbol_ (string): SP

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 53746f6e65642050756e6b730000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 5350000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

12231:10564:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14293:305;;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;14293:305:0;;;;;;;;14859:168;;;;;;:::i;:::-;;:::i;:::-;;13490:100;;;:::i;:::-;;;;;;;:::i;16360:257::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2289:32:1;;;2271:51;;2259:2;2244:18;16360:257:0;2125:203:1;15773:404:0;;;;;;:::i;:::-;;:::i;14606:245::-;;;;;;:::i;:::-;;:::i;22224:91::-;22295:12;;22224:91;;;3187:25:1;;;3175:2;3160:18;22224:91:0;3041:177:1;18496:339:0;;;;;;:::i;:::-;;:::i;15035:162::-;;;;;;:::i;:::-;;:::i;13032:41::-;;13069:4;13032:41;;18843:185;;;;;;:::i;:::-;;:::i;16962:240::-;;;;;;:::i;:::-;;:::i;20258:342::-;;;;;;:::i;:::-;;:::i;10830:103::-;;;:::i;15205:560::-;;;;;;:::i;:::-;;:::i;10941:107::-;;10992:4;11017:6;-1:-1:-1;;;;;11017:6:0;1283:10;11017:22;;10941:107;10179:87;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;10179:87;;13598:104;;;:::i;12985:40::-;;13021:4;12985:40;;17569:155;;;;;;:::i;:::-;;:::i;19036:328::-;;;;;;:::i;:::-;;:::i;13710:158::-;;;;;;:::i;:::-;;:::i;13876:409::-;;;;;;:::i;:::-;;:::i;12926:52::-;;;;;;;;;;;;;;;-1:-1:-1;;;12926:52:0;;;;;22117:99;;;:::i;18055:164::-;;;;;;:::i;:::-;-1:-1:-1;;;;;18176:25:0;;;18152:4;18176:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;18055:164;22321:471;;;;;;:::i;:::-;;:::i;11203:201::-;;;;;;:::i;:::-;;:::i;14293:305::-;14395:4;-1:-1:-1;;;;;;14432:40:0;;-1:-1:-1;;;14432:40:0;;:105;;-1:-1:-1;;;;;;;14489:48:0;;-1:-1:-1;;;14489:48:0;14432:105;:158;;;-1:-1:-1;;;;;;;;;;9195:40:0;;;14554:36;14412:178;14293:305;-1:-1:-1;;14293:305:0:o;14859:168::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;;;;;;;;;14933:9:::1;::::0;::::1;;14932:10;14924:60;;;::::0;-1:-1:-1;;;14924:60:0;;7952:2:1;14924:60:0::1;::::0;::::1;7934:21:1::0;7991:2;7971:18;;;7964:30;8030:34;8010:18;;;8003:62;-1:-1:-1;;;8081:18:1;;;8074:35;8126:19;;14924:60:0::1;7750:401:1::0;14924:60:0::1;14996:23;:13;15012:7:::0;;14996:23:::1;:::i;:::-;;14859:168:::0;;:::o;13490:100::-;13544:13;13577:5;13570:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13490:100;:::o;16360:257::-;16436:7;16464:16;16472:7;16464;:16::i;:::-;16456:73;;;;-1:-1:-1;;;16456:73:0;;8743:2:1;16456:73:0;;;8725:21:1;8782:2;8762:18;;;8755:30;8821:34;8801:18;;;8794:62;-1:-1:-1;;;8872:18:1;;;8865:42;8924:19;;16456:73:0;8541:408:1;16456:73:0;-1:-1:-1;16540:16:0;16559:24;;;:15;:24;;;;;;-1:-1:-1;;;;;16559:24:0;;16360:257::o;15773:404::-;15854:13;15870:16;15878:7;15870;:16::i;:::-;15854:32;;15911:5;-1:-1:-1;;;;;15905:11:0;:2;-1:-1:-1;;;;;15905:11:0;;;15897:57;;;;-1:-1:-1;;;15897:57:0;;9156:2:1;15897:57:0;;;9138:21:1;9195:2;9175:18;;;9168:30;9234:34;9214:18;;;9207:62;-1:-1:-1;;;9285:18:1;;;9278:31;9326:19;;15897:57:0;8954:397:1;15897:57:0;1283:10;-1:-1:-1;;;;;15989:21:0;;;;:62;;-1:-1:-1;16014:37:0;16031:5;1283:10;18055:164;:::i;16014:37::-;15967:168;;;;-1:-1:-1;;;15967:168:0;;9558:2:1;15967:168:0;;;9540:21:1;9597:2;9577:18;;;9570:30;9636:34;9616:18;;;9609:62;9707:26;9687:18;;;9680:54;9751:19;;15967:168:0;9356:420:1;15967:168:0;16148:21;16157:2;16161:7;16148:8;:21::i;14606:245::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;14703:9:::1;::::0;::::1;;14702:10;14694:66;;;::::0;-1:-1:-1;;;14694:66:0;;9983:2:1;14694:66:0::1;::::0;::::1;9965:21:1::0;10022:2;10002:18;;;9995:30;10061:34;10041:18;;;10034:62;-1:-1:-1;;;10112:18:1;;;10105:41;10163:19;;14694:66:0::1;9781:407:1::0;14694:66:0::1;14766:10;:28:::0;;-1:-1:-1;;;;;14766:28:0;;::::1;-1:-1:-1::0;;;;;;14766:28:0;;::::1;::::0;::::1;::::0;;;14805:9:::1;:38:::0;;;;::::1;;::::0;;14606:245::o;18496:339::-;18691:41;1283:10;18724:7;18691:18;:41::i;:::-;18683:103;;;;-1:-1:-1;;;18683:103:0;;;;;;;:::i;:::-;18799:28;18809:4;18815:2;18819:7;18799:9;:28::i;15035:162::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;15104:9:::1;::::0;::::1;;15103:10;15095:62;;;::::0;-1:-1:-1;;;15095:62:0;;10813:2:1;15095:62:0::1;::::0;::::1;10795:21:1::0;10852:2;10832:18;;;10825:30;10891:34;10871:18;;;10864:62;-1:-1:-1;;;10942:18:1;;;10935:37;10989:19;;15095:62:0::1;10611:403:1::0;15095:62:0::1;15169:9;:20:::0;;-1:-1:-1;;15169:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15035:162::o;18843:185::-;18981:39;18998:4;19004:2;19008:7;18981:39;;;;;;;;;;;;:16;:39::i;16962:240::-;17034:7;17054:13;17070:17;17079:7;17070:8;:17::i;:::-;17054:33;-1:-1:-1;;;;;;17106:19:0;;17098:73;;;;-1:-1:-1;;;17098:73:0;;11221:2:1;17098:73:0;;;11203:21:1;11260:2;11240:18;;;11233:30;11299:34;11279:18;;;11272:62;-1:-1:-1;;;11350:18:1;;;11343:39;11399:19;;17098:73:0;11019:405:1;20258:342:0;20330:7;-1:-1:-1;;;;;20358:19:0;;20350:74;;;;-1:-1:-1;;;20350:74:0;;11631:2:1;20350:74:0;;;11613:21:1;11670:2;11650:18;;;11643:30;11709:34;11689:18;;;11682:62;-1:-1:-1;;;11760:18:1;;;11753:40;11810:19;;20350:74:0;11429:406:1;20350:74:0;20435:15;20481:1;20465:103;13069:4;20483:1;:15;20465:103;;20536:5;-1:-1:-1;;;;;20521:20:0;:11;20530:1;20521:8;:11::i;:::-;-1:-1:-1;;;;;20521:20:0;;20518:39;;;20545:9;;;;:::i;:::-;;;;20518:39;20499:3;;;;:::i;:::-;;;;20465:103;;;-1:-1:-1;20585:7:0;20258:342;-1:-1:-1;;20258:342:0:o;10830:103::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;10895:30:::1;10922:1;10895:18;:30::i;:::-;10830:103::o:0;15205:560::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;15286:9:::1;::::0;::::1;;15285:10;15277:54;;;::::0;-1:-1:-1;;;15277:54:0;;12314:2:1;15277:54:0::1;::::0;::::1;12296:21:1::0;12353:2;12333:18;;;12326:30;12392:33;12372:18;;;12365:61;12443:18;;15277:54:0::1;12112:355:1::0;15277:54:0::1;15368:12;::::0;13069:4:::1;15393:34;15410:10:::0;15368:12;15393:34:::1;:::i;:::-;:48;;15385:97;;;::::0;-1:-1:-1;;;15385:97:0;;12807:2:1;15385:97:0::1;::::0;::::1;12789:21:1::0;12846:2;12826:18;;;12819:30;12885:34;12865:18;;;12858:62;-1:-1:-1;;;12936:18:1;;;12929:34;12980:19;;15385:97:0::1;12605:400:1::0;15385:97:0::1;15551:34;15568:10:::0;15551:14;:34:::1;:::i;:::-;15536:12;:49:::0;15644:9:::1;15639:119;15659:21:::0;;::::1;15639:119;;;15702:44;15708:10;;15719:1;15708:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15723:18;15740:1:::0;15723:14;:18:::1;:::i;:::-;:22;::::0;15744:1:::1;15723:22;:::i;:::-;15702:5;:44::i;:::-;15682:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15639:119;;;;15272:493;15205:560:::0;;:::o;13598:104::-;13654:13;13687:7;13680:14;;;;;:::i;17569:155::-;17664:52;1283:10;17697:8;17707;17664:18;:52::i;:::-;17569:155;;:::o;19036:328::-;19211:41;1283:10;19244:7;19211:18;:41::i;:::-;19203:103;;;;-1:-1:-1;;;19203:103:0;;;;;;;:::i;:::-;19317:39;19331:4;19337:2;19341:7;19350:5;19317:13;:39::i;13710:158::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;13787:9:::1;::::0;::::1;;13786:10;13778:58;;;::::0;-1:-1:-1;;;13778:58:0;;13344:2:1;13778:58:0::1;::::0;::::1;13326:21:1::0;13383:2;13363:18;;;13356:30;13422:34;13402:18;;;13395:62;-1:-1:-1;;;13473:18:1;;;13466:33;13516:19;;13778:58:0::1;13142:399:1::0;13778:58:0::1;13847:13:::0;;::::1;::::0;:5:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;13876:409::-:0;13941:13;13989:16;13997:7;13989;:16::i;:::-;13967:113;;;;-1:-1:-1;;;13967:113:0;;13748:2:1;13967:113:0;;;13730:21:1;13787:2;13767:18;;;13760:30;13826:34;13806:18;;;13799:62;-1:-1:-1;;;13877:18:1;;;13870:45;13932:19;;13967:113:0;13546:411:1;13967:113:0;14089:21;14113:13;14089:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14168:1;14150:7;14144:21;:25;:133;;;;;;;;;;;;;;;;;14209:7;14218:18;:7;:16;:18::i;:::-;14238:19;;;;;;;;;;;;;-1:-1:-1;;;14238:19:0;;;14192:66;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14144:133;14137:140;13876:409;-1:-1:-1;;;13876:409:0:o;22117:99::-;22163:13;22196:12;22189:19;;;;;:::i;22321:471::-;22429:10;;-1:-1:-1;;;;;22429:10:0;1283;-1:-1:-1;;;;;22413:26:0;;22405:96;;;;-1:-1:-1;;;22405:96:0;;14833:2:1;22405:96:0;;;14815:21:1;14872:2;14852:18;;;14845:30;14911:34;14891:18;;;14884:62;14982:27;14962:18;;;14955:55;15027:19;;22405:96:0;14631:421:1;22405:96:0;22582:4;22571:7;:15;;:34;;;;;22601:4;22590:7;:15;;22571:34;22568:220;;;22632:19;13021:4;22632:7;:19;:::i;:::-;22745:1;22717:16;;;:7;:16;;;;;;22622:29;;-1:-1:-1;;;;;;22717:16:0;22714:63;;22751:16;;;;:7;:16;;;;;:23;;-1:-1:-1;;;;;22751:23:0;;-1:-1:-1;;;;;;22751:23:0;;;;;;22321:471;;:::o;11203:201::-;10225:7;10252:6;-1:-1:-1;;;;;10252:6:0;1283:10;10399:23;10391:68;;;;-1:-1:-1;;;10391:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11292:22:0;::::1;11284:73;;;::::0;-1:-1:-1;;;11284:73:0;;15389:2:1;11284:73:0::1;::::0;::::1;15371:21:1::0;15428:2;15408:18;;;15401:30;15467:34;15447:18;;;15440:62;-1:-1:-1;;;15518:18:1;;;15511:36;15564:19;;11284:73:0::1;15187:402:1::0;11284:73:0::1;11368:28;11387:8;11368:18;:28::i;:::-;11203:201:::0;:::o;16625:329::-;16690:4;13069;16704:7;:20;16701:246;;;-1:-1:-1;16735:5:0;;16625:329;-1:-1:-1;16625:329:0:o;16701:246::-;16775:12;;16755:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;16755:16:0;;;16775:12;;;;;16755:32;16752:195;;;-1:-1:-1;16798:5:0;;16625:329;-1:-1:-1;16625:329:0:o;16752:195::-;16846:1;16818:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16818:16:0;:30;16815:132;;-1:-1:-1;16859:4:0;;16625:329;-1:-1:-1;16625:329:0:o;16815:132::-;16889:9;;16939:1;;-1:-1:-1;;;;;16889:9:0;:17;16908;13021:4;16908:7;:17;:::i;:::-;16889:38;;;;;;;;;;;;;3187:25:1;;3175:2;3160:18;;3041:177;16889:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16889:52:0;;;;16625:329;-1:-1:-1;;16625:329:0:o;16815:132::-;16625:329;;;:::o;16185:167::-;16260:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;16260:29:0;-1:-1:-1;;;;;16260:29:0;;;;;;;;:24;;16314:16;16260:24;16314:7;:16::i;:::-;-1:-1:-1;;;;;16305:39:0;;;;;;;;;;;16185:167;;:::o;18227:261::-;18320:4;18337:13;18353:16;18361:7;18353;:16::i;:::-;18337:32;;18399:5;-1:-1:-1;;;;;18388:16:0;:7;-1:-1:-1;;;;;18388:16:0;;:55;;;-1:-1:-1;18408:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18408:35:0;;;:24;;:35;18388:55;:91;;;-1:-1:-1;;;;;;18176:25:0;;;18152:4;18176:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;18447:32;18380:100;18227:261;-1:-1:-1;;;;18227:261:0:o;19695:555::-;19848:4;-1:-1:-1;;;;;19827:25:0;:17;19836:7;19827:8;:17::i;:::-;-1:-1:-1;;;;;19827:25:0;;19819:79;;;;-1:-1:-1;;;19819:79:0;;16052:2:1;19819:79:0;;;16034:21:1;16091:2;16071:18;;;16064:30;16130:34;16110:18;;;16103:62;-1:-1:-1;;;16181:18:1;;;16174:39;16230:19;;19819:79:0;15850:405:1;19819:79:0;-1:-1:-1;;;;;19917:16:0;;19909:65;;;;-1:-1:-1;;;19909:65:0;;16462:2:1;19909:65:0;;;16444:21:1;16501:2;16481:18;;;16474:30;16540:34;16520:18;;;16513:62;-1:-1:-1;;;16591:18:1;;;16584:34;16635:19;;19909:65:0;16260:400:1;19909:65:0;20091:29;20108:1;20112:7;20091:8;:29::i;:::-;20165:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20165:21:0;-1:-1:-1;;;;;20165:21:0;;;;;;;;;20215:27;;20165:16;;20215:27;;;;;;;19695:555;;;:::o;17210:351::-;17276:7;17312:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17312:16:0;17342:19;;:44;;;;;13069:4;17365:7;:21;;17342:44;17339:192;;;17407:9;;-1:-1:-1;;;;;17407:9:0;:17;17426;13021:4;17426:7;:17;:::i;:::-;17407:38;;;;;;;;;;;;;3187:25:1;;3175:2;3160:18;;3041:177;17407:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17407:38:0;;;;;;;;-1:-1:-1;;17407:38:0;;;;;;;;;;;;:::i;:::-;;;17403:117;;-1:-1:-1;17515:1:0;17403:117;;11564:191;11638:16;11657:6;;-1:-1:-1;;;;;11674:17:0;;;-1:-1:-1;;;;;;11674:17:0;;;;;;11707:40;;11657:6;;;;;;;11707:40;;11638:16;11707:40;11627:128;11564:191;:::o;20608:121::-;20685:36;;20713:7;;-1:-1:-1;;;;;20685:36:0;;;20702:4;;20685:36;;;;;20608:121;;:::o;17732:315::-;17887:8;-1:-1:-1;;;;;17878:17:0;:5;-1:-1:-1;;;;;17878:17:0;;;17870:55;;;;-1:-1:-1;;;17870:55:0;;16867:2:1;17870:55:0;;;16849:21:1;16906:2;16886:18;;;16879:30;16945:27;16925:18;;;16918:55;16990:18;;17870:55:0;16665:349:1;17870:55:0;-1:-1:-1;;;;;17936:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;17936:46:0;;;;;;;;;;17998:41;;540::1;;;17998::0;;513:18:1;17998:41:0;;;;;;;17732:315;;;:::o;19372:::-;19529:28;19539:4;19545:2;19549:7;19529:9;:28::i;:::-;19576:48;19599:4;19605:2;19609:7;19618:5;19576:22;:48::i;:::-;19568:111;;;;-1:-1:-1;;;19568:111:0;;;;;;;:::i;23035:723::-;23091:13;23312:10;23308:53;;-1:-1:-1;;23339:10:0;;;;;;;;;;;;-1:-1:-1;;;23339:10:0;;;;;23035:723::o;23308:53::-;23386:5;23371:12;23427:78;23434:9;;23427:78;;23460:8;;;;:::i;:::-;;-1:-1:-1;23483:10:0;;-1:-1:-1;23491:2:0;23483:10;;:::i;:::-;;;23427:78;;;23515:19;23547:6;23537:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23537:17:0;;23515:39;;23565:154;23572:10;;23565:154;;23599:11;23609:1;23599:11;;:::i;:::-;;-1:-1:-1;23668:10:0;23676:2;23668:5;:10;:::i;:::-;23655:24;;:2;:24;:::i;:::-;23642:39;;23625:6;23632;23625:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23625:56:0;;;;;;;;-1:-1:-1;23696:11:0;23705:2;23696:11;;:::i;:::-;;;23565:154;;21174:799;21329:4;-1:-1:-1;;;;;21350:13:0;;25806:20;25854:8;21346:620;;21386:72;;-1:-1:-1;;;21386:72:0;;-1:-1:-1;;;;;21386:36:0;;;;;:72;;1283:10;;21437:4;;21443:7;;21452:5;;21386:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21386:72:0;;;;;;;;-1:-1:-1;;21386:72:0;;;;;;;;;;;;:::i;:::-;;;21382:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21628:13:0;;21624:272;;21671:60;;-1:-1:-1;;;21671:60:0;;;;;;;:::i;21624:272::-;21846:6;21840:13;21831:6;21827:2;21823:15;21816:38;21382:529;-1:-1:-1;;;;;;21509:51:0;-1:-1:-1;;;21509:51:0;;-1:-1:-1;21502:58:0;;21346:620;-1:-1:-1;21950:4:0;21174:799;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:592::-;663:6;671;724:2;712:9;703:7;699:23;695:32;692:52;;;740:1;737;730:12;692:52;780:9;767:23;809:18;850:2;842:6;839:14;836:34;;;866:1;863;856:12;836:34;904:6;893:9;889:22;879:32;;949:7;942:4;938:2;934:13;930:27;920:55;;971:1;968;961:12;920:55;1011:2;998:16;1037:2;1029:6;1026:14;1023:34;;;1053:1;1050;1043:12;1023:34;1098:7;1093:2;1084:6;1080:2;1076:15;1072:24;1069:37;1066:57;;;1119:1;1116;1109:12;1066:57;1150:2;1142:11;;;;;1172:6;;-1:-1:-1;592:592:1;;-1:-1:-1;;;;592:592:1:o;1189:258::-;1261:1;1271:113;1285:6;1282:1;1279:13;1271:113;;;1361:11;;;1355:18;1342:11;;;1335:39;1307:2;1300:10;1271:113;;;1402:6;1399:1;1396:13;1393:48;;;-1:-1:-1;;1437:1:1;1419:16;;1412:27;1189:258::o;1452:::-;1494:3;1532:5;1526:12;1559:6;1554:3;1547:19;1575:63;1631:6;1624:4;1619:3;1615:14;1608:4;1601:5;1597:16;1575:63;:::i;:::-;1692:2;1671:15;-1:-1:-1;;1667:29:1;1658:39;;;;1699:4;1654:50;;1452:258;-1:-1:-1;;1452:258:1:o;1715:220::-;1864:2;1853:9;1846:21;1827:4;1884:45;1925:2;1914:9;1910:18;1902:6;1884:45;:::i;1940:180::-;1999:6;2052:2;2040:9;2031:7;2027:23;2023:32;2020:52;;;2068:1;2065;2058:12;2020:52;-1:-1:-1;2091:23:1;;1940:180;-1:-1:-1;1940:180:1:o;2333:131::-;-1:-1:-1;;;;;2408:31:1;;2398:42;;2388:70;;2454:1;2451;2444:12;2469:315;2537:6;2545;2598:2;2586:9;2577:7;2573:23;2569:32;2566:52;;;2614:1;2611;2604:12;2566:52;2653:9;2640:23;2672:31;2697:5;2672:31;:::i;:::-;2722:5;2774:2;2759:18;;;;2746:32;;-1:-1:-1;;;2469:315:1:o;2789:247::-;2848:6;2901:2;2889:9;2880:7;2876:23;2872:32;2869:52;;;2917:1;2914;2907:12;2869:52;2956:9;2943:23;2975:31;3000:5;2975:31;:::i;3223:456::-;3300:6;3308;3316;3369:2;3357:9;3348:7;3344:23;3340:32;3337:52;;;3385:1;3382;3375:12;3337:52;3424:9;3411:23;3443:31;3468:5;3443:31;:::i;:::-;3493:5;-1:-1:-1;3550:2:1;3535:18;;3522:32;3563:33;3522:32;3563:33;:::i;:::-;3223:456;;3615:7;;-1:-1:-1;;;3669:2:1;3654:18;;;;3641:32;;3223:456::o;3684:160::-;3749:20;;3805:13;;3798:21;3788:32;;3778:60;;3834:1;3831;3824:12;3849:180;3905:6;3958:2;3946:9;3937:7;3933:23;3929:32;3926:52;;;3974:1;3971;3964:12;3926:52;3997:26;4013:9;3997:26;:::i;4034:615::-;4120:6;4128;4181:2;4169:9;4160:7;4156:23;4152:32;4149:52;;;4197:1;4194;4187:12;4149:52;4237:9;4224:23;4266:18;4307:2;4299:6;4296:14;4293:34;;;4323:1;4320;4313:12;4293:34;4361:6;4350:9;4346:22;4336:32;;4406:7;4399:4;4395:2;4391:13;4387:27;4377:55;;4428:1;4425;4418:12;4377:55;4468:2;4455:16;4494:2;4486:6;4483:14;4480:34;;;4510:1;4507;4500:12;4480:34;4563:7;4558:2;4548:6;4545:1;4541:14;4537:2;4533:23;4529:32;4526:45;4523:65;;;4584:1;4581;4574:12;4654:315;4719:6;4727;4780:2;4768:9;4759:7;4755:23;4751:32;4748:52;;;4796:1;4793;4786:12;4748:52;4835:9;4822:23;4854:31;4879:5;4854:31;:::i;:::-;4904:5;-1:-1:-1;4928:35:1;4959:2;4944:18;;4928:35;:::i;:::-;4918:45;;4654:315;;;;;:::o;4974:127::-;5035:10;5030:3;5026:20;5023:1;5016:31;5066:4;5063:1;5056:15;5090:4;5087:1;5080:15;5106:631;5170:5;5200:18;5241:2;5233:6;5230:14;5227:40;;;5247:18;;:::i;:::-;5322:2;5316:9;5290:2;5376:15;;-1:-1:-1;;5372:24:1;;;5398:2;5368:33;5364:42;5352:55;;;5422:18;;;5442:22;;;5419:46;5416:72;;;5468:18;;:::i;:::-;5508:10;5504:2;5497:22;5537:6;5528:15;;5567:6;5559;5552:22;5607:3;5598:6;5593:3;5589:16;5586:25;5583:45;;;5624:1;5621;5614:12;5583:45;5674:6;5669:3;5662:4;5654:6;5650:17;5637:44;5729:1;5722:4;5713:6;5705;5701:19;5697:30;5690:41;;;;5106:631;;;;;:::o;5742:794::-;5837:6;5845;5853;5861;5914:3;5902:9;5893:7;5889:23;5885:33;5882:53;;;5931:1;5928;5921:12;5882:53;5970:9;5957:23;5989:31;6014:5;5989:31;:::i;:::-;6039:5;-1:-1:-1;6096:2:1;6081:18;;6068:32;6109:33;6068:32;6109:33;:::i;:::-;6161:7;-1:-1:-1;6215:2:1;6200:18;;6187:32;;-1:-1:-1;6270:2:1;6255:18;;6242:32;6297:18;6286:30;;6283:50;;;6329:1;6326;6319:12;6283:50;6352:22;;6405:4;6397:13;;6393:27;-1:-1:-1;6383:55:1;;6434:1;6431;6424:12;6383:55;6457:73;6522:7;6517:2;6504:16;6499:2;6495;6491:11;6457:73;:::i;:::-;6447:83;;;5742:794;;;;;;;:::o;6541:450::-;6610:6;6663:2;6651:9;6642:7;6638:23;6634:32;6631:52;;;6679:1;6676;6669:12;6631:52;6719:9;6706:23;6752:18;6744:6;6741:30;6738:50;;;6784:1;6781;6774:12;6738:50;6807:22;;6860:4;6852:13;;6848:27;-1:-1:-1;6838:55:1;;6889:1;6886;6879:12;6838:55;6912:73;6977:7;6972:2;6959:16;6954:2;6950;6946:11;6912:73;:::i;6996:388::-;7064:6;7072;7125:2;7113:9;7104:7;7100:23;7096:32;7093:52;;;7141:1;7138;7131:12;7093:52;7180:9;7167:23;7199:31;7224:5;7199:31;:::i;:::-;7249:5;-1:-1:-1;7306:2:1;7291:18;;7278:32;7319:33;7278:32;7319:33;:::i;:::-;7371:7;7361:17;;;6996:388;;;;;:::o;7389:356::-;7591:2;7573:21;;;7610:18;;;7603:30;7669:34;7664:2;7649:18;;7642:62;7736:2;7721:18;;7389:356::o;8156:380::-;8235:1;8231:12;;;;8278;;;8299:61;;8353:4;8345:6;8341:17;8331:27;;8299:61;8406:2;8398:6;8395:14;8375:18;8372:38;8369:161;;;8452:10;8447:3;8443:20;8440:1;8433:31;8487:4;8484:1;8477:15;8515:4;8512:1;8505:15;8369:161;;8156:380;;;:::o;10193:413::-;10395:2;10377:21;;;10434:2;10414:18;;;10407:30;10473:34;10468:2;10453:18;;10446:62;-1:-1:-1;;;10539:2:1;10524:18;;10517:47;10596:3;10581:19;;10193:413::o;11840:127::-;11901:10;11896:3;11892:20;11889:1;11882:31;11932:4;11929:1;11922:15;11956:4;11953:1;11946:15;11972:135;12011:3;-1:-1:-1;;12032:17:1;;12029:43;;;12052:18;;:::i;:::-;-1:-1:-1;12099:1:1;12088:13;;11972:135::o;12472:128::-;12512:3;12543:1;12539:6;12536:1;12533:13;12530:39;;;12549:18;;:::i;:::-;-1:-1:-1;12585:9:1;;12472:128::o;13010:127::-;13071:10;13066:3;13062:20;13059:1;13052:31;13102:4;13099:1;13092:15;13126:4;13123:1;13116:15;13962:664;14189:3;14227:6;14221:13;14243:53;14289:6;14284:3;14277:4;14269:6;14265:17;14243:53;:::i;:::-;14359:13;;14318:16;;;;14381:57;14359:13;14318:16;14415:4;14403:17;;14381:57;:::i;:::-;14505:13;;14460:20;;;14527:57;14505:13;14460:20;14561:4;14549:17;;14527:57;:::i;:::-;14600:20;;13962:664;-1:-1:-1;;;;;13962:664:1:o;15057:125::-;15097:4;15125:1;15122;15119:8;15116:34;;;15130:18;;:::i;:::-;-1:-1:-1;15167:9:1;;15057:125::o;15594:251::-;15664:6;15717:2;15705:9;15696:7;15692:23;15688:32;15685:52;;;15733:1;15730;15723:12;15685:52;15765:9;15759:16;15784:31;15809:5;15784:31;:::i;17019:414::-;17221:2;17203:21;;;17260:2;17240:18;;;17233:30;17299:34;17294:2;17279:18;;17272:62;-1:-1:-1;;;17365:2:1;17350:18;;17343:48;17423:3;17408:19;;17019:414::o;17438:127::-;17499:10;17494:3;17490:20;17487:1;17480:31;17530:4;17527:1;17520:15;17554:4;17551:1;17544:15;17570:120;17610:1;17636;17626:35;;17641:18;;:::i;:::-;-1:-1:-1;17675:9:1;;17570:120::o;17695:112::-;17727:1;17753;17743:35;;17758:18;;:::i;:::-;-1:-1:-1;17792:9:1;;17695:112::o;17812:489::-;-1:-1:-1;;;;;18081:15:1;;;18063:34;;18133:15;;18128:2;18113:18;;18106:43;18180:2;18165:18;;18158:34;;;18228:3;18223:2;18208:18;;18201:31;;;18006:4;;18249:46;;18275:19;;18267:6;18249:46;:::i;:::-;18241:54;17812:489;-1:-1:-1;;;;;;17812:489:1:o;18306:249::-;18375:6;18428:2;18416:9;18407:7;18403:23;18399:32;18396:52;;;18444:1;18441;18434:12;18396:52;18476:9;18470:16;18495:30;18519:5;18495:30;:::i

Swarm Source

ipfs://73eb4be3931ffa71d51a0713a8860f1b4fb68e968e41d41489d8b69b192fad4c
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.