ETH Price: $3,325.62 (-5.50%)

Token

Mirror Editions (EDITIONS)
 

Overview

Max Total Supply

0 EDITIONS

Holders

2,192

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
didierkrux.eth
Balance
1 EDITIONS
0xbd19a3f0a9cace18513a1e2863d648d13975cb30
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Editions

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 2000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-05-27
*/

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity 0.8.4;

interface IERC721 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Metadata {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * Based on: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol
 */
contract ERC721 is ERC165, IERC721 {
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _balances[owner];
    }

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

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory baseURI = _baseURI();
        return
            bytes(baseURI).length > 0
                ? string(abi.encodePacked(baseURI, tokenId))
                : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != msg.sender, "ERC721: approve to caller");

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(
            _isApprovedOrOwner(msg.sender, 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(msg.sender, 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 _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            isApprovedForAll(owner, spender));
    }

    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

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

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

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

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

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

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

    // https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/Address.sol
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
}


// File contracts/Editions.sol




/**
 * @title Editions
 * @author MirrorXYZ
 */
contract Editions is ERC721 {
    // ============ Constants ============

    string public constant name = "Mirror Editions";
    string public constant symbol = "EDITIONS";

    // ============ Structs ============

    struct Edition {
        // The maximum number of tokens that can be sold.
        uint256 quantity;
        // The price at which each token will be sold, in ETH.
        uint256 price;
        // The account that will receive sales revenue.
        address payable fundingRecipient;
        // The number of tokens sold so far.
        uint256 numSold;
    }

    // ============ Immutable Storage ============

    // The URI for the API that serves the content for each token.
    // Note: Strings cannot be literally immutable.
    string internal baseURI;

    // ============ Mutable Storage ============

    // Mapping of edition id to descriptive data.
    mapping(uint256 => Edition) public editions;
    // Mapping of token id to edition id.
    mapping(uint256 => uint256) public tokenToEdition;
    // The amount of funds that have already been withdrawn for a given edition.
    mapping(uint256 => uint256) public withdrawnForEdition;
    // `nextTokenId` increments with each token purchased, globally across all editions.
    uint256 private nextTokenId;
    // Editions start at 1, in order that unsold tokens don't map to the first edition.
    uint256 private nextEditionId = 1;

    // ============ Events ============

    event EditionCreated(
        uint256 quantity,
        uint256 price,
        address fundingRecipient,
        uint256 indexed editionId
    );

    event EditionPurchased(
        uint256 indexed editionId,
        uint256 indexed tokenId,
        // `numSold` at time of purchase represents the "serial number" of the NFT.
        uint256 numSold,
        // The account that paid for and received the NFT.
        address indexed buyer
    );

    // ============ Constructor ============

    constructor(string memory baseURI_) {
        baseURI = baseURI_;
    }

    // ============ Edition Methods ============

    function createEdition(
        // The number of tokens that can be minted and sold.
        uint256 quantity,
        // The price to purchase a token.
        uint256 price,
        // The account that should receive the revenue.
        address payable fundingRecipient
    ) external {
        editions[nextEditionId] = Edition({
            quantity: quantity,
            price: price,
            fundingRecipient: fundingRecipient,
            numSold: 0
        });

        emit EditionCreated(quantity, price, fundingRecipient, nextEditionId);

        nextEditionId++;
    }

    function buyEdition(uint256 editionId) external payable {
        // Check that the edition exists. Note: this is redundant
        // with the next check, but it is useful for clearer error messaging.
        require(editions[editionId].quantity > 0, "Edition does not exist");
        // Check that there are still tokens available to purchase.
        require(
            editions[editionId].numSold < editions[editionId].quantity,
            "This edition is already sold out."
        );
        // Check that the sender is paying the correct amount.
        require(
            msg.value == editions[editionId].price,
            "Must send enough to purchase the edition."
        );
        // Increment the number of tokens sold for this edition.
        editions[editionId].numSold++;
        // Mint a new token for the sender, using the `nextTokenId`.
        _mint(msg.sender, nextTokenId);
        // Store the mapping of token id to the edition being purchased.
        tokenToEdition[nextTokenId] = editionId;

        emit EditionPurchased(
            editionId,
            nextTokenId,
            editions[editionId].numSold,
            msg.sender
        );

        nextTokenId++;
    }

    // ============ Operational Methods ============

    function withdrawFunds(uint256 editionId) external {
        // Compute the amount available for withdrawing from this edition.
        uint256 remainingForEdition =
            // Compute total amount of revenue that has been generated for the edition so far.
            (editions[editionId].price * editions[editionId].numSold) -
                // Subtract the amount that has already been withdrawn.
                withdrawnForEdition[editionId];

        // Update that amount that has already been withdrawn for the edition.
        withdrawnForEdition[editionId] += remainingForEdition;
        // Send the amount that was remaining for the edition, to the funding recipient.
        _sendFunds(editions[editionId].fundingRecipient, remainingForEdition);
    }

    // ============ NFT Methods ============

    // Returns e.g. https://mirror-api.com/editions/[editionId]/[tokenId]
    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        // If the token does not map to an edition, it'll be 0.
        require(tokenToEdition[tokenId] > 0, "Token has not been sold yet");
        // Concatenate the components, baseURI, editionId and tokenId, to create URI.
        return
            string(
                abi.encodePacked(
                    baseURI,
                    _toString(tokenToEdition[tokenId]),
                    "/",
                    _toString(tokenId)
                )
            );
    }

    // ============ Private Methods ============

    function _sendFunds(address payable recipient, uint256 amount) private {
        require(
            address(this).balance >= amount,
            "Insufficient balance for send"
        );

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

    // From https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol
    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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","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":false,"internalType":"uint256","name":"quantity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"address","name":"fundingRecipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"}],"name":"EditionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"editionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"numSold","type":"uint256"},{"indexed":true,"internalType":"address","name":"buyer","type":"address"}],"name":"EditionPurchased","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":[{"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":[{"internalType":"uint256","name":"editionId","type":"uint256"}],"name":"buyEdition","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"}],"name":"createEdition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"editions","outputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"address payable","name":"fundingRecipient","type":"address"},{"internalType":"uint256","name":"numSold","type":"uint256"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":"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":"","type":"uint256"}],"name":"tokenToEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"editionId","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawnForEdition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260016009553480156200001657600080fd5b5060405162001f9e38038062001f9e8339810160408190526200003991620000fc565b80516200004e90600490602084019062000056565b505062000225565b8280546200006490620001d2565b90600052602060002090601f016020900481019282620000885760008555620000d3565b82601f10620000a357805160ff1916838001178555620000d3565b82800160010185558215620000d3579182015b82811115620000d3578251825591602001919060010190620000b6565b50620000e1929150620000e5565b5090565b5b80821115620000e15760008155600101620000e6565b600060208083850312156200010f578182fd5b82516001600160401b038082111562000126578384fd5b818501915085601f8301126200013a578384fd5b8151818111156200014f576200014f6200020f565b604051601f8201601f19908116603f011681019083821181831017156200017a576200017a6200020f565b81604052828152888684870101111562000192578687fd5b8693505b82841015620001b5578484018601518185018701529285019262000196565b82841115620001c657868684830101525b98975050505050505050565b600181811c90821680620001e757607f821691505b602082108114156200020957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611d6980620002356000396000f3fe6080604052600436106101445760003560e01c80636352211e116100c0578063b88d4fde11610074578063c87b56dd11610059578063c87b56dd14610442578063d3bb052814610462578063e985e9c51461048f57600080fd5b8063b88d4fde1461040f578063bd8616ec1461042f57600080fd5b806383edd80e116100a557806383edd80e1461038657806395d89b41146103a6578063a22cb465146103ef57600080fd5b80636352211e1461034657806370a082311461036657600080fd5b8063155dd5ee11610117578063279c806e116100fc578063279c806e1461026e57806342842e0e146102eb578063602787ed1461030b57600080fd5b8063155dd5ee1461022e57806323b872dd1461024e57600080fd5b806301ffc9a71461014957806306fdde031461017e578063081812fc146101d4578063095ea7b31461020c575b600080fd5b34801561015557600080fd5b506101696101643660046119fd565b6104d8565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b506101c76040518060400160405280600f81526020017f4d6972726f722045646974696f6e73000000000000000000000000000000000081525081565b6040516101759190611bdb565b3480156101e057600080fd5b506101f46101ef366004611a35565b6105bd565b6040516001600160a01b039091168152602001610175565b34801561021857600080fd5b5061022c6102273660046119d2565b610668565b005b34801561023a57600080fd5b5061022c610249366004611a35565b6107b8565b34801561025a57600080fd5b5061022c610269366004611888565b610843565b34801561027a57600080fd5b506102bc610289366004611a35565b6005602052600090815260409020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610175949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b3480156102f757600080fd5b5061022c610306366004611888565b6108ca565b34801561031757600080fd5b50610338610326366004611a35565b60066020526000908152604090205481565b604051908152602001610175565b34801561035257600080fd5b506101f4610361366004611a35565b6108e5565b34801561037257600080fd5b5061033861038136600461182d565b610970565b34801561039257600080fd5b5061022c6103a1366004611a4d565b610a0a565b3480156103b257600080fd5b506101c76040518060400160405280600881526020017f45444954494f4e5300000000000000000000000000000000000000000000000081525081565b3480156103fb57600080fd5b5061022c61040a3660046119a1565b610add565b34801561041b57600080fd5b5061022c61042a3660046118c8565b610ba2565b61022c61043d366004611a35565b610c30565b34801561044e57600080fd5b506101c761045d366004611a35565b610e3d565b34801561046e57600080fd5b5061033861047d366004611a35565b60076020526000908152604090205481565b34801561049b57600080fd5b506101696104aa366004611850565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061056b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105b757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b031661064c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610673826108e5565b9050806001600160a01b0316836001600160a01b031614156106fd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610643565b336001600160a01b038216148061073757506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b6107a95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610643565b6107b38383610ee7565b505050565b6000818152600760209081526040808320546005909252822060038101546001909101546107e69190611c1a565b6107f09190611c39565b9050806007600084815260200190815260200160002060008282546108159190611bee565b909155505060008281526005602052604090206002015461083f906001600160a01b031682610f62565b5050565b61084d338261107b565b6108bf5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610643565b6107b3838383611183565b6107b383838360405180602001604052806000815250610ba2565b6000818152602081905260408120546001600160a01b0316806105b75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610643565b60006001600160a01b0382166109ee5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610643565b506001600160a01b031660009081526001602052604090205490565b6040805160808101825284815260208082018581526001600160a01b038581168486018181526000606080880182815260098054845260058952928a90209851895595516001890155915160028801805473ffffffffffffffffffffffffffffffffffffffff191691909516179093559251600390950194909455548451888152928301879052938201929092527fbaf1f6ab5aa5406df2735e70c52585e630f9744f4ecdedd8b619e983e927f0b6910160405180910390a260098054906000610ad383611c7c565b9190505550505050565b6001600160a01b038216331415610b365760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610643565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610bac338361107b565b610c1e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610643565b610c2a84848484611361565b50505050565b600081815260056020526040902054610c8b5760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610643565b6000818152600560205260409020805460039091015410610d145760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610643565b6000818152600560205260409020600101543414610d9a5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610643565b6000818152600560205260408120600301805491610db783611c7c565b9190505550610dc8336008546113ea565b60088054600090815260066020908152604080832085905592548483526005825291839020600301549251928352339284917ffe1605523c8db5c52bfac30caf272368bb9024d8300042af87869a6827d692f5910160405180910390a460088054906000610e3583611c7c565b919050555050565b600081815260066020526040902054606090610e9b5760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610643565b600082815260066020526040902054600490610eb69061153b565b610ebf8461153b565b604051602001610ed193929190611acd565b6040516020818303038152906040529050919050565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190610f29826108e5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015610fb25760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610643565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b50509050806107b35760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610643565b6000818152602081905260408120546001600160a01b03166111055760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610643565b6000611110836108e5565b9050806001600160a01b0316846001600160a01b0316148061114b5750836001600160a01b0316611140846105bd565b6001600160a01b0316145b8061117b57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611196826108e5565b6001600160a01b0316146112125760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610643565b6001600160a01b03821661128d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610643565b611298600082610ee7565b6001600160a01b038316600090815260016020819052604082208054919290916112c3908490611c39565b90915550506001600160a01b038216600090815260016020819052604082208054919290916112f3908490611bee565b9091555050600081815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61136c848484611183565b61137884848484611689565b610c2a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610643565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610643565b6000818152602081905260409020546001600160a01b0316156114a55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610643565b6001600160a01b038216600090815260016020819052604082208054919290916114d0908490611bee565b9091555050600081815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161157b57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156115a5578061158f81611c7c565b915061159e9050600a83611c06565b915061157f565b60008167ffffffffffffffff8111156115ce57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115f8576020820181803683370190505b5090505b841561117b5761160d600183611c39565b915061161a600a86611c97565b611625906030611bee565b60f81b81838151811061164857634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611682600a86611c06565b94506115fc565b6000833b15611822576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906116dd903390899088908890600401611ba9565b602060405180830381600087803b1580156116f757600080fd5b505af1925050508015611727575060408051601f3d908101601f1916820190925261172491810190611a19565b60015b6117d7573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b5080516117cf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610643565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061117b565b506001949350505050565b60006020828403121561183e578081fd5b813561184981611ced565b9392505050565b60008060408385031215611862578081fd5b823561186d81611ced565b9150602083013561187d81611ced565b809150509250929050565b60008060006060848603121561189c578081fd5b83356118a781611ced565b925060208401356118b781611ced565b929592945050506040919091013590565b600080600080608085870312156118dd578081fd5b84356118e881611ced565b935060208501356118f881611ced565b925060408501359150606085013567ffffffffffffffff8082111561191b578283fd5b818701915087601f83011261192e578283fd5b81358181111561194057611940611cd7565b604051601f8201601f19908116603f0116810190838211818310171561196857611968611cd7565b816040528281528a6020848701011115611980578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156119b3578182fd5b82356119be81611ced565b91506020830135801515811461187d578182fd5b600080604083850312156119e4578182fd5b82356119ef81611ced565b946020939093013593505050565b600060208284031215611a0e578081fd5b813561184981611d05565b600060208284031215611a2a578081fd5b815161184981611d05565b600060208284031215611a46578081fd5b5035919050565b600080600060608486031215611a61578283fd5b83359250602084013591506040840135611a7a81611ced565b809150509250925092565b60008151808452611a9d816020860160208601611c50565b601f01601f19169290920160200192915050565b60008151611ac3818560208601611c50565b9290920192915050565b600080855482600182811c915080831680611ae957607f831692505b6020808410821415611b0957634e487b7160e01b87526022600452602487fd5b818015611b1d5760018114611b2e57611b5a565b60ff19861689528489019650611b5a565b60008c815260209020885b86811015611b525781548b820152908501908301611b39565b505084890196505b505050505050611b9f611b99611b708388611ab1565b7f2f00000000000000000000000000000000000000000000000000000000000000815260010190565b85611ab1565b9695505050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611b9f6080830184611a85565b6020815260006118496020830184611a85565b60008219821115611c0157611c01611cab565b500190565b600082611c1557611c15611cc1565b500490565b6000816000190483118215151615611c3457611c34611cab565b500290565b600082821015611c4b57611c4b611cab565b500390565b60005b83811015611c6b578181015183820152602001611c53565b83811115610c2a5750506000910152565b6000600019821415611c9057611c90611cab565b5060010190565b600082611ca657611ca6611cc1565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611d0257600080fd5b50565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611d0257600080fdfea26469706673582212206ac640e0f57cb3fc72afb4ae5f8c4d9cf1e683a722a9ffb3f55f39ff55d8b57064736f6c634300080400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f

Deployed Bytecode

0x6080604052600436106101445760003560e01c80636352211e116100c0578063b88d4fde11610074578063c87b56dd11610059578063c87b56dd14610442578063d3bb052814610462578063e985e9c51461048f57600080fd5b8063b88d4fde1461040f578063bd8616ec1461042f57600080fd5b806383edd80e116100a557806383edd80e1461038657806395d89b41146103a6578063a22cb465146103ef57600080fd5b80636352211e1461034657806370a082311461036657600080fd5b8063155dd5ee11610117578063279c806e116100fc578063279c806e1461026e57806342842e0e146102eb578063602787ed1461030b57600080fd5b8063155dd5ee1461022e57806323b872dd1461024e57600080fd5b806301ffc9a71461014957806306fdde031461017e578063081812fc146101d4578063095ea7b31461020c575b600080fd5b34801561015557600080fd5b506101696101643660046119fd565b6104d8565b60405190151581526020015b60405180910390f35b34801561018a57600080fd5b506101c76040518060400160405280600f81526020017f4d6972726f722045646974696f6e73000000000000000000000000000000000081525081565b6040516101759190611bdb565b3480156101e057600080fd5b506101f46101ef366004611a35565b6105bd565b6040516001600160a01b039091168152602001610175565b34801561021857600080fd5b5061022c6102273660046119d2565b610668565b005b34801561023a57600080fd5b5061022c610249366004611a35565b6107b8565b34801561025a57600080fd5b5061022c610269366004611888565b610843565b34801561027a57600080fd5b506102bc610289366004611a35565b6005602052600090815260409020805460018201546002830154600390930154919290916001600160a01b039091169084565b604051610175949392919093845260208401929092526001600160a01b03166040830152606082015260800190565b3480156102f757600080fd5b5061022c610306366004611888565b6108ca565b34801561031757600080fd5b50610338610326366004611a35565b60066020526000908152604090205481565b604051908152602001610175565b34801561035257600080fd5b506101f4610361366004611a35565b6108e5565b34801561037257600080fd5b5061033861038136600461182d565b610970565b34801561039257600080fd5b5061022c6103a1366004611a4d565b610a0a565b3480156103b257600080fd5b506101c76040518060400160405280600881526020017f45444954494f4e5300000000000000000000000000000000000000000000000081525081565b3480156103fb57600080fd5b5061022c61040a3660046119a1565b610add565b34801561041b57600080fd5b5061022c61042a3660046118c8565b610ba2565b61022c61043d366004611a35565b610c30565b34801561044e57600080fd5b506101c761045d366004611a35565b610e3d565b34801561046e57600080fd5b5061033861047d366004611a35565b60076020526000908152604090205481565b34801561049b57600080fd5b506101696104aa366004611850565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205460ff1690565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061056b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806105b757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000818152602081905260408120546001600160a01b031661064c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000908152600260205260409020546001600160a01b031690565b6000610673826108e5565b9050806001600160a01b0316836001600160a01b031614156106fd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610643565b336001600160a01b038216148061073757506001600160a01b038116600090815260036020908152604080832033845290915290205460ff165b6107a95760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610643565b6107b38383610ee7565b505050565b6000818152600760209081526040808320546005909252822060038101546001909101546107e69190611c1a565b6107f09190611c39565b9050806007600084815260200190815260200160002060008282546108159190611bee565b909155505060008281526005602052604090206002015461083f906001600160a01b031682610f62565b5050565b61084d338261107b565b6108bf5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610643565b6107b3838383611183565b6107b383838360405180602001604052806000815250610ba2565b6000818152602081905260408120546001600160a01b0316806105b75760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610643565b60006001600160a01b0382166109ee5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610643565b506001600160a01b031660009081526001602052604090205490565b6040805160808101825284815260208082018581526001600160a01b038581168486018181526000606080880182815260098054845260058952928a90209851895595516001890155915160028801805473ffffffffffffffffffffffffffffffffffffffff191691909516179093559251600390950194909455548451888152928301879052938201929092527fbaf1f6ab5aa5406df2735e70c52585e630f9744f4ecdedd8b619e983e927f0b6910160405180910390a260098054906000610ad383611c7c565b9190505550505050565b6001600160a01b038216331415610b365760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610643565b3360008181526003602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610bac338361107b565b610c1e5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610643565b610c2a84848484611361565b50505050565b600081815260056020526040902054610c8b5760405162461bcd60e51b815260206004820152601660248201527f45646974696f6e20646f6573206e6f74206578697374000000000000000000006044820152606401610643565b6000818152600560205260409020805460039091015410610d145760405162461bcd60e51b815260206004820152602160248201527f546869732065646974696f6e20697320616c726561647920736f6c64206f757460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610643565b6000818152600560205260409020600101543414610d9a5760405162461bcd60e51b815260206004820152602960248201527f4d7573742073656e6420656e6f75676820746f2070757263686173652074686560448201527f2065646974696f6e2e00000000000000000000000000000000000000000000006064820152608401610643565b6000818152600560205260408120600301805491610db783611c7c565b9190505550610dc8336008546113ea565b60088054600090815260066020908152604080832085905592548483526005825291839020600301549251928352339284917ffe1605523c8db5c52bfac30caf272368bb9024d8300042af87869a6827d692f5910160405180910390a460088054906000610e3583611c7c565b919050555050565b600081815260066020526040902054606090610e9b5760405162461bcd60e51b815260206004820152601b60248201527f546f6b656e20686173206e6f74206265656e20736f6c642079657400000000006044820152606401610643565b600082815260066020526040902054600490610eb69061153b565b610ebf8461153b565b604051602001610ed193929190611acd565b6040516020818303038152906040529050919050565b6000818152600260205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091558190610f29826108e5565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b80471015610fb25760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742062616c616e636520666f722073656e640000006044820152606401610643565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114610fff576040519150601f19603f3d011682016040523d82523d6000602084013e611004565b606091505b50509050806107b35760405162461bcd60e51b815260206004820152603160248201527f556e61626c6520746f2073656e642076616c75653a20726563697069656e742060448201527f6d617920686176652072657665727465640000000000000000000000000000006064820152608401610643565b6000818152602081905260408120546001600160a01b03166111055760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610643565b6000611110836108e5565b9050806001600160a01b0316846001600160a01b0316148061114b5750836001600160a01b0316611140846105bd565b6001600160a01b0316145b8061117b57506001600160a01b0380821660009081526003602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b0316611196826108e5565b6001600160a01b0316146112125760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610643565b6001600160a01b03821661128d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610643565b611298600082610ee7565b6001600160a01b038316600090815260016020819052604082208054919290916112c3908490611c39565b90915550506001600160a01b038216600090815260016020819052604082208054919290916112f3908490611bee565b9091555050600081815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b61136c848484611183565b61137884848484611689565b610c2a5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610643565b6001600160a01b0382166114405760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610643565b6000818152602081905260409020546001600160a01b0316156114a55760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610643565b6001600160a01b038216600090815260016020819052604082208054919290916114d0908490611bee565b9091555050600081815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60608161157b57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156115a5578061158f81611c7c565b915061159e9050600a83611c06565b915061157f565b60008167ffffffffffffffff8111156115ce57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115f8576020820181803683370190505b5090505b841561117b5761160d600183611c39565b915061161a600a86611c97565b611625906030611bee565b60f81b81838151811061164857634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611682600a86611c06565b94506115fc565b6000833b15611822576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063150b7a02906116dd903390899088908890600401611ba9565b602060405180830381600087803b1580156116f757600080fd5b505af1925050508015611727575060408051601f3d908101601f1916820190925261172491810190611a19565b60015b6117d7573d808015611755576040519150601f19603f3d011682016040523d82523d6000602084013e61175a565b606091505b5080516117cf5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610643565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a020000000000000000000000000000000000000000000000000000000014905061117b565b506001949350505050565b60006020828403121561183e578081fd5b813561184981611ced565b9392505050565b60008060408385031215611862578081fd5b823561186d81611ced565b9150602083013561187d81611ced565b809150509250929050565b60008060006060848603121561189c578081fd5b83356118a781611ced565b925060208401356118b781611ced565b929592945050506040919091013590565b600080600080608085870312156118dd578081fd5b84356118e881611ced565b935060208501356118f881611ced565b925060408501359150606085013567ffffffffffffffff8082111561191b578283fd5b818701915087601f83011261192e578283fd5b81358181111561194057611940611cd7565b604051601f8201601f19908116603f0116810190838211818310171561196857611968611cd7565b816040528281528a6020848701011115611980578586fd5b82602086016020830137918201602001949094529598949750929550505050565b600080604083850312156119b3578182fd5b82356119be81611ced565b91506020830135801515811461187d578182fd5b600080604083850312156119e4578182fd5b82356119ef81611ced565b946020939093013593505050565b600060208284031215611a0e578081fd5b813561184981611d05565b600060208284031215611a2a578081fd5b815161184981611d05565b600060208284031215611a46578081fd5b5035919050565b600080600060608486031215611a61578283fd5b83359250602084013591506040840135611a7a81611ced565b809150509250925092565b60008151808452611a9d816020860160208601611c50565b601f01601f19169290920160200192915050565b60008151611ac3818560208601611c50565b9290920192915050565b600080855482600182811c915080831680611ae957607f831692505b6020808410821415611b0957634e487b7160e01b87526022600452602487fd5b818015611b1d5760018114611b2e57611b5a565b60ff19861689528489019650611b5a565b60008c815260209020885b86811015611b525781548b820152908501908301611b39565b505084890196505b505050505050611b9f611b99611b708388611ab1565b7f2f00000000000000000000000000000000000000000000000000000000000000815260010190565b85611ab1565b9695505050505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611b9f6080830184611a85565b6020815260006118496020830184611a85565b60008219821115611c0157611c01611cab565b500190565b600082611c1557611c15611cc1565b500490565b6000816000190483118215151615611c3457611c34611cab565b500290565b600082821015611c4b57611c4b611cab565b500390565b60005b83811015611c6b578181015183820152602001611c53565b83811115610c2a5750506000910152565b6000600019821415611c9057611c90611cab565b5060010190565b600082611ca657611ca6611cc1565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611d0257600080fd5b50565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611d0257600080fdfea26469706673582212206ac640e0f57cb3fc72afb4ae5f8c4d9cf1e683a722a9ffb3f55f39ff55d8b57064736f6c63430008040033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002068747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f

-----Decoded View---------------
Arg [0] : baseURI_ (string): https://mirror-api.com/editions/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [2] : 68747470733a2f2f6d6972726f722d6170692e636f6d2f65646974696f6e732f


Deployed Bytecode Sourcemap

10848:6854:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2616:338;;;;;;;;;;-1:-1:-1;2616:338:0;;;;;:::i;:::-;;:::i;:::-;;;7678:14:1;;7671:22;7653:41;;7641:2;7626:18;2616:338:0;;;;;;;;10929:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4692:308::-;;;;;;;;;;-1:-1:-1;4692:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;6930:55:1;;;6912:74;;6900:2;6885:18;4692:308:0;6867:125:1;4277:407:0;;;;;;;;;;-1:-1:-1;4277:407:0;;;;;:::i;:::-;;:::i;:::-;;14923:781;;;;;;;;;;-1:-1:-1;14923:781:0;;;;;:::i;:::-;;:::i;5559:374::-;;;;;;;;;;-1:-1:-1;5559:374:0;;;;;:::i;:::-;;:::i;11765:43::-;;;;;;;;;;-1:-1:-1;11765:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11765:43:0;;;;;;;;;;;;;;;16232:25:1;;;16288:2;16273:18;;16266:34;;;;-1:-1:-1;;;;;16336:55:1;16331:2;16316:18;;16309:83;16423:2;16408:18;;16401:34;16219:3;16204:19;;16186:255;5941:185:0;;;;;;;;;;-1:-1:-1;5941:185:0;;;;;:::i;:::-;;:::i;11858:49::-;;;;;;;;;;-1:-1:-1;11858:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15568:25:1;;;15556:2;15541:18;11858:49:0;15523:76:1;3265:326:0;;;;;;;;;;-1:-1:-1;3265:326:0;;;;;:::i;:::-;;:::i;2962:295::-;;;;;;;;;;-1:-1:-1;2962:295:0;;;;;:::i;:::-;;:::i;13005:604::-;;;;;;;;;;-1:-1:-1;13005:604:0;;;;;:::i;:::-;;:::i;10983:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5008:321;;;;;;;;;;-1:-1:-1;5008:321:0;;;;;:::i;:::-;;:::i;6134:363::-;;;;;;;;;;-1:-1:-1;6134:363:0;;;;;:::i;:::-;;:::i;13617:1242::-;;;;;;:::i;:::-;;:::i;15835:619::-;;;;;;;;;;-1:-1:-1;15835:619:0;;;;;:::i;:::-;;:::i;11996:54::-;;;;;;;;;;-1:-1:-1;11996:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;5337:214;;;;;;;;;;-1:-1:-1;5337:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;5508:25:0;;;5479:4;5508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;5337:214;2616:338;2746:4;2788:40;;;2803:25;2788:40;;:105;;-1:-1:-1;2845:48:0;;;2860:33;2845:48;2788:105;:158;;;-1:-1:-1;2169:25:0;2154:40;;;;2910:36;2768:178;2616:338;-1:-1:-1;;2616:338:0:o;4692:308::-;4813:7;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;4838:110;;;;-1:-1:-1;;;4838:110:0;;12400:2:1;4838:110:0;;;12382:21:1;12439:2;12419:18;;;12412:30;12478:34;12458:18;;;12451:62;12549:14;12529:18;;;12522:42;12581:19;;4838:110:0;;;;;;;;;-1:-1:-1;4968:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;4968:24:0;;4692:308::o;4277:407::-;4358:13;4374:23;4389:7;4374:14;:23::i;:::-;4358:39;;4422:5;-1:-1:-1;;;;;4416:11:0;:2;-1:-1:-1;;;;;4416:11:0;;;4408:57;;;;-1:-1:-1;;;4408:57:0;;14035:2:1;4408:57:0;;;14017:21:1;14074:2;14054:18;;;14047:30;14113:34;14093:18;;;14086:62;14184:3;14164:18;;;14157:31;14205:19;;4408:57:0;14007:223:1;4408:57:0;4500:10;-1:-1:-1;;;;;4500:19:0;;;;:58;;-1:-1:-1;;;;;;5508:25:0;;5479:4;5508:25;;;:18;:25;;;;;;;;4547:10;5508:35;;;;;;;;;;4523;4478:164;;;;-1:-1:-1;;;4478:164:0;;10437:2:1;4478:164:0;;;10419:21:1;10476:2;10456:18;;;10449:30;10515:34;10495:18;;;10488:62;10586:26;10566:18;;;10559:54;10630:19;;4478:164:0;10409:246:1;4478:164:0;4655:21;4664:2;4668:7;4655:8;:21::i;:::-;4277:407;;;:::o;14923:781::-;15061:27;15350:30;;;:19;:30;;;;;;;;;15229:8;:19;;;;;:27;;;;15201:25;;;;;:55;;15229:27;15201:55;:::i;:::-;15200:180;;;;:::i;:::-;15061:319;;15507:19;15473;:30;15493:9;15473:30;;;;;;;;;;;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;15638:19:0;;;;:8;:19;;;;;:36;;;15627:69;;-1:-1:-1;;;;;15638:36:0;15676:19;15627:10;:69::i;:::-;14923:781;;:::o;5559:374::-;5768:39;5787:10;5799:7;5768:18;:39::i;:::-;5746:138;;;;-1:-1:-1;;;5746:138:0;;14437:2:1;5746:138:0;;;14419:21:1;14476:2;14456:18;;;14449:30;14515:34;14495:18;;;14488:62;14586:19;14566:18;;;14559:47;14623:19;;5746:138:0;14409:239:1;5746:138:0;5897:28;5907:4;5913:2;5917:7;5897:9;:28::i;5941:185::-;6079:39;6096:4;6102:2;6106:7;6079:39;;;;;;;;;;;;:16;:39::i;3265:326::-;3382:7;3423:16;;;;;;;;;;;-1:-1:-1;;;;;3423:16:0;3472:19;3450:110;;;;-1:-1:-1;;;3450:110:0;;11273:2:1;3450:110:0;;;11255:21:1;11312:2;11292:18;;;11285:30;11351:34;11331:18;;;11324:62;11422:11;11402:18;;;11395:39;11451:19;;3450:110:0;11245:231:1;2962:295:0;3079:7;-1:-1:-1;;;;;3126:19:0;;3104:111;;;;-1:-1:-1;;;3104:111:0;;10862:2:1;3104:111:0;;;10844:21:1;10901:2;10881:18;;;10874:30;10940:34;10920:18;;;10913:62;11011:12;10991:18;;;10984:40;11041:19;;3104:111:0;10834:232:1;3104:111:0;-1:-1:-1;;;;;;3233:16:0;;;;;:9;:16;;;;;;;2962:295::o;13005:604::-;13337:154;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13337:154:0;;;;;;;;;-1:-1:-1;13337:154:0;;;;;;;13320:13;;;13311:23;;:8;:23;;;;;;:180;;;;;;;;;;;;;;;;;-1:-1:-1;;13311:180:0;;;;;;;;;;;;;;;;;;;13559:13;13509:64;;15814:25:1;;;15855:18;;;15848:34;;;15898:18;;;15891:83;;;;13509:64:0;;15787:18:1;13509:64:0;;;;;;;13586:13;:15;;;:13;:15;;;:::i;:::-;;;;;;13005:604;;;:::o;5008:321::-;-1:-1:-1;;;;;5143:22:0;;5155:10;5143:22;;5135:60;;;;-1:-1:-1;;;5135:60:0;;9670:2:1;5135:60:0;;;9652:21:1;9709:2;9689:18;;;9682:30;9748:27;9728:18;;;9721:55;9793:18;;5135:60:0;9642:175:1;5135:60:0;5227:10;5208:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;5208:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;5208:51:0;;;;;;;;;;5275:46;;7653:41:1;;;5208:40:0;;5227:10;5275:46;;7626:18:1;5275:46:0;;;;;;;5008:321;;:::o;6134:363::-;6323:39;6342:10;6354:7;6323:18;:39::i;:::-;6301:138;;;;-1:-1:-1;;;6301:138:0;;14437:2:1;6301:138:0;;;14419:21:1;14476:2;14456:18;;;14449:30;14515:34;14495:18;;;14488:62;14586:19;14566:18;;;14559:47;14623:19;;6301:138:0;14409:239:1;6301:138:0;6450:39;6464:4;6470:2;6474:7;6483:5;6450:13;:39::i;:::-;6134:363;;;;:::o;13617:1242::-;13869:1;13838:19;;;:8;:19;;;;;:28;13830:67;;;;-1:-1:-1;;;13830:67:0;;15273:2:1;13830:67:0;;;15255:21:1;15312:2;15292:18;;;15285:30;15351:24;15331:18;;;15324:52;15393:18;;13830:67:0;15245:172:1;13830:67:0;14029:19;;;;:8;:19;;;;;:28;;13999:27;;;;;:58;13977:141;;;;-1:-1:-1;;;13977:141:0;;12813:2:1;13977:141:0;;;12795:21:1;12852:2;12832:18;;;12825:30;12891:34;12871:18;;;12864:62;12962:3;12942:18;;;12935:31;12983:19;;13977:141:0;12785:223:1;13977:141:0;14228:19;;;;:8;:19;;;;;:25;;;14215:9;:38;14193:129;;;;-1:-1:-1;;;14193:129:0;;13625:2:1;14193:129:0;;;13607:21:1;13664:2;13644:18;;;13637:30;13703:34;13683:18;;;13676:62;13774:11;13754:18;;;13747:39;13803:19;;14193:129:0;13597:231:1;14193:129:0;14399:19;;;;:8;:19;;;;;:27;;:29;;;;;;:::i;:::-;;;;;;14509:30;14515:10;14527:11;;14509:5;:30::i;:::-;14639:11;;;14624:27;;;;:14;:27;;;;;;;;:39;;;14736:11;;14762:19;;;:8;:19;;;;;;:27;;;14681:144;;15568:25:1;;;14804:10:0;;14624:39;;14681:144;;15541:18:1;14681:144:0;;;;;;;14838:11;:13;;;:11;:13;;;:::i;:::-;;;;;;13617:1242;:::o;15835:619::-;16066:1;16040:23;;;:14;:23;;;;;;15936:13;;16032:67;;;;-1:-1:-1;;;16032:67:0;;12044:2:1;16032:67:0;;;12026:21:1;12083:2;12063:18;;;12056:30;12122:29;12102:18;;;12095:57;12169:18;;16032:67:0;12016:177:1;16032:67:0;16321:23;;;;:14;:23;;;;;;16281:7;;16311:34;;:9;:34::i;:::-;16394:18;16404:7;16394:9;:18::i;:::-;16242:189;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16197:249;;15835:619;;;:::o;9117:174::-;9192:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;9192:29:0;-1:-1:-1;;;;;9192:29:0;;;;;;;;:24;;9246:23;9192:24;9246:14;:23::i;:::-;-1:-1:-1;;;;;9237:46:0;;;;;;;;;;;9117:174;;:::o;16514:345::-;16643:6;16618:21;:31;;16596:110;;;;-1:-1:-1;;;16596:110:0;;8550:2:1;16596:110:0;;;8532:21:1;8589:2;8569:18;;;8562:30;8628:31;8608:18;;;8601:59;8677:18;;16596:110:0;8522:179:1;16596:110:0;16720:12;16738:9;-1:-1:-1;;;;;16738:14:0;16760:6;16738:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16719:52;;;16790:7;16782:69;;;;-1:-1:-1;;;16782:69:0;;14855:2:1;16782:69:0;;;14837:21:1;14894:2;14874:18;;;14867:30;14933:34;14913:18;;;14906:62;15004:19;14984:18;;;14977:47;15041:19;;16782:69:0;14827:239:1;7000:452:0;7129:4;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;7151:110;;;;-1:-1:-1;;;7151:110:0;;10024:2:1;7151:110:0;;;10006:21:1;10063:2;10043:18;;;10036:30;10102:34;10082:18;;;10075:62;10173:14;10153:18;;;10146:42;10205:19;;7151:110:0;9996:234:1;7151:110:0;7272:13;7288:23;7303:7;7288:14;:23::i;:::-;7272:39;;7341:5;-1:-1:-1;;;;;7330:16:0;:7;-1:-1:-1;;;;;7330:16:0;;:64;;;;7387:7;-1:-1:-1;;;;;7363:31:0;:20;7375:7;7363:11;:20::i;:::-;-1:-1:-1;;;;;7363:31:0;;7330:64;:113;;;-1:-1:-1;;;;;;5508:25:0;;;5479:4;5508:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;7411:32;7322:122;7000:452;-1:-1:-1;;;;7000:452:0:o;8546:563::-;8719:4;-1:-1:-1;;;;;8692:31:0;:23;8707:7;8692:14;:23::i;:::-;-1:-1:-1;;;;;8692:31:0;;8670:122;;;;-1:-1:-1;;;8670:122:0;;13215:2:1;8670:122:0;;;13197:21:1;13254:2;13234:18;;;13227:30;13293:34;13273:18;;;13266:62;13364:11;13344:18;;;13337:39;13393:19;;8670:122:0;13187:231:1;8670:122:0;-1:-1:-1;;;;;8811:16:0;;8803:65;;;;-1:-1:-1;;;8803:65:0;;9265:2:1;8803:65:0;;;9247:21:1;9304:2;9284:18;;;9277:30;9343:34;9323:18;;;9316:62;9414:6;9394:18;;;9387:34;9438:19;;8803:65:0;9237:226:1;8803:65:0;8933:29;8950:1;8954:7;8933:8;:29::i;:::-;-1:-1:-1;;;;;8975:15:0;;;;;;8994:1;8975:15;;;;;;;:20;;8994:1;;8975:15;;:20;;8994:1;;8975:20;:::i;:::-;;;;-1:-1:-1;;;;;;;9006:13:0;;;;;;9023:1;9006:13;;;;;;;:18;;9023:1;;9006:13;;:18;;9023:1;;9006:18;:::i;:::-;;;;-1:-1:-1;;9035:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;9035:21:0;-1:-1:-1;;;;;9035:21:0;;;;;;;;;9074:27;;9035:16;;9074:27;;;;;;;8546:563;;;:::o;6505:352::-;6662:28;6672:4;6678:2;6682:7;6662:9;:28::i;:::-;6723:48;6746:4;6752:2;6756:7;6765:5;6723:22;:48::i;:::-;6701:148;;;;-1:-1:-1;;;6701:148:0;;8131:2:1;6701:148:0;;;8113:21:1;8170:2;8150:18;;;8143:30;8209:34;8189:18;;;8182:62;8280:20;8260:18;;;8253:48;8318:19;;6701:148:0;8103:240:1;7907:324:0;-1:-1:-1;;;;;7987:16:0;;7979:61;;;;-1:-1:-1;;;7979:61:0;;11683:2:1;7979:61:0;;;11665:21:1;;;11702:18;;;11695:30;11761:34;11741:18;;;11734:62;11813:18;;7979:61:0;11655:182:1;7979:61:0;6930:4;6954:16;;;;;;;;;;;-1:-1:-1;;;;;6954:16:0;:30;8051:58;;;;-1:-1:-1;;;8051:58:0;;8908:2:1;8051:58:0;;;8890:21:1;8947:2;8927:18;;;8920:30;8986;8966:18;;;8959:58;9034:18;;8051:58:0;8880:178:1;8051:58:0;-1:-1:-1;;;;;8122:13:0;;;;;;8139:1;8122:13;;;;;;;:18;;8139:1;;8122:13;;:18;;8139:1;;8122:18;:::i;:::-;;;;-1:-1:-1;;8151:7:0;:16;;;;;;;;;;;:21;;-1:-1:-1;;8151:21:0;-1:-1:-1;;;;;8151:21:0;;;;;;;;8190:33;;8151:16;;:7;8190:33;;8151:7;;8190:33;7907:324;;:::o;16975:724::-;17032:13;17253:10;17249:53;;-1:-1:-1;;17280:10:0;;;;;;;;;;;;;;;;;;16975:724::o;17249:53::-;17327:5;17312:12;17368:78;17375:9;;17368:78;;17401:8;;;;:::i;:::-;;-1:-1:-1;17424:10:0;;-1:-1:-1;17432:2:0;17424:10;;:::i;:::-;;;17368:78;;;17456:19;17488:6;17478:17;;;;;;-1:-1:-1;;;17478:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17478:17:0;;17456:39;;17506:154;17513:10;;17506:154;;17540:11;17550:1;17540:11;;:::i;:::-;;-1:-1:-1;17609:10:0;17617:2;17609:5;:10;:::i;:::-;17596:24;;:2;:24;:::i;:::-;17583:39;;17566:6;17573;17566:14;;;;;;-1:-1:-1;;;17566:14:0;;;;;;;;;;;;:56;;;;;;;;;;-1:-1:-1;17637:11:0;17646:2;17637:11;;:::i;:::-;;;17506:154;;9299:1050;9454:4;10683:20;;10731:8;9471:871;;9527:173;;;;;-1:-1:-1;;;;;9527:36:0;;;;;:173;;9586:10;;9619:4;;9646:7;;9676:5;;9527:173;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9527:173:0;;;;;;;;-1:-1:-1;;9527:173:0;;;;;;;;;;;;:::i;:::-;;;9506:781;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9887:13:0;;9883:389;;9930:108;;-1:-1:-1;;;9930:108:0;;8131:2:1;9930:108:0;;;8113:21:1;8170:2;8150:18;;;8143:30;8209:34;8189:18;;;8182:62;8280:20;8260:18;;;8253:48;8318:19;;9930:108:0;8103:240:1;9883:389:0;10222:6;10216:13;10207:6;10203:2;10199:15;10192:38;9506:781;9764:55;;9774:45;9764:55;;-1:-1:-1;9757:62:0;;9471:871;-1:-1:-1;10326:4:0;9299:1050;;;;;;:::o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;:::-;260:5;84:187;-1:-1:-1;;;84:187:1:o;276:398::-;344:6;352;405:2;393:9;384:7;380:23;376:32;373:2;;;426:6;418;411:22;373:2;470:9;457:23;489:31;514:5;489:31;:::i;:::-;539:5;-1:-1:-1;596:2:1;581:18;;568:32;609:33;568:32;609:33;:::i;:::-;661:7;651:17;;;363:311;;;;;:::o;679:466::-;756:6;764;772;825:2;813:9;804:7;800:23;796:32;793:2;;;846:6;838;831:22;793:2;890:9;877:23;909:31;934:5;909:31;:::i;:::-;959:5;-1:-1:-1;1016:2:1;1001:18;;988:32;1029:33;988:32;1029:33;:::i;:::-;783:362;;1081:7;;-1:-1:-1;;;1135:2:1;1120:18;;;;1107:32;;783:362::o;1150:1370::-;1245:6;1253;1261;1269;1322:3;1310:9;1301:7;1297:23;1293:33;1290:2;;;1344:6;1336;1329:22;1290:2;1388:9;1375:23;1407:31;1432:5;1407:31;:::i;:::-;1457:5;-1:-1:-1;1514:2:1;1499:18;;1486:32;1527:33;1486:32;1527:33;:::i;:::-;1579:7;-1:-1:-1;1633:2:1;1618:18;;1605:32;;-1:-1:-1;1688:2:1;1673:18;;1660:32;1711:18;1741:14;;;1738:2;;;1773:6;1765;1758:22;1738:2;1816:6;1805:9;1801:22;1791:32;;1861:7;1854:4;1850:2;1846:13;1842:27;1832:2;;1888:6;1880;1873:22;1832:2;1929;1916:16;1951:2;1947;1944:10;1941:2;;;1957:18;;:::i;:::-;2091:2;2085:9;2153:4;2145:13;;-1:-1:-1;;2141:22:1;;;2165:2;2137:31;2133:40;2121:53;;;2189:18;;;2209:22;;;2186:46;2183:2;;;2235:18;;:::i;:::-;2275:10;2271:2;2264:22;2310:2;2302:6;2295:18;2350:7;2345:2;2340;2336;2332:11;2328:20;2325:33;2322:2;;;2376:6;2368;2361:22;2322:2;2437;2432;2428;2424:11;2419:2;2411:6;2407:15;2394:46;2460:15;;;2477:2;2456:24;2449:40;;;;1280:1240;;;;-1:-1:-1;1280:1240:1;;-1:-1:-1;;;;1280:1240:1:o;2525:436::-;2590:6;2598;2651:2;2639:9;2630:7;2626:23;2622:32;2619:2;;;2672:6;2664;2657:22;2619:2;2716:9;2703:23;2735:31;2760:5;2735:31;:::i;:::-;2785:5;-1:-1:-1;2842:2:1;2827:18;;2814:32;2884:15;;2877:23;2865:36;;2855:2;;2920:6;2912;2905:22;2966:325;3034:6;3042;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3116:6;3108;3101:22;3063:2;3160:9;3147:23;3179:31;3204:5;3179:31;:::i;:::-;3229:5;3281:2;3266:18;;;;3253:32;;-1:-1:-1;;;3053:238:1:o;3296:255::-;3354:6;3407:2;3395:9;3386:7;3382:23;3378:32;3375:2;;;3428:6;3420;3413:22;3375:2;3472:9;3459:23;3491:30;3515:5;3491:30;:::i;3556:259::-;3625:6;3678:2;3666:9;3657:7;3653:23;3649:32;3646:2;;;3699:6;3691;3684:22;3646:2;3736:9;3730:16;3755:30;3779:5;3755:30;:::i;3820:190::-;3879:6;3932:2;3920:9;3911:7;3907:23;3903:32;3900:2;;;3953:6;3945;3938:22;3900:2;-1:-1:-1;3981:23:1;;3890:120;-1:-1:-1;3890:120:1:o;4015:401::-;4100:6;4108;4116;4169:2;4157:9;4148:7;4144:23;4140:32;4137:2;;;4190:6;4182;4175:22;4137:2;4231:9;4218:23;4208:33;;4288:2;4277:9;4273:18;4260:32;4250:42;;4342:2;4331:9;4327:18;4314:32;4355:31;4380:5;4355:31;:::i;:::-;4405:5;4395:15;;;4127:289;;;;;:::o;4421:316::-;4462:3;4500:5;4494:12;4527:6;4522:3;4515:19;4543:63;4599:6;4592:4;4587:3;4583:14;4576:4;4569:5;4565:16;4543:63;:::i;:::-;4651:2;4639:15;-1:-1:-1;;4635:88:1;4626:98;;;;4726:4;4622:109;;4470:267;-1:-1:-1;;4470:267:1:o;4742:185::-;4784:3;4822:5;4816:12;4837:52;4882:6;4877:3;4870:4;4863:5;4859:16;4837:52;:::i;:::-;4905:16;;;;;4792:135;-1:-1:-1;;4792:135:1:o;5051:1500::-;5376:3;5405;5440:6;5434:13;5470:3;5492:1;5520:9;5516:2;5512:18;5502:28;;5580:2;5569:9;5565:18;5602;5592:2;;5646:4;5638:6;5634:17;5624:27;;5592:2;5672;5720;5712:6;5709:14;5689:18;5686:38;5683:2;;;-1:-1:-1;;;5754:3:1;5747:90;5860:4;5857:1;5850:15;5890:4;5885:3;5878:17;5683:2;5921:18;5948:162;;;;6124:1;6119:322;;;;5914:527;;5948:162;-1:-1:-1;;5985:9:1;5981:82;5976:3;5969:95;6093:6;6088:3;6084:16;6077:23;;5948:162;;6119:322;16493:4;16512:17;;;16562:4;16546:21;;6214:3;6230:165;6244:6;6241:1;6238:13;6230:165;;;6322:14;;6309:11;;;6302:35;6365:16;;;;6259:10;;6230:165;;;6234:3;;6424:6;6419:3;6415:16;6408:23;;5914:527;;;;;;;6457:88;6483:61;6513:30;6539:3;6531:6;6513:30;:::i;:::-;5009:3;4997:16;;5038:1;5029:11;;4987:59;6483:61;6475:6;6457:88;:::i;:::-;6450:95;5384:1167;-1:-1:-1;;;;;;5384:1167:1:o;6997:511::-;7191:4;-1:-1:-1;;;;;7301:2:1;7293:6;7289:15;7278:9;7271:34;7353:2;7345:6;7341:15;7336:2;7325:9;7321:18;7314:43;;7393:6;7388:2;7377:9;7373:18;7366:34;7436:3;7431:2;7420:9;7416:18;7409:31;7457:45;7497:3;7486:9;7482:19;7474:6;7457:45;:::i;7705:219::-;7854:2;7843:9;7836:21;7817:4;7874:44;7914:2;7903:9;7899:18;7891:6;7874:44;:::i;16578:128::-;16618:3;16649:1;16645:6;16642:1;16639:13;16636:2;;;16655:18;;:::i;:::-;-1:-1:-1;16691:9:1;;16626:80::o;16711:120::-;16751:1;16777;16767:2;;16782:18;;:::i;:::-;-1:-1:-1;16816:9:1;;16757:74::o;16836:228::-;16876:7;17002:1;-1:-1:-1;;16930:74:1;16927:1;16924:81;16919:1;16912:9;16905:17;16901:105;16898:2;;;17009:18;;:::i;:::-;-1:-1:-1;17049:9:1;;16888:176::o;17069:125::-;17109:4;17137:1;17134;17131:8;17128:2;;;17142:18;;:::i;:::-;-1:-1:-1;17179:9:1;;17118:76::o;17199:258::-;17271:1;17281:113;17295:6;17292:1;17289:13;17281:113;;;17371:11;;;17365:18;17352:11;;;17345:39;17317:2;17310:10;17281:113;;;17412:6;17409:1;17406:13;17403:2;;;-1:-1:-1;;17447:1:1;17429:16;;17422:27;17252:205::o;17462:195::-;17501:3;-1:-1:-1;;17525:5:1;17522:77;17519:2;;;17602:18;;:::i;:::-;-1:-1:-1;17649:1:1;17638:13;;17509:148::o;17662:112::-;17694:1;17720;17710:2;;17725:18;;:::i;:::-;-1:-1:-1;17759:9:1;;17700:74::o;17779:184::-;-1:-1:-1;;;17828:1:1;17821:88;17928:4;17925:1;17918:15;17952:4;17949:1;17942:15;17968:184;-1:-1:-1;;;18017:1:1;18010:88;18117:4;18114:1;18107:15;18141:4;18138:1;18131:15;18157:184;-1:-1:-1;;;18206:1:1;18199:88;18306:4;18303:1;18296:15;18330:4;18327:1;18320:15;18346:154;-1:-1:-1;;;;;18425:5:1;18421:54;18414:5;18411:65;18401:2;;18490:1;18487;18480:12;18401:2;18391:109;:::o;18505:177::-;18590:66;18583:5;18579:78;18572:5;18569:89;18559:2;;18672:1;18669;18662:12

Swarm Source

ipfs://6ac640e0f57cb3fc72afb4ae5f8c4d9cf1e683a722a9ffb3f55f39ff55d8b570
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.